Was ist ein sicherer Referenzoperator (&.), Der Ruby Ampasand verwendet?

Einführung

Wenn die Variable "nil" ist, können einige Methoden einen Fehler verursachen.

Wenn beispielsweise "each" verwendet wird, um ein Array von Werten in einem Prozess zu drehen, wird der Prozess gestoppt und ein Fehler tritt auf, wenn "nil" enthalten ist. .. Es wäre ein Problem, wenn etwas passieren würde.

In einem solchen Fall können Sie "Null" vermeiden, indem Sie "Weiter" ausführen, wenn [Variable] .nil? "Mit ** Schutzklausel ** (eine Methode zum Implementieren, um die Ausnahme zu Beginn der Funktion oder des iterativen Prozesses zu entfernen). Das tue ich, aber ich möchte eine Notiz machen, wenn es eine andere Methode gibt, die logische Operatoren anwendet.

Sicherheitsreferenzbediener mit ampassand (&)

Schreiben Sie zunächst aus der Schlussfolgerung heraus in Form von "[Objekt] &. [Methode]".

Zum Beispiel

# Ohne &
ary = [[1,2,3],nil,[5,6]]

 ary.each do |element_ary|
  p element_ary.length
end

=>

3
Traceback (most recent call last):
	2: from test.rb:3:in `<main>'
	1: from test.rb:3:in `each'
test.rb:4:in `block in <main>': undefined method `length' for #nil:NilClass (NoMethodError)

# Mit &
ary = [[1,2,3],nil,[5,6]]

 ary.each do |element_ary|
  puts element_ary&.length
end

=>

3
nil
2

Auf diese Weise entstehen keine Fehler.

Prinzip

Tatsächlich handelt es sich dabei um den logischen Operator "&&".

Im Allgemeinen weisen logische Operatoren die folgenden Merkmale auf:

・ In der Reihenfolge von links ausgewertet ・ Sobald die Wahrheit des logischen Ausdrucks bestimmt ist, werden die verbleibenden Ausdrücke nicht ausgewertet. -Der Wert des zuletzt ausgewerteten Ausdrucks wird zum Wert der gesamten Logik

Das heißt, wenn "[Bedingung 1] && [Bedingung 2]" gefunden wird, wird "[Bedingung 2]" nur ausgewertet, wenn "[Bedingung 1]" wahr ist. Dies liegt daran, dass, wenn "[Bedingung 1]" "null" oder "falsch" ist, das Ergebnis des logischen Operators "&&" "null" oder "falsch" ist, ohne Bedingung 2 zu bewerten.

Wenn Sie dies anwenden und anhand des obigen Beispiels erklären, kann dies wie folgt geschrieben werden.

ary = [[1,2,3],nil,[5,6]]

 ary.each do |element_ary|
  p element_ary && element_ary.length
end

Wenn "nil" in "element_ary" eingegeben wird, endet die Verarbeitung des logischen Operators zum Zeitpunkt von "[Bedingung 1]" und "nil" wird zurückgegeben, so dass "nil" zur "Längen" -Methode von "[Bedingung 2]" hinzugefügt wird. Wird nicht überqueren.

Es wurde als Sicherheitsreferenzoperator bezeichnet, der ausgedrückt werden konnte, indem dies weggelassen und nach dem Objekt "&" hinzugefügt wurde, wie unten gezeigt.

ary = [[1,2,3],nil,[5,6]]

 ary.each do |element_ary|
  p element_ary&.length
end

abschließend

Es war ein Anwendungsbeispiel für einen logischen Operator, aber ich fand es schön.

Recommended Posts

Was ist ein sicherer Referenzoperator (&.), Der Ruby Ampasand verwendet?
Was ist ein Ruby-Modul?
Was ist eine Referenztypvariable?
Was ist ein zweidimensionales Ruby-Array?
Was ist ein Konstruktor?
Was ist ein Stream?
Was ist ein Operator?
Was ist ein Servlet?
Was ist eine Wrapper-Klasse?
Was ist ein boolescher Typ?
Was ist ein Gleitkomma?
Was ist ein aussagekräftiger Kommentar?
Was ist Jersey? Referenzimplementierung?
Erstellen eines Kalenders mit Ruby
Was ist eine JAR-Datei?
Was ist eine Java-Sammlung?
Was ist ein Lambda-Ausdruck?
Erstellen Sie eine Lotterie mit Ruby
[Ruby] Wofür wird `!!` verwendet?
[Ruby] Was ist eine Instanz?
Was ist Fat⁉ enum?
Was ist ein Ausschnitt in der Programmierung?
Was ist ein Boolescher Spaltentyp?
Was ist ein Lambda-Ausdruck (Java)
Was ist eine Klasse in der Java-Sprache (3 /?)
Was ist ein Terminal? -Absoluter Pfad & relativer Pfad-
Was ist eine Spring Boot-Originaldatei?
[Technischer Hinweis] Was ist "include" in Ruby?
[Für Programmieranfänger] Was ist eine Methode?
Was ist eine Klasse in der Java-Sprache (1 /?)
Was ist eine Klasse in der Java-Sprache (2 /?)
[Rails] Was ist ein Punkt (.) Oder ein Doppelpunkt (:)?
Einführung in rekursive Funktionen: Was ist eine rekursive Funktion?
Ruby Sum ist eine nüchterne und erstaunliche Geschichte