Pewarta Proxy

📋 Server Request & Proxy Logs

Loading active proxy settings...
Developed by Khairul Adha (adhexa.id)
Mengambil log server...

⚙ Pengaturan Proxy Target

5 mai 2023

Style de codage

Notre code doit ĂȘtre aussi propre et lisible que possible.

C’est en fait un art de la programmation – prendre une tñche complexe et la coder de maniùre correcte et lisible par l’homme. Un bon style de code aide grandement à cela.

Une chose Ă  aider est le bon style de code.

Syntaxe

Voici un aide-mémoire avec quelques rÚgles suggérées (plus de détails ci-dessous) :

Discutons maintenant des rÚgles et de leurs raisons en détail.

Il n’y a pas de rùgles “vous devez”

Rien n’est figĂ© ici. Ce sont des prĂ©fĂ©rences de style, pas des dogmes religieux.

Accolades

Dans la plupart des projets JavaScript, les accolades sont Ă©crites sur la mĂȘme ligne que le mot clĂ© correspondant, et non sur la nouvelle ligne, dans un style dit «égyptien». Il y a aussi un espace avant un crochet d’ouverture.

Comme ceci :

if (condition) {
  // fait ceci
  // ...et cela
  // ...et cela
}

Une construction sur une seule ligne, comme if (condition) doSomething(), est un cas important. Devrions-nous utiliser des accolades ?

Voici les variantes annotées pour que vous puissiez juger de leur lisibilité :

  1. 😠 Les dĂ©butants font parfois cela. C’est une mauvaise pratique ! Les accolades ne sont pas nĂ©cessaires :
    if (n < 0) {alert(`Power ${n} is not supported`);}
  2. 😠 Lorsque vous n’utilisez pas d’accolades, Ă©vitez de passer pas Ă  la ligne car il est facile de se tromper :
    if (n < 0)
      alert(`Power ${n} is not supported`);
  3. 😏 Ne pas utiliser d’accolade sur une seule ligne, est acceptable tant que cela reste court :
    if (n < 0) alert(`Power ${n} is not supported`);
  4. 😃 Voici une bonne maniùre de faire :
    if (n < 0) {
      alert(`Power ${n} is not supported`);
    }

Pour un code tres court, une ligne est autorisée, par exemple if (cond) return null. Mais la variante numéro 4 est généralement plus lisible.

Longueur de la ligne

Personne n’aime lire une longue ligne horizontale de code. La meilleure pratique est de la scinder.

Par exemple :

// les guillemets backtick ` permettent de scinder la chaĂźne de caractĂšres en plusieurs lignes
let str = `
  ECMA International's TC39 is a group of JavaScript developers,
  implementers, academics, and more, collaborating with the community
  to maintain and evolve the definition of JavaScript.
`;

Et pour les déclarations if :

if (
  id === 123 &&
  moonPhase === 'Waning Gibbous' &&
  zodiacSign === 'Libra'
) {
  letTheSorceryBegin();
}

La longueur de ligne maximale est convenue au niveau de l’équipe. C’est gĂ©nĂ©ralement 80 ou 120 caractĂšres.

Indentations

Il existe deux types d’indentations :

  • Un retrait horizontal : 2 ou 4 espaces.

    Une indentation horizontale est faite en utilisant 2 ou 4 espaces ou le symbole horizontal de tabulation (touche Tab). Lequel choisir est une vieille guerre sainte. Les espaces sont plus communs de nos jours.

    Un des avantages des espaces sur les tabulations est qu’ils permettent des configurations de retrait plus flexibles que le symbole tabulation.

    Par exemple, nous pouvons aligner les arguments avec la parenthùse d’ouverture, comme ceci :

    show(parameters,
         aligned, // 5 espaces Ă  gauche
         one,
         after,
         another
      ) {
      // ...
    }
  • Un retrait vertical: lignes vides pour fractionner le code en blocs logiques.

    MĂȘme une seule fonction peut souvent ĂȘtre divisĂ©e en blocs logiques. Dans l’exemple ci-dessous, l’initialisation des variables, la boucle principale et le retour du rĂ©sultat sont fractionnĂ©s verticalement :

    function pow(x, n) {
      let result = 1;
      //              <--
      for (let i = 0; i < n; i++) {
        result *= x;
      }
      //              <--
      return result;
    }

    InsĂ©rez une nouvelle ligne oĂč cela aide Ă  rendre le code plus lisible. Il ne devrait pas y avoir plus de neuf lignes de code sans indentation verticale.

Un point-virgule

Un point-virgule doit ĂȘtre prĂ©sent aprĂšs chaque dĂ©claration. MĂȘme si cela pourrait Ă©ventuellement ĂȘtre ignorĂ©.

Il y a des langages oĂč le point-virgule est vraiment optionnel. Il est donc rarement utilisĂ©. Mais dans JavaScript, il y a peu de cas oĂč un saut de ligne n’est parfois pas interprĂ©tĂ© comme un point-virgule. Cela laisse place Ă  des erreurs de programmation. Plus d’informations Ă  ce sujet dans le chapitre Structure du code.

