[RUBY] Reihenfolge der Verarbeitung im Programm

Die Studienzeit ist jetzt in der 11. Woche. Ich werde vorstellen, was ich bisher gelernt habe und was ich oft Fehler mache.

Diese Zeit ist "Bearbeitungsauftrag". Obwohl es sich um einen grundlegenden und rudimentären Inhalt in den Grundlagen handelt, gibt es viele Fälle, in denen ein Fehler aufgrund der falschen Reihenfolge der Beschreibung aufgetreten ist. Ich hoffe, dass dies für diejenigen hilfreich ist, die gerade erst anfangen zu lernen. Da die Sprache, die wir gerade lernen, "Ruby" ist, wird der Inhalt auch der von "Ruby" sein.

Die verwendete Version von Ruby ist wie folgt.

ruby 2.6.5

Über die Reihenfolge der Verarbeitung

Zunächst ist die Reihenfolge der Programmverarbeitung in der Quelle grundsätzlich ** "in der Reihenfolge von oben nach unten, Zeile für Zeile" *. Dies ändert sich auch dann nicht, wenn Sie eine App mit einer komplizierten Beschreibung oder Ruby on Rails erstellen. ( Wenn Sie eine Methode aufrufen, eine bedingte Verzweigung durchführen oder die Verarbeitung wiederholen, springt die Zeile möglicherweise von unten nach oben. Sie ist jedoch leichter zu verstehen, wenn Sie die grundlegende Verarbeitungsreihenfolge kennen.) In einem einfachen Programm ausgedrückt

puts "1. Zeile"
puts "2. Zeile"
puts "3. Zeile"

Wenn Sie schreiben, wenn Sie es auf der Konsole ausführen

1. Zeile
2. Zeile
3. Zeile

Es wird sein. Mit dieser Beschreibung kommt das Ausgabeergebnis des Programms setzt "3. Zeile" nicht in die 1. Zeile. Es wäre schwer, wenn es das gäbe. Wenn sich die bedingte Verzweigung (wenn, während usw.) oder die wiederholte Verarbeitung (jeweils Zeiten usw.) damit überschneidet, ist die Reihenfolge der Verarbeitung tendenziell spärlich. (Vielleicht bin ich der einzige ...)

Nehmen Sie zum Beispiel das berühmte ** "FizzBuzz Problem" ** als Beispiel.


FizzBuzz Problem
 1~Erstellen Sie ein Programm, das die Nummer 100 ausgibt.
Wenn es ein Vielfaches von 3 ist, wird es als "Fizz" angezeigt, und wenn es ein Vielfaches von 5 ist, wird es als "Buzz" angezeigt.
Erstellen Sie ein Programm zur Anzeige.
Wenn es sich jedoch um ein Vielfaches von 15 handelt, wird "Fizz Buzz" angezeigt.

Ein Beispiel für diese Antwort ist

#Richtiger Code
def fizz_buzz
  num = 0
  while num <= 99
    num += 1
    if num % 15 == 0 
    puts "FizzBuzz"
    elsif num % 3 == 0
    puts "Fizz"
    elsif num % 5 == 0
    puts "Buzz"
    else
    puts num
    end
  end
end

puts fizz_buzz

Das Ausgabeergebnis ist wie folgt

スクリーンショット 2020-09-28 10.56.51.png

Lassen Sie uns die Reihenfolge der bedingten Ausdrücke in diesem Programm wie folgt ändern.

#Falscher Code

def fizz_buzz
  num = 0
  while num <= 99
    num += 1
    if num % 3 == 0  # num % 15 ==Geändert vom bedingten Ausdruck 0
    puts "Fizz"
    elsif num % 5 == 0
    puts "Buzz"
    elsif num % 15 == 0 #num % 3 ==Geändert vom bedingten Ausdruck 0
    puts "FizzBuzz"
    else
    puts num
    end
  end
end

puts fizz_buzz

Hier ist das Ausgabeergebnis, wenn wie oben beschrieben.

スクリーンショット 2020-09-28 11.07.44.png

Wenn es ein Vielfaches von 15 ist, wird "FizzBuzz" nicht angezeigt, aber "Fizz" wird angezeigt. Der Grund dafür ist "Ich verstehe die Reihenfolge der Verarbeitungsprogramme nicht."

In der Reihenfolge der Verarbeitung des oben genannten falschen Codes Wenn zum Beispiel num == 3,

#Falscher Code
    if num % 3 == 0  #Diese Formel gilt
    puts "Fizz"

=> "Fizz"

Wenn num == 5

#Falscher Code
    if num % 3 == 0  # num ==5 ist nicht durch 3 teilbar, also gehen Sie wie folgt vor
    puts "Fizz"
    elsif num % 5 == 0 # num ==5 ist durch 5 teilbar, also mach das
    puts "Buzz"

=> "Buzz"

Wenn das Problem num == 15 ist

#Falscher Code
    if num % 3 == 0  # num ==15 ist teilbar durch 3, also mach das!
    puts "Fizz"
    elsif num % 5 == 0 # num ==15 wurde verarbeitet und funktioniert nicht mehr.
    puts "Buzz"
    elsif num % 15 == 0 # num ==15 wurde verarbeitet und funktioniert nicht mehr.
    puts "FizzBuzz"
    end

=> "Fizz"

Es wird so verarbeitet. Achten Sie also auf die Reihenfolge, in der Sie das Programm schreiben.


