[RUBY] J'ai lu le code lisible, alors prends note

Depuis que j'ai commencé à travailler en tant qu'ingénieur inexpérimenté, j'ai lu le code lisible, donc ce mémo.

[* Code lisible * Lien d'achat Amazon](https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83 % AB% E3% 82% B3% E3% 83% BC% E3% 83% 89-% E2% 80% 95% E3% 82% 88% E3% 82% 8A% E8% 89% AF% E3% 81% 84% E3% 82% B3% E3% 83% BC% E3% 83% 89% E3% 82% 92% E6% 9B% B8% E3% 81% 8F% E3% 81% 9F% E3% 82% 81% E3% 81% AE% E3% 82% B7% E3% 83% B3% E3% 83% 97% E3% 83% AB% E3% 81% A7% E5% AE% 9F% E8% B7% B5% E7% 9A% 84% E3% 81% AA% E3% 83% 86% E3% 82% FA% E3% 83% 8B% E3% 83% 83% E3% 82% AF-Théorie-pratique-Boswell / dp / 4873115655 / ref = sr_1_1? adgrpid = 52747835709 & dchild = 1 & gclid = CjwKCAjw2Jb7BRBHEiwAXTR4jcm6iePgNgKHDmEvEtkvsB5IJ_skZ0aSoztpmqccbdEWkPh9VInvSRoC2DQQAvD_BwE & hvadid = 338561722060 & hvdev = c & hvlocphy = 1009309 & hvnetw = g & hvqmt = e & hvrand = 10166295044081564502 & hvtargid = kwd-334307148361 & hydadcr = 16038_11170849 & jp-ad-ap = 0 & keywords =% E3% 83% AA% E3% 83% BC% E3 % 83% 80% E3% 83% 96% E3% 83% AB% E3% 82% B3% E3% 83% BC% E3% 83% 89 & qid = 1600565375 & sr = 8-1 & tag = googhydr-22)

Ce n'est pas une note approximative, mais une petite note détaillée!

Chapitre 1 Code facile à comprendre

Point

Le code doit être facile à comprendre.
Le code doit être écrit de manière à ce que les autres puissent le comprendre dans les plus brefs délais.
Il est important d'avoir un code facile à comprendre après 6 mois!
Il est préférable de garder le code court, mais il est important de raccourcir le temps de compréhension.

Ce code est-il facile à comprendre?

Il est important de prendre du recul et de se poser la question!

Chapitre 2 Informations d'emballage dans le nom

Point

Pack d'informations dans le nom

Essayez de lire les informations simplement en regardant le nom

・ Choisissez un mot clair → Évitez les mots vides. «Obtenir» n'est pas un mot très clair. Je ne sais pas où trouver?

Par exemple, au lieu de get, utilisez fetch / download selon la situation.

Évitez les noms génériques

→ Évitez les noms vides tels que tmp et foo. Donnez-lui un nom qui représente un objectif ou une valeur spécifique. Valeur de retour retval × sum_squares○

Donc, lorsque vous utilisez un nom générique tel que tmp / it / retval, soyez prêt pour une bonne raison! Il est absurde de l'utiliser uniquement par négligence! "Nommer le pouvoir"!

Utilisez des noms concrets plutôt que des noms abstraits

→ Utilisez un nom plus approprié

Ajouter des informations à l'aide de suffixes

→ S'il s'agit d'informations importantes que vous devez absolument renseigner, vous pouvez les ajouter dans "Nom de la variable". L'unité de valeur est plus claire que delay → delay_secs. La même chose est vraie en termes de sécurité. mot de passe → mot de passe en clair (le mot de passe est du texte brut, il doit donc être chiffré avant le traitement)

Ajoutez des attributs pour lesquels vous devez comprendre la signification des variables.

Déterminez la longueur du nom

→ C'est tout simplement difficile à retenir, cela occupe l'écran et la quantité de code augmente. Si la portée est petite, vous pouvez utiliser un nom court. Si la portée de l'identifiant est grande, le nom doit contenir suffisamment d'informations pour le clarifier. Il est facile de l'omettre, mais les abréviations spécifiques au projet ne sont pas acceptables. Je ne comprends pas les nouveaux membres.

Communiquer les informations sous forme de nom

→ Vous pouvez également insérer des informations dans le nom en utilisant des traits de soulignement, des tirets et des lettres majuscules. L'équipe décide des règles à utiliser. La cohérence est importante.

Par exemple, les variables des membres de la classe sont soulignées pour les distinguer des variables locales.

Chapitre 3 Des noms qui ne sont pas mal compris

Demandez-vous: "Le nom n'est-il pas confondu avec autre chose?" Rechercher activement les malentendus.

Utilisez min et max pour inclure des limites.

Utilisez le premier et le dernier pour spécifier la plage.

Utilisez begin et end pour les plages inclusives / exclusives.

Clarifiez la signification de true et false lors du choix des noms pour les variables booléennes et les fonctions qui renvoient des valeurs booléennes. Exemple dangereux bool read_password = true; Il y a deux interprétations ・ Le mot de passe doit être lu à partir de maintenant ・ Le mot de passe a déjà été lu.

Ici, il est préférable d'utiliser need_password au lieu de read.

Résumé

Le premier nom est que la personne qui lit le code peut comprendre correctement vos intentions. Avant de décider d'un nom, assurez-vous que le nom n'est pas mal compris en pensant aux opinions dissidentes. Faites également attention aux attentes de l'utilisateur pour le mot. Exemple: Get () et size () devraient avoir des méthodes légères.

Chapitre 4 Beauté

Un bon code doit être «convivial».

Trois principes • Utilisez une mise en page cohérente avec les modèles auxquels le lecteur est habitué. -Faire ressembler les codes similaires. -Faites des codes connexes en blocs.

De toute évidence, un beau code est plus facile à utiliser. Si vous pouvez le scanner rapidement, vous pouvez créer un code facile à lire pour tout le monde.

Un bon code peut améliorer non seulement la surface mais aussi la structure du code.

Gardez les lignes verticales droites

L'alignement des colonnes peut faciliter la lecture du code. Cela facilitera la recherche de fautes de frappe.

Regrouper les déclarations en blocs

→ Afin d'avoir un aperçu rapide du code, vous pouvez le diviser en groupes et créer des "unités". Code facile à comprendre.

Cependant, il est important de noter qu'un style cohérent est plus important qu'un style «correct». Même si vous l'écrivez correctement et facilement, il sera difficile de le voir et de le lire si vous l'écrivez dans un style décousu dans son ensemble.

Résumé

Vous pouvez lire le code rapidement et facilement en "façonnant" le code d'une manière cohérente et significative.

・ Si vous faites la même chose avec plusieurs blocs de code, faites de la silhouette la même personne ・ L'alignement des "colonnes" du code facilite l'obtention d'une vue d'ensemble. ・ Ce qui était aligné comme A / B / C à un endroit ne devrait pas être aligné comme B / C / A à un autre endroit. Choisissez une commande significative et gardez toujours cette commande -Utilisez des lignes vides pour diviser de grands blocs en "paragraphes" logiques.

Chapitre 5 Sachez quoi commenter

Commentaires précieux et non valorisés
N'écrivez pas d'informations qui ressortent immédiatement du code.
N'écrivez pas de commentaires pour les commentaires.

Les noms terribles changent de nom sans commentaire → Les commentaires ne sont pas utilisés pour compenser des noms terribles. Si tel est le cas, remplacez-le par un nom plus clair.

Alors, que dois-je écrire comme commentaire? → Les bons commentaires sont pour "enregistrer vos pensées". Vous devez écrire des "pensées importantes" lors de l'écriture de code

Vous pouvez expliquer pourquoi le code est sale. Un commentaire qui encourage quelqu'un à y remédier.

Commentons les failles du code.

→ N'hésitez pas à écrire dans les commentaires ce que vous souhaitez faire du code. → Peut informer la qualité du code et indiquer le sens de l'amélioration.

Ajoutez un commentaire à la constante.

→ Lors de la définition d'une constante, que signifie cette constante? Il existe souvent un contexte expliquant pourquoi ils ont cette «valeur». → Il est important de noter dans les commentaires ce que vous pensiez dans votre esprit lorsque vous avez décidé du nom de la constante.

Pensez comme un lieu où les lecteurs peuvent se tenir debout
Imaginez qu'on vous demande.

Ajoutez un commentaire ici pour clarifier la réponse.

Annoncez un piège qui semble créer une dépendance.

→ Prévoyez à l'avance les problèmes auxquels vous serez confronté lors de l'utilisation du code et annoncez-les dans les commentaires.

Commentaires de présentation

Les nouveaux membres de l'équipe doivent comprendre le code. Comment les classes fonctionnent-elles ensemble? Tel Ceci est un commentaire à écrire dans votre code.

Un document court et approprié convient parfaitement. Mieux que rien.

Commentaire de synthèse

Les commentaires qui résument bien le code de bas niveau sont également importants.

Excellent code> Code terrible + excellent commentaire

Écrivez tout ce qui vous aide à comprendre le code!

Surmontez le bloc des écrivains

Blocage de l'écrivain = je ne peux pas écrire parce que je suis coincé

La seule façon de surmonter cela est de commencer à écrire. Écrivez ce que vous pensez et laissez-le en commentaire. 3 étapes pour rédiger un commentaire

  1. Notez quand même les commentaires dans votre tête.
  2. Lisez les commentaires et découvrez ce qui doit être amélioré.
  3. Améliorez.

Résumé

Le but du commentaire est d'aider le lecteur à comprendre l'intention du code.

Choses que vous ne devriez pas commenter

・ Que peut-on extraire du code ・ "Commentaire auxiliaire" pour compléter un code terrible → Modifier le code au lieu d'écrire un commentaire

Choses à commenter

Mes pensées à enregistrer · Écrivez pourquoi le code ressemble à ceci au lieu de l'inverse -Indiquer les défauts de code en utilisant des notations telles que TODO:, XXX: ・ Contexte lié aux valeurs constantes

Pensez du point de vue du lecteur ・ Ajoutez un commentaire en prévision de ce que la personne qui lit le code pense "Quoi?" ・ Documentez un comportement qui surprendra le lecteur moyen -Ecrire un commentaire "grande image" sur le fichier ou la classe -Commentez le bloc de code pour le résumer afin que le lecteur ne soit pas obsédé par les détails.

Chapitre 6 Les commentaires sont précis et concis

Comment puis-je l'écrire avec précision et concision? Les commentaires doivent avoir un rapport information / zone élevé.

Gardez les commentaires concis

Dois-je expliquer en utilisant trois lignes? → Si vous pouvez expliquer en une seule ligne, utilisez une seule ligne.

Évitez les synonymes ambigus

Je ne sais pas ce que «ça» ou «ça» signifie. Par exemple //データをキャッシュに入れる。ただし先にそのサイズをチェックする。 Je ne sais pas ce que «cela» signifie dans ce cas. C'est déroutant, donc c'est plus facile à comprendre si vous mettez la nomenclature dans les synonymes.

//データをキャッシュに入れる。ただし先にデータサイズをチェックする。

Polonais phrases nettes

Les commentaires exacts et la concision sont souvent compatibles.

Exemple

//これまでにクロールしたURLかどうかによって優先度を変える ↓ //これまでにクロールしていないURLの優先度を高くする

Le fond est simple, court et direct.

Écrivez l'intention du code

Commentaires qui écrivent simplement le comportement du code tel qu'il est ✖︎

Écrivez dans les commentaires ce que vous pensiez en écrivant le code. Cela permet de remarquer facilement que le code et les commentaires sont incohérents (ce qu'on appelle des bogues). Les commentaires jouent le rôle d'une inspection redondante.

Résumé

Rédigez un commentaire contenant autant d'informations que possible dans une petite zone

・ Évitez les synonymes tels que «ça» et «ceci» qui peuvent faire référence à plusieurs choses ・ Expliquez le fonctionnement de la fonction aussi précisément que possible. ・ Sélectionnez avec soin les exemples d'entrée / sortie réels à inclure dans les commentaires · L'intention du code est écrite à un niveau élevé et non à un niveau de détail -Utilisez les commentaires en ligne pour les arguments peu clairs. ・ Gardez les commentaires concis avec des mots et des expressions qui ont de nombreuses significations.

Chapitre 7 Faciliter la lecture du flux de contrôle

Rendre le flux de contrôle du code plus facile à lire

Rendre le flux de contrôle tel que les conditions et les boucles aussi "naturels" que possible. Écrivez pour que le lecteur du code ne s'arrête pas ou ne relise pas!

Ordre des arguments de l'expression conditionnelle

if (length >= 10)

Ou

if (10 =< length)

Évidemment, le premier est plus facile à lire.

Il existe une ligne directrice pour cela.

Côté gauche → Formule «cible d'enquête». Changement. Côté droit → Formule "Cible de comparaison". Cela ne change pas grand-chose.

C'est la même chose que l'utilisation de l'anglais.

Ordre des blocs if / else

Il y a supériorité et infériorité dans l'ordre

・ Utilisez un système affirmatif plutôt qu'une forme de condition négative. Par exemple, utilisez if (debug) au lieu de if (! Debug). ・ Écrivez d'abord des conditions simples. Facile à voir car if et else sont affichés sur le même écran. ・ Écrivez les conditions qui attirent l'attention ou se démarquent en premier

Selon la situation, il peut y avoir des conflits, auquel cas c'est à votre discrétion.

Opérateur triangulaire

Il a l'avantage d'être organisé en une seule ligne, mais au contraire, il est difficile à lire et à parcourir avec un débogueur.

Raccourcissez le temps nécessaire aux autres pour comprendre plutôt que de raccourcir le nombre de lignes

Utilisez essentiellement des instructions if / else! N'utilisez l'opérateur ternaire que lorsqu'il simplifie!
Revenir rapidement de la fonction

Certaines personnes pensent que vous ne devriez pas utiliser plusieurs instructions return dans une fonction, mais c'est faux. Il est bon de revenir rapidement de la fonction.

Rendre le nid peu profond

Le code imbriqué est difficile à comprendre. Regardez le code à jour lorsque vous apportez des modifications. Prenez du recul et regardez le tout.

Pouvez-vous suivre le déroulement de l'exécution?

L'utilisation de composants rend difficile le suivi du code. Thread → Je ne sais pas quel code sera exécuté quand. Gestionnaire de signal / d'interruption → Un autre code peut être exécuté. Exception → Divers appels de fonction sont sur le point de se terminer

L'utilisation de ces composants peut rendre votre code plus facile à lire et moins redondant, en revanche. Si vous ne l'utilisez pas correctement, vous perdrez la trace du code.

Chapitre 8 Diviser une énorme formule

Divisez l'énorme formule en morceaux faciles à avaler

Attention aux codes "intelligents". Plus tard, cela devient déroutant lorsque d'autres lisent le code.

Il est difficile de comprendre une formule énorme à la fois. Le moyen le plus simple de le faire est d'introduire des "variables explicatives" Les variables explicatives qui contiennent des valeurs d'expression élevées présentent trois avantages ・ Une énorme formule peut être divisée · Vous pouvez documenter votre code en expliquant l'expression avec un nom concis ・ Il devient plus facile pour le lecteur de reconnaître le «concept» principal du code.

Une autre option consiste à utiliser la loi de De Morgan pour manipuler la logique.

Si vous voyez une logique compliquée, divisez-la de manière agressive!

Chapitre 9 Variables et lisibilité

Supprimer la variable

Le code supprime les variables qui ne sont pas lisibles. → Le code sera concis et facile à comprendre.

Réduisez la portée des variables.

Il est correct d'éviter les variables globales. → Il est difficile de savoir où et comment il est utilisé. C'est une bonne idée de "réduire la portée" de toutes les variables, pas seulement des variables globales.

Réduisez le nombre de lignes de code qui peuvent voir la variable autant que possible.

Il est recommandé de limiter autant que possible l'accès pour réduire le code qui rend les variables visibles. → Pourquoi? Parce que vous pouvez réduire les variables auxquelles vous devez penser à la fois

Ecrire les variables une seule fois

→ Les variables qui "ne changent pas de façon permanente" sont faciles à gérer.

Plus vous manipulez de variables d'endroits, plus il est difficile de déterminer la valeur actuelle.

Résumé

Les variables de programme se développent rapidement et ne peuvent plus être suivies Le code est plus facile à lire si vous réduisez les variables et le rendez aussi léger que possible

・ Supprimer les variables dérangeantes -Rendre la portée de la variable aussi petite que possible → Déplacer vers une position qui ne peut être vue qu'à partir de quelques lignes de code de la variable. -Utiliser une variable qui n'est écrite qu'une seule fois → Si vous définissez une valeur pour la variable une seule fois (ou const,), le code sera plus facile à comprendre.

Chapitre 10 Extraction de sous-problèmes non liés

L'ingénierie est la division de grands problèmes en plus petits et la construction de solutions pour chacun.

Ce chapitre consiste à rechercher et à extraire activement des sous-problèmes non liés.

  1. Examinez les fonctions et les blocs de code et demandez-vous: "Quels sont les objectifs de haut niveau de ce code?"
  2. Demandez à chaque ligne de code: "L'objectif de haut niveau a-t-il un effet direct? Résout-il un sous-problème sans rapport?"
  3. S'il y a une quantité considérable de code qui résout des sous-problèmes non pertinents, extrayez-les dans une autre fonction.

Recommended Posts

J'ai lu le code lisible, alors prends note
J'ai lu le "Guide pratique orienté objet", donc un mémorandum
J'ai trébuché lorsque j'ai essayé d'utiliser neo4j dans l'environnement jenv, alors prenez note
J'ai réussi le test Java niveau 2, je vais donc laisser une note
[JAVA] Project Euler, je suis resté coincé au Q8, alors prenez note
J'étais un peu accro à la comparaison S3 Checksum, alors prenez note.
Remarques sur la portée
J'ai lu le livre de démarrage de Kotlin
J'ai essayé JAX-RS et pris note de la procédure
J'ai été inspiré par l'article destiné aux nouveaux arrivants, alors prenez-en note pour ne pas oublier votre intention initiale
Je veux créer un bouton avec un saut de ligne avec link_to [Note]
J'ai lu la source de ArrayList que j'ai lu
J'ai lu la source d'Integer
J'ai lu la source de Long
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
J'ai lu la source de Short
J'ai lu la source de Byte
J'ai lu la source de String
[Java débutant] J'ai une compréhension un peu plus approfondie de "Il est temps d'utiliser le nouveau", alors prenez note
Notez les arguments de mot-clé Ruby
Une note sur la classe Utils libGDX
Consultez les notes de la classe java.util.Optional
Une note de révision pour la classe java.util.Objects
Consulter les notes du package java.time.temporal
Pourquoi le code était-il pénible à lire?
Une note que j'ai renoncé à essayer de créer une annotation personnalisée pour Lombok
03. J'ai envoyé une demande de Spring Boot à l'API de recherche de code postal
[Petite histoire] J'ai essayé de rendre java ArrayList un peu plus pratique
J'ai recherché un framework léger qui répondrait au soudain "faites-le vite"
Mémorandum pour nettoyer le code Ruby
Faire une marge à gauche du TextField
Je l'ai fait en Java pour toujours rendre (a == 1 && a == 2 && a == 3) vrai
Une note lorsque la commande heroku devient indisponible
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
Code utilisé pour connecter Rails 3 à PostgreSQL 10
[API] J'ai essayé d'utiliser l'API de recherche par code postal
J'ai créé Code Pipeline avec AWS CDK.
Créer un extrait pour Thymeleaf dans VS Code
Un mémo sur le flux de Rails et Vue
J'ai écrit un code de test (Junit & mockit) pour le code qui appelle l'API AWS (Java)
Je déteste ce genre de code! Une collection d'anti-motifs réellement vus sur le terrain
7 choses que je veux que tu gardes pour que ça ne devienne pas un putain de code
clone de kintone? J'étais assez accro au lancement de l'extension OSS WebDB avec Lightsail + Docker, alors prenez-en note.