Category: code_mise_en_page

  • 🤖Bases de la Programmation : Mise en page du code

    La mise en page de votre code doit suivre certaines régles :

    Le nesting

    quand un code est contenu dans des balises {} il faut ajouter une tabulation à toute ses lignes. Plus le code est “profond” c’est à dire utilisé dans des balises qui sont elles meme dans des balises {{}} plus on ajoute de tab

    Exemple d’une mauvaise mise en page :

    function substract_to_zero(_number_A,_number_B){
    const substraction = _number_A - _number_B
    if (const < 0){
    return 0
    }
    return substraction
    }

    Tout est aligné et il est difficile de déterminer où s’arrêtent et commencent les balises

    function substract_to_zero(_number_A,_number_B){
      const substraction = _number_A - _number_B
      if (const < 0){
        return 0
      }
      return substraction
    }

    Si on applique la règle des tab alors on distingue beaucoup mieux les ensembles et sous ensembles du code.

    Il est également conseillé de construire la logique de son code de manière à limiter les sous ensembles

    Evitez de :

    • Déclarer des fonctions dans des fonctions dans des fonctions
    • Imbriquer beaucoup de if(if(if()))

    Essayons de diminuer le “nesting” de cette fonction qui filtre des nodes selon 3 conditions :

    // on cherche un read avec le mots clef '_B' et dont l'attribu "POSITION.X" est suppérieur à 20
    
    const snode= selection.selectedNode(0)
    
    function is_what_we_want(_node){
      if(node.type(_node)=="READ"){
          // de type "READ"
          if(node.getName(_node).indexOf("_B")!=-1){
            // a le _B dans son nom
            if(node.getTextAttr(_node,"POSITION.X",0)>20){
              // c'est bien ce qu'on cherche ! 
              return true
            }
          }
      }
      
      // toute les conditons n'ont pas été remplies
      return false
    }
    
    
    MessageBox.information(is_what_we_want(snode))
    

    Ce code a un peu une sorte de scoliose non ?

    Ce genre de code devient de plus en plus dure à lire à force de rajouter des conditions

    Deux solution au “nesting”:

    1 utiliser une syntaxe booléenne : on concatène nos conditions en une seul syntaxe booléenne , c’est concis mais un peu dur à lire

    // on cherche un read avec le mots clef '_B' et dont l'attribu "POSITION.X" est suppérieur à 20
    
    const snode= selection.selectedNode(0)
    
    function is_what_we_want(_node){
    
      // on stock les conditions dans des variables 
      var is_read = node.type(_node)=="READ"
      var as_kw = node.getName(_node).indexOf("_B")!=-1
      var pos_20 = node.getTextAttr(_node,"POSITION.X",0)>20
      
      // on test d'un coup si elles sont toutes vrais avec l'opérateur &&
      return is_read && as_kw && pos_20
      
    }
    
    
    MessageBox.information(is_what_we_want(snode))

    2 inverser les conditions : au lieu de vérifier si une condition est “true” on vérifie si l’inverse de la condition est “true”. De cette manière on return très tôt dans la fonction. Si l’inverse est true pas besoin d’aller plus loin…

    // on cherche un read avec le mots clef '_B' et dont l'attribu "POSITION.X" est suppérieur à 20
    
    const snode= selection.selectedNode(0)
    
    function is_what_we_want(_node){
    
      if(node.type(_node)!="READ"){
        // n'est PAS de type read !
        return false
      }
      
      if(node.getName(_node).indexOf("_B")==-1){
        // n'a PAS '_B' dans son nom
        return false
      }
    
      if(node.getTextAttr(_node,"POSITION.X",0)<=20){
        // POSITION.X est INFERIEUR ou égale à 20 
        return false
      }
      // tout les obstacles sont franchi ! ce node est bien celui qu'on cherche
      return true
    }
      
    
    MessageBox.information(is_what_we_want(snode))