if num % 15 == 0 #Zunächst wird bestimmt, ob num durch 15 teilbar ist.
    puts "FizzBuzz" #Wenn der bedingte Ausdruck wahr ist"FizzBuzz"Wenn die Anzeige nicht zutrifft, fahren Sie mit dem nächsten fort

  elsif num % 3 == 0 #Als nächstes ist es nicht durch 15 teilbar, aber es wird beurteilt, ob es durch 3 teilbar ist.
    puts "Fizz"      #Wenn der bedingte Ausdruck wahr ist"Fizz"Wird angezeigt.
                     #Wenn dies auch nicht zutrifft, fahren Sie mit dem nächsten fort

  elsif num % 5 == 0 #Es ist nicht durch 3 oder 15 teilbar, aber es wird beurteilt, ob es durch 5 teilbar ist.
    puts "Buzz"      #Wenn der bedingte Ausdruck wahr ist"Buzz"Wird angezeigt.
                     #Wenn dies auch nicht zutrifft, fahren Sie mit dem nächsten fort
  else
 
   puts num         #Wenn nicht alle vorherigen Bedingungen erfüllt sind
end                 #Zeigen Sie die Nummer so an, wie sie ist

das ist alles. Es ist eine grundlegende Sache, aber aus meiner bisherigen Erfahrung gab es Situationen, in denen ich in Schwierigkeiten war, weil ich diese Grundlagen nicht wirklich verstanden habe. Ich würde es begrüßen, wenn Sie sich darauf beziehen könnten, wenn Sie ähnlichen Situationen gegenüberstehen.

Recommended Posts

Reihenfolge der Verarbeitung im Programm
[Bestellmethode] Legen Sie die Reihenfolge der Daten in Rails fest
Über das Problem des Deadlocks bei der Parallelverarbeitung in gem'sprockets '4.0
Bildverarbeitung: Grundstruktur des vom Programm gelesenen Bildes
Erläuterung der Reihenfolge der Schienenrouten
Implementierung der asynchronen Verarbeitung in Tomcat
Ein Programm, das die Anzahl der Wörter in einer Liste zählt
[Java] Ordnen Sie die Daten des vergangenen Montags und Sonntags der Reihe nach an
Android - Ist die Reihenfolge der seriellen und parallelen Verarbeitung von AsyncTask garantiert? ??
Die Frühjahrsvalidierung war in der Reihenfolge von Form und BindingResult wichtig
Holen Sie sich das Ergebnis von POST in Java
Die Identität der Schienenparameter [: id]
Implementierung einer mandantenfähigen kompatiblen asynchronen Verarbeitung in Tomcat
Ich habe die interne Verarbeitung von Retrofit untersucht
Die Geschichte des Schreibens von Java in Emacs
Schreiben Sie die Bewegung von Rakefile in das Runbook
Beispielprogramm, das den Hashwert einer Datei in Java zurückgibt
[No.004] Der Bestelllistenbildschirm des Bestellers wurde korrigiert
Die Geschichte des einfachen String-Vergleichs in Java
[Java] Behandlung von Java Beans in der Methodenkette
Die Geschichte eines gewöhnlichen Othello in Java
Informationen zur Beschreibungsreihenfolge der Java-Systemeigenschaften
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
Die Geschichte des Lernens von Java in der ersten Programmierung
Messen Sie die Größe eines Ordners mit Java
Spüren Sie den Lauf der Zeit auch in Java
Reihenfolge der in Swift verwendeten Modifikatoren (siehe SwiftLint)
Importieren Sie Dateien derselben Hierarchie in Java
[Rails] Rangfolge und Paginierung in der Reihenfolge der Likes
Erstellen eines Beispielprogramms mit dem Problem eines Datenbankspezialisten für DDD-Verbesserung 2
[Swift] So ändern Sie die Reihenfolge der Balkenelemente in Tab Bar Controller [Anfänger]
Erstellen eines Beispielprogramms mit dem Problem eines Datenbankspezialisten mit DDD-Verbesserung 1
Rufen Sie die URL des HTTP-Umleitungsziels in Java ab
Geben Sie die statische Ressourcencodierung in Spring Boot an
Die Welt der Clara-Regeln (2)
In Time.strptime ist% j (Gesamtdatum des Jahres)
Einfacher Einsteckmechanismus im Frühjahr, berücksichtigen Sie auch die Reihenfolge
Bereiten Sie die Ausführungsumgebung von Tomcat in der IntelliJ Community vor
Greifen Sie auf die War-Datei im Stammverzeichnis von Tomcat zu
Implementierung der asynchronen Verarbeitung für einen einzelnen Mandanten in Tomcat
[Ruby] Die Rolle von Indizes beim Lernen von Elementen in Arrays
Rufen Sie den Namen des Testfalls in der JUnit-Testklasse ab
Verstehen Sie die Eigenschaften von Scala in 5 Minuten (Einführung in Scala)
Beurteilung des Kalenders
Die Geschichte einer illegalen staatlichen Ausnahme in Jetty.
Die Welt der Clara-Regeln (4)
Untersuchen Sie die Grenzen der "32 GB Speicherwand" in Elasticsearch
Die Welt der Clara-Regeln (3)
Informationen zum Hinzufügen von Variablen in der iterativen Verarbeitung in der while-Anweisung
[Java] Holen Sie sich die Datei unabhängig von der Umgebung in das JAR
Die Objekte in der Liste waren Referenzen, richtig? Bestätigung von
Persönliche Zusammenfassung der in JUnit 4 häufig verwendeten Typen
Verwenden Sie MouseListener für die Verarbeitung
Die Welt der Clara-Regeln (5)
Die Idee der schnellen Sortierung