Aller au contenu principal

C Sharp

Normes départementales du langage C#.

Fichiers​

Les fichiers du langage C# doivent avoir l'extension .cs.

Chaque classe doit être dans un ou des fichiers et porter le même nom, à moins que plusieurs classes soient indissociables.

Langue​

Le code peut être en anglais ou en français, mais doit être constant. Tandis que la documentation, les commentaires, les sorties du terminal, et les interfaces utilisateurs doivent obligatoirement être en français.

Usages​

Limiter les usages à ce qui est nécessaire au code présent dans le fichier :

using System.Collections;
// ^^^^^^^^^^^^^^^^^^^ Ne devrait pas être présent puisqu'inutilisé.

Console.WriteLine("Bonjour le monde!");

Identificateurs​

Tous les identificateurs doivent être significatifs.

De plus, pour une meilleure intercompatibilité, les règles suivantes devraient être respectées :

  • Débuter par une lettre ou un trait de soulignement.
  • Contenir que des lettres (sans accent), des chiffres, et des traits de soulignement.
  • Ne pas être un terme réservé par les langages de programmation.

Constantes​

Pour être plus distinguables des autres identificateurs, ceux des constantes doivent utiliser la notation « serpent criant (screaming snake case) » en contenant que des lettres majuscules et des traits de soulignement pour séparer les termes :

const int VALEUR_MAXIMALE = 42;

Variables​

Les identificateurs de données membres, de variables, de méthodes, et de fonctions, doivent utiliser la casse de chameau « camel case », c'est-à-dire commencer par un caractère minuscule, et utiliser un caractère majuscule au début des termes suivants :

bool identificateurDeVariableBooleenne = true;

Fonction​

L'identificateur doit comporter un verbe à l'infinitif précisant ce que réalise la fonction.

Une fonction devrait contenir au maximum une trentaine de lignes de code, et devrait être déclarée « inline » lorsqu'elle comporte moins de 2 lignes de code.

Les paramètres devraient être ordonnés de sorte à pouvoir définir le plus d'arguments par défaut possible.

Structures et Classes​

Les identificateurs d'espace de nom, de structure, de classe, etc., doivent utiliser la casse pascal « studle caps », en débutant par un caractère majuscule :

struct Structure {}
class Classe {}

Netteté​

Tout code source doit être le plus concis possible, tout en restant visuellement agréable et facile à lire.

Les remises ne devraient pas contenir de code de débogage.

Commentaires​

Outre pour des raisons académiques, seuls les morceaux de code non triviaux doivent être commentés afin d'expliquer leur algorithme.

Les remises ne devraient pas contenir de code en commentaire inutilement.

Aération​

Comme dans tous textes, les gros morceaux de code doivent être séparés en paragraphes afin d'être plus agréables à lire, mais il ne devrait pas y avoir plus de 2 sauts de lignes consécutifs.

Chaque éléments importants doivent aussi être séparés par une ligne vide. Par exemple: entre les inclusions et la classe, entre les données membres et les méthodes, et entre chaque méthodes.

Accolades​

Les accolades ouvrantes doivent être en fin de ligne et précédées d'un espace pour les fonctions et méthodes, les if, les else, les while, les for, et les case :

void fonction() {
// Instructions
}

Les accolades doivent être précédées et suivies d'un espace lors d'initialisation sur une seule ligne :

short[] tabEntiers = { 7, 42, 69, 404, 666 };

Opérateurs​

Les opérateurs unaires doivent être adjacents aux identificateurs tandis que les opérateurs binaires doivent être précédés et suivis d'un espace :

int variableC = ++variableA / variableB-- * 42;

Indentation​

Il doit y avoir une indentation à la suite des accolades ouvrantes, des modificateurs d'accès, des if, des else, des while, des for, et des case :

public class Classe {
public void methode(long valeurEntiere) {
switch (valeurEntiere) {
default:
for (short i = 0; i < 666; i++)
if (valeurEntiere < 42)
valeurEntiere++;
else
valeurEntiere--;
break;
}
}
}

L'indentation doit être faite avec des tabulations et non des espaces.

Élégance​

Le code doit être élégant en étant concis et en évitant les pléonasmes et les redondances.

Pléonasmes​

Une proposition est toujours booléenne :

// if (estValide == true)
if (estValide) {

Redondances​

Les mêmes instructions en début et en fin de if et de else doivent être sorties de ces blocs de code :

/*
if (estValide) {
instructionA();
instructionB();
instructionD();
}
else {
instructionA();
instructionC();
instructionD();
}
*/
instructionA();
if (estValide)
instructionB();
else
instructionC();
instructionD();

Concision​

Affectation d'une valeur booléenne par une proposition plutôt que dans une structure conditionnelle :

/*
if (estValide)
enMarche = true;
else
enMarche = false;
*/
enMarche = estValide;

Sans bloc de code vide :

/*
if (estValide) {
}
else
instruction();
*/
if (!estValide)
instruction();

L'exécution d'une fonction se termine immédiatement après la rencontre d'une instruction de retour :

int fonction() {
if (estValide)
return 42;
// else
return -1;
}