Si vous ĂȘtes un programmeur JavaScript expĂ©rimentĂ©, vous pouvez choisir un style de code sans point-virgule comme StandardJS. Autrement, il est prĂ©fĂ©rable d’utiliser des points-virgules pour Ă©viter les piĂšges possibles. La majoritĂ© des dĂ©veloppeurs mettent des points-virgules.

Niveaux d’imbrications

Il ne devrait pas y avoir trop de niveaux d’imbrication.

Par exemple, dans une boucle, c’est parfois une bonne idĂ©e d’utiliser la directive “continue” pour Ă©viter une imbrication supplĂ©mentaire.

Par exemple, au lieu d’ajouter un if imbriquĂ© conditionnel comme ceci :

for (let i = 0; i < 10; i++) {
  if (cond) {
    ... // <- un autre niveau d'imbrication
  }
}

Nous pouvons écrire :

for (let i = 0; i < 10; i++) {
  if (!cond) continue;
  ...  // <- pas de niveau d'imbrication supplémentaire
}

Une chose similaire peut ĂȘtre faite avec if/else et return.

Par exemple, les deux constructions ci-dessous sont identiques.

Le premier :

function pow(x, n) {
  if (n < 0) {
    alert("Negative 'n' not supported");
  } else {
    let result = 1;

    for (let i = 0; i < n; i++) {
      result *= x;
    }

    return result;
  }
}

Et ceci :

function pow(x, n) {
  if (n < 0) {
    alert("Negative 'n' not supported");
    return;
  }

  let result = 1;

  for (let i = 0; i < n; i++) {
    result *= x;
  }

  return result;
}

Le second est plus lisible, parce que le “cas marginal” de n < 0 est traitĂ© tĂŽt. Une fois la vĂ©rification effectuĂ©e, nous pouvons passer au flux de code “principal” sans avoir besoin d’imbrication supplĂ©mentaire.

Placement des fonctions

Si vous Ă©crivez plusieurs fonctions “helper” (auxiliaires) et le code pour les utiliser, il existe trois façons de les placer.

  1. Déclarez les fonctions au-dessus du code qui les utilise :

    // fonctions declarations
    function createElement() {
      ...
    }
    
    function setHandler(elem) {
      ...
    }
    
    function walkAround() {
      ...
    }
    
    // le code qui les utilise
    let elem = createElement();
    setHandler(elem);
    walkAround();
  2. Le code d’abord, puis les fonctions

    // le code qui utilise les fonctions
    let elem = createElement();
    setHandler(elem);
    walkAround();
    
    // --- fonctions helper ---
    
    function createElement() {
      ...
    }
    
    function setHandler(elem) {
      ...
    }
    
    function walkAround() {
      ...
    }
  3. Mixte : une fonction est dĂ©crite lĂ  oĂč elle a Ă©tĂ© utilisĂ©e pour la premiĂšre fois.

La plupart du temps, la deuxiÚme variante est préférée.

C’est parce qu’en lisant du code, nous voulons d’abord savoir ce qu’il fait. Si le code commence en premier, il devient clair dĂšs le dĂ©but. Ensuite, nous n’aurons peut-ĂȘtre pas besoin de lire les fonctions du tout, surtout si leur nom dĂ©crit ce qu’elles font rĂ©ellement.

Guides de style

Un guide de style contient des rĂšgles gĂ©nĂ©rales sur “comment Ă©crire” du code. Exemple : les quotes Ă  utiliser, le nombre d’espaces pour indenter, la longueur de ligne maximale, etc. Beaucoup de petites choses.

Lorsque tous les membres d’une Ă©quipe utilisent le mĂȘme guide de style, le code est uniforme. Peu importe qui l’a Ă©crit, c’est toujours le mĂȘme style.

Bien sĂ»r, une Ă©quipe peut toujours Ă©crire son propre guide de style, mais cela n’est gĂ©nĂ©ralement pas nĂ©cessaire. Il existe de nombreux guides existants Ă  choisir.

Par exemple :

Si vous ĂȘtes un dĂ©veloppeur novice, commencez par le cheatsheet au dĂ©but de ce chapitre. Ensuite, vous pouvez parcourir d’autres guides de style pour trouver plus d’idĂ©es et dĂ©cider lequel vous prĂ©fĂ©rez.

Linters automatisés

Les linters sont des outils permettant de vĂ©rifier automatiquement le style de votre code et de formuler des suggestions d’amĂ©lioration.

Ce qui est gĂ©nial avec eux, c’est que la vĂ©rification du style trouve Ă©galement des bugs, comme une faute de frappe dans une variable ou un nom de fonction. En raison de cette fonctionnalitĂ©, l’utilisation d’un linter est recommandĂ©e mĂȘme si vous ne souhaitez pas vous en tenir Ă  un “style de code” particulier.

