[Ruby] Clé de base pour être fort dans la refactorisation

C'est une histoire embarrassante, mais jusqu'à récemment, quand on m'a dit «d'écrire du beau code», j'étais conditionnée en pensant par réflexe: «J'aimerais qu'il n'y ait pas d'erreurs». Cependant, en comprenant le terme refactoring et en abordant certaines notations et méthodes, j'ai commencé à penser que le beau code était beau (un peu d'exagération: sweat_smile :), donc je vais vous donner un exemple de refactoring basique. Je voudrais vous présenter.

Entrée et sortie à régler cette fois

Sortez la somme des tableaux consécutifs de 1 à 5. (La réponse est 15) Je voudrais contester comment décrire cela proprement et en tirer.

Partie 1: La poussée

p 1 + 2 + 3 + 4 + 5

… Un programme ou une calculatrice? La description la plus simple du niveau. Bien entendu, il n'est pas possible de traiter le cas du calcul du total des nombres de 1 à 100. Je veux le rendre extensible.

Partie 2: Utilisez des tableaux et chaque instruction

numbers = [1,2,3,4,5]
sum = 0 #Attribuer 0 à la somme des variables
 numbers.each do |n|
   sum += n #Ajoutez à plusieurs reprises la variable de bloc n à la somme des variables
 end
p sum

Il peut s'agir du premier code à apprendre dans chaque instruction. Même en programmation, j'ai le sentiment que "c'est gênant d'écrire les éléments d'un tableau sous la forme 1,2,3 ..." et "je veux rendre chaque instruction compacte sur plusieurs lignes".

Partie 3: Simple avec un objet range et une notation de bloc {}

numbers = (1..5) #Création d'un objet de plage. 1~Désigne un tableau de valeurs consécutives jusqu'à 5.
sum = 0
  numbers.each {|n| sum += n } #{}Mettez-le sur une ligne en utilisant la notation par blocs de.
p sum

__ (première valeur .. dernière valeur) __ peut représenter une plage de valeurs.

Partie 4: Utilisez la méthode inject au lieu de chaque

numbers = (1..5)
 p sum = numbers.inject(0) {|n, s| n + s}
  #La méthode d'injection fonctionne selon le flux suivant.
  #Le premier argument de la méthode entre dans le premier argument du bloc.
  #Le deuxième argument du bloc contient chaque élément du tableau dans l'ordre.
  #La valeur de retour du bloc est héritée par le premier argument du bloc.
  #Lorsque le processus itératif est terminé, la valeur de retour du bloc devient la valeur de retour de la méthode inject.

En utilisant la méthode inject, nous avons pu gérer plusieurs arguments et les ajuster sur deux lignes.

À l'avenir, je continuerai à lire le "Code lisible" que j'ai entendu comme un bon livre, et je ferai de mon mieux pour écrire un beau code qui peut être montré avec fierté. Si vous avez une opinion telle que "C'est plus concis d'écrire comme ça", faites-le nous savoir!

Recommended Posts

[Ruby] Clé de base pour être fort dans la refactorisation
[Rails] Comment écrire user_id (clé externe) dans un paramètre fort
Comment itérer indéfiniment en Ruby
Essayez d'implémenter Yuma dans Ruby
Comment installer Bootstrap dans Ruby
Soyez prudent lorsque vous omettez le retour dans Ruby
CORBA semble avoir été supprimé dans Java SE 11. .. ..
Il ne semble pas y avoir d'autre-si en java
Essayez d'obtenir la clé API de redmine avec ruby
Je veux être finalement même à kotlin
Résumé du site qui sera utile dans Minecraft Modding 1.12.2
Comment créer la blockchain la plus simple de Ruby
Comment implémenter la pagination dans GraphQL (pour ruby)
Je veux obtenir la valeur en Ruby
Introduction à Ruby 2
Termes de base de Ruby
Lourd en rubis! ??
Refactoring dans JUnit
[Ruby] Comment utiliser la sortie standard dans le branchement conditionnel
[Ruby on Rails] Comment écrire enum en japonais
Interface fonctionnelle de base compréhensible en 3 minutes
Règles de base à connaître pour écrire du code facile à lire
Conversion du fichier TSV en fichier CSV (avec BOM) en Ruby
[Ruby On Rails] Comment réinitialiser DB dans Heroku
Comment lancer une autre commande dans un programme Ruby
[Ruby] Difficulté à refactoriser les opérateurs logiques (précision et lisibilité)
Comment gérer les fichiers TSV et les fichiers CSV dans Ruby
Être capable d'écrire Hamcrest Matcher dans le style lambda
Comment résoudre l'erreur SSL_connect dans le SDK PayPal Ruby