Aller au contenu principal

Java

Normes départementales du langage Java.

Fichiers

Les fichiers du langage Java doivent avoir l'extension .java.

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.

Importations

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

import java.util.Collection;
// ^^^^^^^^^^^^^^^^^^^^^ Ne devrait pas être présent puisqu'inutilisé.

System.out.println("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 :

static final 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 :

boolean 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.

Classes

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

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;
}