[Ruby] Grundlegender Schlüssel, um beim Refactoring stark zu sein

Es ist eine peinliche Geschichte, aber bis vor kurzem, als mir gesagt wurde, ich solle "schönen Code schreiben", war ich reflexartig konditioniert und dachte: "Ich sollte keinen Fehler haben." Als ich jedoch das Wort Refactoring verstand und einige Notationen und Methoden berührte, begann ich zu denken, dass schöner Code schön ist (eine kleine Übertreibung: heat_smile :), daher werde ich Ihnen ein Beispiel für grundlegendes Refactoring geben. Ich möchte Sie vorstellen.

Ein- und Ausgang müssen diesmal eingestellt werden

Geben Sie die Summe aufeinanderfolgender Arrays von 1 bis 5 aus. (Die Antwort ist 15) Ich möchte herausfordern, wie man dies ordentlich beschreibt und ableitet.

Teil 1: Der Push

p 1 + 2 + 3 + 4 + 5

… Ein Programm oder ein Taschenrechner? Die einfachste Beschreibung des Levels. Natürlich ist es nicht möglich, die Summe der Zahlen von 1 bis 100 zu berechnen. Ich möchte es erweiterbar machen.

Teil 2: Verwenden Sie Arrays und jede Anweisung

numbers = [1,2,3,4,5]
sum = 0 #Weisen Sie der variablen Summe 0 zu
 numbers.each do |n|
   sum += n #Fügen Sie wiederholt die Blockvariable n zur Variablensumme hinzu
 end
p sum

Es kann der erste Code sein, der in jeder Anweisung gelernt wird. Selbst beim Programmieren habe ich das Gefühl, dass "es schwierig ist, die Elemente eines Arrays als 1,2,3 zu schreiben ..." und "ich möchte jede Anweisung über mehrere Zeilen kompakt machen".

Teil 3: Einfach mit Bereichsobjekt und {} Blocknotation

numbers = (1..5) #Erstellen eines Bereichsobjekts. 1~Bedeutet ein Array aufeinanderfolgender Werte bis zu 5.
sum = 0
  numbers.each {|n| sum += n } #{}Setzen Sie es in eine Zeile mit der Blocknotation von.
p sum

__ (erster Wert .. letzter Wert) __ kann einen Wertebereich darstellen.

Teil 4: Verwenden Sie stattdessen die Injektionsmethode

numbers = (1..5)
 p sum = numbers.inject(0) {|n, s| n + s}
  #Die Injektionsmethode arbeitet gemäß dem folgenden Ablauf.
  #Das erste Argument der Methode geht in das erste Argument des Blocks.
  #Das zweite Argument des Blocks enthält jedes Element des Arrays der Reihe nach.
  #Der Rückgabewert des Blocks wird vom ersten Argument des Blocks geerbt.
  #Wenn der iterative Prozess abgeschlossen ist, wird der Rückgabewert des Blocks zum Rückgabewert der Inject-Methode.

Mit der Inject-Methode konnten wir mehrere Argumente verarbeiten und in zwei Zeilen einfügen.

In Zukunft werde ich weiterhin den "lesbaren Code" lesen, den ich als gutes Buch gehört habe, und ich werde mein Bestes tun, um schönen Code zu schreiben, der mit Stolz gezeigt werden kann. Wenn Sie eine Meinung wie "Es ist prägnanter, so zu schreiben" haben, lassen Sie es uns bitte wissen!

Recommended Posts

[Ruby] Grundlegender Schlüssel, um beim Refactoring stark zu sein
[Rails] So schreiben Sie user_id (externer Schlüssel) in einen starken Parameter
Wie man in Ruby auf unbestimmte Zeit iteriert
Versuchen Sie, Yuma in Ruby zu implementieren
So installieren Sie Bootstrap in Ruby
Seien Sie vorsichtig, wenn Sie die Rückkehr in Ruby weglassen
CORBA scheint in Java SE 11 entfernt zu sein. .. ..
Es scheint kein anderes zu geben - wenn in Java
Versuchen Sie, den API-Schlüssel von Redmine mit Ruby zu erhalten
Ich möchte irgendwann sogar in Kotlin sein
Site-Zusammenfassung, die beim Minecraft-Modding 1.12.2 hilfreich sein wird
So erstellen Sie die einfachste Blockchain in Ruby
So implementieren Sie Paginierung in GraphQL (für Ruby)
Ich möchte den Wert in Ruby erhalten
Einführung in Ruby 2
Ruby Grundbegriffe
Schwer in Rubin! ??
Refactoring in JUnit
[Ruby] Verwendung der Standardausgabe bei der bedingten Verzweigung
[Ruby on Rails] Wie schreibe ich eine Enumeration auf Japanisch?
Grundlegende funktionale Schnittstelle, die in 3 Minuten verstanden werden kann
Grundregeln zum Schreiben von einfach zu lesendem Code
Konvertieren von TSV-Dateien in CSV-Dateien (mit Stückliste) in Ruby
[Ruby On Rails] So setzen Sie die Datenbank in Heroku zurück
So starten Sie einen anderen Befehl in einem Ruby-Programm
[Ruby] Schwierigkeiten beim Refactoring logischer Operatoren (Genauigkeit und Lesbarkeit)
Umgang mit TSV-Dateien und CSV-Dateien in Ruby
Schreiben Sie Hamcrest Matcher im Lambda-Stil
So beheben Sie den SSL_connect-Fehler im PayPal Ruby SDK