Voici quelques linters bien connus :

  • JSLint – l’un des premiers linters.
  • JSHint – plus de paramĂštres que JSLint.
  • ESLint – probablement le plus rĂ©cent.

Tous peuvent faire le travail. L’auteur utilise ESLint.

La plupart des linters sont intĂ©grĂ©s aux Ă©diteurs: il suffit d’activer le plug-in dans l’éditeur et de configurer le style.

Par exemple, pour ESLint, vous devez procéder comme suit :

  1. Installer Node.js.
  2. Installer ESLint avec la commande npm install -g eslint (npm est un gestionnaire de paquets JavaScript).
  3. Créez un fichier de configuration nommé .eslintrc dans la racine de votre projet JavaScript (dans le dossier contenant tous vos fichiers).
  4. Installez / activez le plug-in pour votre Ă©diteur qui s’intĂšgre Ă  ESLint. La majoritĂ© des Ă©diteurs en ont un.

Voici un exemple de .eslintrc:

{
  "extends": "eslint:recommended",
  "env": {
    "browser": true,
    "node": true,
    "es6": true
  },
  "rules": {
    "no-console": 0,
    "indent": 2
  }
}

Ici, la directive "extends" indique que nous nous basons sur l’ensemble de paramĂštres “eslint:recommended”, puis nous spĂ©cifions les nĂŽtres.

Il est aussi possible de tĂ©lĂ©charger des ensembles de rĂšgles de style Ă  partir du Web et de les Ă©tendre. Voir http://eslint.org/docs/user-guide/getting-started pour plus de dĂ©tails sur l’installation.

De plus, certains IDE prennent en charge le linting nativement, ce qui peut Ă©galement ĂȘtre bien, mais pas aussi ajustables que ESLint.

Résumé

Toutes les rÚgles de syntaxe de ce chapitre et les guides de style visent à améliorer la lisibilité, elles sont donc toutes discutables.

Lorsque nous pensons Ă  Ă©crire du “meilleur” code, les questions que nous devrions nous poser sont les suivantes : “Qu’est-ce qui rend le code plus lisible et plus facile Ă  comprendre ?” et “Qu’est-ce qui peut nous aider Ă  Ă©viter les erreurs ?”. Telles sont les principales choses Ă  garder Ă  l’esprit lors du choix et du dĂ©bat sur les styles de code.

Lisez les guides de style pour connaßtre les derniÚres idées à ce sujet et suivez celles que vous trouvez les meilleures.

Exercices

importance: 4

Quel est le problĂšme avec le style de code ci-dessous ?

function pow(x,n)
{
  let result=1;
  for(let i=0;i<n;i++) {result*=x;}
  return result;
}

let x=prompt("x?",''), n=prompt("n?",'')
if (n<=0)
{
  alert(`Power ${n} is not supported, please enter an integer number greater than zero`);
}
else
{
  alert(pow(x,n))
}

Réparer le.

Vous pouvez noter ce qui suit :

function pow(x,n)  // <- pas d'espace entre les arguments
{  // <- accolade sur une ligne séparée
  let result=1;   // <- pas d'espaces des deux cÎtés de =
  for(let i=0;i<n;i++) {result*=x;}   // <- pas d'espaces
  // le contenu de {...} devrait ĂȘtre sur une nouvelle ligne
  return result;
}

let x=prompt("x?",''), n=prompt("n?",'') // <-- techniquement possible,
// mais mieux vaut en faire 2 lignes, il n'y a également pas d'espaces et de ;
if (n<=0)  // <- pas d'espaces Ă  l'intĂ©rieur (n <= 0), et devrait ĂȘtre une ligne supplĂ©mentaire au-dessus
{   // <- accolade sur une ligne séparée
  // ci-dessous - une longue ligne, peut ĂȘtre utile de la scinder en 2 lignes
  alert(`Power ${n} is not supported, please enter an integer number greater than zero`);
}
else // <- pourrait l'écrire sur une seule ligne comme "} else {"
{
  alert(pow(x,n))  // pas d'espaces et ; manquant
}

La variante réparée :

function pow(x, n) {
  let result = 1;

  for (let i = 0; i < n; i++) {
    result *= x;
  }

  return result;
}

let x = prompt("x?", "");
let n = prompt("n?", "");

if (n <= 0) {
  alert(`Power ${n} is not supported,
    please enter an integer number greater than zero`);
} else {
  alert( pow(x, n) );
}
Carte du tutoriel

Commentaires

lire ceci avant de commenter

  • Si vous avez des amĂ©liorations Ă  suggĂ©rer, merci de soumettre une issue GitHub ou une pull request au lieu de commenter.
  • Si vous ne comprenez pas quelque chose dans l'article, merci de prĂ©ciser.
  • Pour insĂ©rer quelques bouts de code, utilisez la balise <code>, pour plusieurs lignes – enveloppez-les avec la balise <pre>, pour plus de 10 lignes - utilisez une sandbox (plnkr, jsbin, codepen
)