Polar Code 🎭

Command Palette

Search for a command to run...

02
Pièce N°02

Chapitre 1 — Le Fond du Gouffre

Un programme commence toujours dans le noir. Un point d'entrée, et après… l'abîme.

1. Syntaxe de base

Structure d’un programme C#
C'est comme un plan de coffre. Une enveloppe namespace, une classe blindée, une méthode Main qui attend, seule, derrière la porte.

using System;

namespace MonTerrier
{
    class Programme
    {
        static void Main(string[] args)
        {
            // Tout commence ici
            Console.WriteLine("La machine s'éveille.");
        }
    }
}

Méthode Main
L'endroit où tout commence et où tout finit. Un static void. Un pacte avec le CLR.

static void Main(string[] args)  // Les arguments de la ligne de commande
{
    // Le premier souffle
    // Le dernier soupir
}

Commentaires
Les murmures du code. Les aveux entre les lignes.

// Hack de minuit. Ne pas toucher.
// TODO: Réparer ça avant le déploiement (spoiler : jamais)

int calcul = a + b;  // Ici, en 2023, Mathieu a laissé une faille

/*
 * Bloc de code mystérieux
 * Qui fait quelque chose d'important
 * Personne n'ose y toucher
 */

Conventions de nommage
Le code a ses lois. Brisez-les, et vous êtes marqué.

public class ClientService  // PascalCase - la loi
{
    private string _connectionString;  // _privé - la tradition
    
    public void TraiterCommande(int idCommande)  // PascalCase encore
    {
        var montantTotal = CalculerTotal(idCommande);  // camelCase - la rue
        // Respecte les règles si tu veux passer inaperçu
    }
}

2. Types et variables

Types primitifs
Les petites monnaies de la mémoire.

int balles = 6;                // Compte les coups restants
double pourcentageDeRisque = 99.7;  // Les chances que ça plante
bool estVivant = false;        // Une question simple, une réponse amère
string dernierMot = "Et merde...";  // Toujours un piège

Types valeur vs types référence
La grande fracture de la mémoire.

// Type valeur - vit et meurt sur la pile
int x = 10;
int y = x;  // Copie, pas de lien
y = 20;     // x reste à 10

// Type référence - traîne dans le tas
string[] temoins = { "Alice", "Bob" };
string[] suspects = temoins;  // Même adresse, même mémoire
suspects[0] = "Carol";        // Alice devient Carol partout

var
L'inférence. Une délégation risquée.

var message = "Je sais ce que je fais";  // string
var compteur = 42;                      // int
var estFini = false;                    // bool

// Le compilateur sait, mais toi, tu devines
var resultat = GetData();  // Quel type ? Qui sait. Bonne chance.

Constantes
Les promesses qu'on ne peut pas briser.

const int HeuresMax = 72;        // Inchangeable, comme un pacte
readonly DateTime DateLimite;    // Fixé une fois, au début

public Surveillant()
{
    DateLimite = DateTime.Now.AddDays(7);  // On ne change plus
    // HeuresMax = 80;  // Impossible. Le compilateur te regarde.
}

Nullable types
La permission de n'être rien.

int? argentSurCompte = null;  // Peut être un int, ou le vide
string? messageSecret = null;  // La mort ou le message

if (argentSurCompte.HasValue)  // Vérifie avant de plonger
{
    Console.WriteLine($"Il reste {argentSurCompte.Value} balles.");
}
// Sinon, c'est NullReferenceException à l'horizon

3. Opérateurs et expressions

Opérateurs arithmétiques
La comptabilité du crime.

int cadavres = 5;
int nouveaux = 3;
int total = cadavres + nouveaux;      // 8 - l'addition
int parEquipe = total / 2;            // 4 - la division
int reste = total % 3;                // 2 - ce qui reste dans les poches

Opérateurs logiques et de comparaison
Les interrogatoires.

bool alibi = true;
bool mobile = false;
bool coupable = !alibi && mobile;     // FALSE - pas les deux

int niveauRisque = 7;
bool danger = niveauRisque > 5;       // TRUE - le seuil est franchi
bool securite = niveauRisque <= 3;    // FALSE - trop tard

Opérateur ternaire
Le choix rapide dans l'ombre.

string statut = estVivant ? "Actif" : "Retiré";
// Plus rapide qu'un if
// Plus obscur aussi

int recompense = missionReussie ? 10000 : 0;  // Tout ou rien

??, ?.
Les garde-fous. Les parachutes.

string nom = nomSuspect ?? "Inconnu";  
// Si nomSuspect est null, "Inconnu" prend la place

string? adresse = dossier?.Adresse?.Rue;
// Chaque ?. est une vérification
// Si dossier est null, adresse sera null sans planter
// Élégant. Mortel.

4. Structures de contrôle

Conditions
Les carrefours où tout se décide.

if (porteEstVerrouillee)
{
    Console.WriteLine("On passe par la fenêtre.");
}
else if (gardienEstAbsent)
{
    Console.WriteLine("On entre discrètement.");
}
else
{
    Console.WriteLine("On attend dans l'ombre.");
}

// Le switch - quand les if s'accumulent
switch (arme)
{
    case "Couteau":
        Console.WriteLine("Silencieux, mais salissant.");
        break;
    case "Poison":
        Console.WriteLine("Lent, mais propre.");
        break;
    default:
        Console.WriteLine("Les mains nues.");
        break;
}

Boucles
Les routines. Ce qu'on répète jusqu'à ce que ça casse.

// for - quand on sait combien de tours on va faire
for (int i = 0; i < cibles.Count; i++)
{
    Viser(cibles[i]);
    Console.WriteLine($"Cible {i + 1} neutralisée.");
}

// foreach - parcourir sans se soucier des indices
foreach (var temoin in listeTemoins)
{
    Interroger(temoin);  // Un par un, dans l'ordre
}

// while - tant que la condition tient
while (!missionAccomplie)
{
    Continuer();
    // Danger : boucle infinie si missionAccomplie ne devient jamais true
}

// do while - faire au moins une fois
do
{
    TenterLeCoup();
} while (!reussite);  // Puis vérifier

Mots-clés break, continue, return
Les sorties de secours. Les trahisons élégantes.

foreach (var suspect in suspects)
{
    if (suspect.Alibi == "Parfait") 
    {
        continue;  // Passe au suivant, celui-là est propre
    }
    
    if (suspect.Nom == "LeVraiCoupable")
    {
        Arreter(suspect);
        break;  // On s'arrête là, on a notre homme
    }
    
    if (suspect.EstDangereux)
    {
        return;  // Abandonne tout, sors de la méthode
        // Rien après ne s'exécutera
    }
}

Le chapitre se referme.
Tu as maintenant les outils. Les types, les variables, les structures de contrôle.
Des armes blanches, propres, qui ne demandent qu'à être utilisées.
La prochaine fois, on parlera des fonctions.
Là où la logique se cache.
Là où les bugs naissent.

Rappelle-toi : chaque variable déclarée est une responsabilité.
Chaque boucle, une promesse de finitude.
Chaque condition, un chemin choisi.

Le CLR attend.
Le GC observe.
Code proprement.
Ou apprends à courir vite.