Bad Coding Academy: nouvelles lignes, espaces et indentation

Bonjour, Habr! Je présente à votre attention la traduction de l'article "Académie de style code sombre: sauts de ligne, espacement et indentation" de l' auteurzhikin2207



image



Salut les gens! Laissez-moi continuer avec notre académie de mauvais code. Dans cet article, nous allons révéler une autre façon de ralentir la lecture de votre code. Les astuces suivantes peuvent vous aider à réduire votre compréhension de votre code et à augmenter les risques de bogues. Prêt? Commençons.



Les sauts de ligne, les espaces et l'indentation peuvent tuer.



Comment les gens lisent-ils des livres? De haut en bas, de gauche à droite (au moins la plupart). La même chose se produit lorsque les développeurs lisent le code. Une ligne de code doit contenir une pensée, par conséquent, chaque ligne ne doit contenir qu'une seule commande. Si vous voulez embarrasser d'autres développeurs, vous feriez mieux d'enfreindre ces consignes. Et laissez-moi vous montrer comment faire.



Exemple # 1



Regardez ce morceau de code. Une idée sur une ligne. Le code est si propre qu'il me rend malade.



return elements
    .Where(element => !element.Disabled)
    .OrderBy(element => element.UpdatedAt)
    .GroupBy(element => element.Type)
    .Select(@group => @group.First());


Nous pouvons combiner toutes les déclarations en une seule ligne, mais ce serait trop facile. Dans ce cas, le cerveau du développeur comprendra que quelque chose ne va pas ici, et il divisera les opérateurs de gauche à droite. Peasy facile!



Il est préférable de garder certaines déclarations sur la même ligne et d'autres à diviser. La meilleure option est lorsque le développeur peut même ne pas remarquer certains des opérateurs, ce qui conduira à des malentendus et finalement à une erreur. Une autre option est de simplement réduire lentement sa compréhension de ce code jusqu'à ce qu'il crie: "Qu'est-ce que c'est que ça!?"



return elements.Where(e => !e.Disabled)
    .OrderBy(e => e.UpdatedAt).GroupBy(e => e.Type)
    .Select(g => g.First());


Comment tu aimes ça? Vous pouvez ajouter une indentation afin que d'autres développeurs formateront votre code pendant des décennies s'ils doivent renommer la variable elements.



return elements.Where(e => !e.Disabled)
               .OrderBy(e => e.UpdatedAt).GroupBy(e => e.Type)
               .Select(g => g.First());


Envoyez-moi une carte postale si cette approche est révisée par votre équipe.



Astuce : laissez quelques déclarations sur une ligne et deux sur des lignes séparées.



Exemple # 2



Absolument la même idée ici. C'est le seul code que vous voyez beaucoup plus souvent.



var result = 
    (condition1 && condition2) || 
    condition3 || 
    (condition4 && condition5);


La procédure est la même. Séparez les lignes pour dérouter le plus possible le lecteur. Jouez un peu avec les nouvelles lignes pour obtenir le meilleur résultat.



var result = (condition1 && condition2) || condition3 || 
    (condition4 && condition5);


Et ajoutez une indentation pour que le code paraisse normal.



var result = (condition1 && condition2) || condition3 || 
             (condition4 && condition5);


N'oubliez pas que vous devez trouver un équilibre entre l'illisibilité de votre code et la crédibilité de votre style.



Astuce : jouez avec les sauts de ligne pour de meilleurs résultats.



Exemple # 3



Et cela?



if (isValid) 
{ 
    _unitOfWork.Save();
    return true; 
} 
else 
{ 
    return false; 
} 


Le même problème, mais d'un autre côté. Ici, la meilleure option serait de combiner les opérateurs en une seule ligne, bien sûr, en plaçant des accolades.



if (isValid) { _unitOfWork.Save(); return true; } else { return false; } 


Cette approche ne fonctionnera que si vous avez peu d'instructions dans les blocs alors et autrement. Sinon, votre code peut être rejeté lors de la révision du code.



Astuce : combinez de petites instructions if / for / foreach en une seule ligne.



Exemple # 4



