[Hinweis] [Anfänger] So schreiben Sie Ruby Memo (Refactoring) 1

Überblick

Ich habe festgestellt, dass der in Letzter Beitrag veröffentlichte Ruby-Code nicht Ruby-ähnlich geschrieben ist. Daher habe ich mir auch das Lernen als Korrektur notiert. zurücklassen.

Nachdem ich den folgenden Artikel gesehen hatte, versuchte ich ihn zu korrigieren, indem ich den Code des vorherigen Beitrags als Beispiel nahm und mich tatsächlich auf den Inhalt zum Lernen bezog. ** [Für Anfänger] Redewendungen und nützliche Methoden, die für das Refactoring in Ruby and Rails | Qiita verwendet werden können **

Code

Vor der Korrektur

def Upcasing(result_lines)
  result_lines[0] = result_lines[0].capitalize
  break_flg = false
 ## ④ Hash-Notation in Ruby (ohne Änderung: Der Grund, warum dies nicht möglich war, wird später beschrieben)
  break_sign = { "."=>true, "!"=>true, "?"=>true, ","=>false }

   result_lines.each_index do |i|
 ## ① Bedingte Verzweigung und boolescher Wert
    if break_flg == true
      result_lines[i] = result_lines[i].capitalize
    end

 ## ② Informationen zum Angeben von Array-Elementen finden Sie in der angegebenen Zahl in der Zeichenfolge
    if break_sign[result_lines[i].slice(-1)] == true
      break_flg = true
    else
      break_flg = false
    end
  end
  joined_line = result_lines.join(" ")
 ## ③ Notation des Rückgabewerts in Ruby
  return joined_line
end

print Upcasing(["oh,", "yeah!", "hello!"])

## Ausführungsergebnis
 Oh, yeah! Hello!

Wechselpunkt

def Upcasing(result_lines)
  result_lines[0] = result_lines[0].capitalize
  break_flg = false
 ## ④ Hash-Notation in Ruby (Der Grund, warum sie ohne Änderung nicht geändert werden konnte, wird später beschrieben.)
  break_sign = { "."=>true, "!"=>true, "?"=>true, ","=>false }

   result_lines.each_index do |i|
 ## ① Bedingte Verzweigung und boolescher Wert
-   if break_flg == true
+   if break_flg
      result_lines[i] = result_lines[i].capitalize
    end

 ## ② Informationen zum Angeben von Array-Elementen finden Sie in der angegebenen Zahl in der Zeichenfolge
-   if break_sign[result_lines[i].slice(-1)] == true
+   if break_sign[result_lines[i][-1]]   
      break_flg = true
    else
      break_flg = false
    end
  end
  joined_line = result_lines.join(" ")
 ## ③ Notation des Rückgabewerts in Ruby
- return joined_line
end

print Upcasing(["oh,", "yeah!", "hello!"])

Überarbeitet

def Upcasing(result_lines)
  result_lines[0] = result_lines[0].capitalize
  break_flg = false
  break_sign = { "."=>true, "!"=>true, "?"=>true, ","=>false }

   result_lines.each_index do |i|
    if break_flg
      result_lines[i] = result_lines[i].capitalize
    end
    
    if break_sign[result_lines[i][-1]]
      break_flg = true
    else
      break_flg = false
    end
  end
  joined_line = result_lines.join(" ")
end

print Upcasing(["oh,", "yeah!", "hello!"])

## Ausführungsergebnis
 Oh, yeah! Hello!

Details zu jeder Korrektur

Wir werden den zu untersuchenden Punkten (1) bis (4) in numerischer Reihenfolge folgen.

① Bedingter Verzweigungs- und Boolescher Wert

-   if break_flg == true
+   if break_flg

Kontrollstruktur> if | Ruby 2.7.0 Referenzhandbuch

Es ist peinlich, aber ich habe es aufgrund der Trägheit überbeansprucht und die grundlegende Spezifikation nicht verstanden, dass, wenn eine einzelne Variable als Ausdruck beschrieben wird, die Wahrheit zurückgegeben wird. Es geht nicht nur um Ruby ... Schreiben Sie in Ruby zumindest nicht (== true) mit einem einfachen Wahrheitsurteil.

hoge = true
p hoge
if hoge; hoge = false; end
p hoge

 true
 false
var hoge = true;
console.log(hoge);
if (hoge) hoge = false;
console.log(hoge);

// true
// false
public class Hello{
  public static void Main(){
    bool hoge = true;
    System.Console.WriteLine(hoge);
    if (hoge){ hoge = false; }
    System.Console.WriteLine(hoge);
  }
}

// True
// False

(2) Wie man Array-Elemente angibt, verweisen Sie auf die angegebene Nummer in der Zeichenfolge

-   if break_sign[result_lines[i].slice(-1)] == true
+   if break_sign[result_lines[i][-1]]

③ Notation des Rückgabewerts in Ruby

def Upcasing(result_lines)
  ##
 ## Code weggelassen
  ##
  joined_line = result_lines.join(" ")
- return joined_line
end

④ Hash-Notation in Ruby

break_sign = { "."=>true, "!"=>true, "?"=>true, ","=>false }

Zuerst habe ich versucht, die Notation mithilfe der unten gezeigten Symbole zu ändern.

break_sign = { ".": true, "!": true, "?": true, ",": false }

Als ich es wie oben geändert habe, hat sich das Debug-Ergebnis der oberen Methode geändert. Als ich den Inhalt des Hashs überprüfte, war der wie unten gespeicherte Schlüssel "!" Keine Zeichenfolge mehr.

break_sign = { "."=>true, "!"=>true, "?"=>true, ","=>false }
p break_sign
=> {"."=>true, "!"=>true, "?"=>true, ","=>false}

break_sign = { ".": true, "!": true, "?": true, ",": false }
p break_sign
=>{:"."=>true, :!=>true, :"?"=>true, :","=>false}

Ich dachte darüber nach, es irgendwie mit Symbolen auszudrücken, aber ich fragte mich, ob es so viele Szenen gab, in denen überhaupt ein Sonderzeichen auf den Hash-Schlüssel angewendet wurde, also beschloss ich, diese Zeit durchzugehen. Wenn Sie etwas darüber bemerken, werde ich es separat veröffentlichen.

Recommended Posts

[Hinweis] [Anfänger] So schreiben Sie Ruby Memo (Refactoring) 1
Rubin vertikales Schreiben
Code schreiben Ruby
Schreiben von Frühlingsstiefel-Memos (1)
Ruby grundlegende Syntaxnotizen
Was mich als Anfänger beim Schreiben von Ruby beeindruckt hat
Schreiben von Spring Boot-Memos (2)
Persönliches Memo Progate Ruby I (2)
Persönliches Memo Progate Ruby I (1)