80 caractères par ligne est la norme actuellement recommandée. Cela vous permet de garder la concentration du développeur lorsqu'il lit votre code. De plus, vous pouvez ouvrir deux documents en même temps sur le même écran lorsque cela est nécessaire, ce qui vous laisse de la place pour l'Explorateur de solutions.



bool IsProductValid(
    ComplexProduct complexProduct, 
    bool hasAllRequiredElements, 
    ValidationSettings validationSettings)
{
    // code
}


Le moyen le plus simple de ralentir la lecture de votre code est de forcer d'autres développeurs à faire défiler votre code horizontalement. Ignorez simplement la règle des 80 caractères.



bool IsProductValid(ComplexProduct complexProduct, bool hasAllRequiredElements, ValidationSettings validationSettings)
{
    // code
}


C'est très simple: oubliez ce qui s'est passé avant de commencer à faire défiler ou sautez la ligne sur laquelle vous avez commencé. Super truc.



Conseil : ignorez volontairement la règle des 80 caractères.



Exemple # 5 Une



ligne vide au bon endroit est un outil puissant pour regrouper votre code et le rendre plus rapide.



ValidateAndThrow(product);

product.UpdatedBy = _currentUser;
product.UpdatedAt = DateTime.UtcNow;
product.DisplayStatus = DisplayStatus.New;

_unitOfWork.Products.Add(product);
_unitOfWork.Save();

return product.Key;


Une ligne vide au mauvais endroit, associée aux autres conseils de cet article, peut vous aider à enregistrer votre travail. Quelle ligne vierge préférez-vous?



ValidateAndThrow(product);
product.UpdatedBy = _currentUser;
product.UpdatedAt = DateTime.UtcNow;

product.DisplayStatus = DisplayStatus.New;
_unitOfWork.Products.Add(product);

_unitOfWork.Save();
return product.Key;


Conseil : insérez des lignes vierges au hasard.



Exemple # 6



Lorsque vous vous engagez dans un référentiel, vous avez une petite opportunité de voir exactement ce que vous allez valider. NE FAITES PAS CELA! Ce n'est pas grave si vous ajoutez une ligne vierge supplémentaire comme ici.



private Product Get(string key) 
{
    // code
}

private void Save(Product product) 
{
    // code
}


Ou, encore mieux, ajoutez quelques espaces sur une ligne vierge (pour comprendre la différence, mettez en surbrillance la 5ème ligne).



private Product Get(string key) 
{
    // code
}
    
private void Save(Product product) 
{
    // code
}


Pourquoi en avez-vous besoin? Le code continue de fonctionner (mais ce n'est pas certain). Vous continuez à comprendre votre code, mais l'autre développeur comprendra moins votre code. Vous ne pouvez pas simplement ajouter quelques espaces supplémentaires aux méthodes courantes à la fois (les revues de code sont notre ennemi), mais l'utilisation de cette pratique créera un désordre après quelques semaines de développement actif.



Un autre avantage supplémentaire de l'utilisation d'espaces supplémentaires dans une chaîne est que lorsque d'autres développeurs engagent des fonctionnalités associées, leur IDE peut automatiquement corriger le formatage. Lors de la révision du code, ils verront mille lignes rouges et vertes. Si vous comprenez ce que je veux dire;)



Pour la même raison, vous pouvez configurer des onglets dans votre IDE si vous utilisez des espaces dans votre projet, et vice versa.



Astuce : ne regardez pas le code avant de vous engager.



Exemple # 7



Contournez les développeurs qui peuvent voir des espaces supplémentaires dans le code. Ils sont dangereux pour votre carrière.



product.Name = model.Name;
product.Price = model.Price;
product.Count =  model.Count;


Astuce : connaissez votre ennemi.



Il est difficile de rendre votre code non pris en charge. Lorsque vous accumulez de nombreux petits problèmes, ils se développent sans votre participation. Les jeunes développeurs écriront leur code en fonction de vos modèles. Un jour, lors d'une révision de code, vous entendez "Qu'est-ce que c'est?" de votre chef d'équipe, et ici vous pourrez utiliser le slogan: «Quoi? Nous faisons toujours cela », et montrez-lui mille endroits dans le code où il est écrit de la même manière.



S'amuser.



All Articles