Ich bin neu bei Ruby und war überrascht, als ich herausfand, dass alle Objekte außer Null und Falsch wahr sind. Sogar 0 ist wahr.
Eine schöne Sache an dieser Eigenschaft der Sprache ist, dass Sie schreiben können:
if !variable
# do stuff when variable is nil
end
Meine Kollegen, die erfahrenere Ruby-Entwickler sind, bestehen darauf, dass ich das wählen sollte, anstatt .nil? wie so:
if variable.nil?
# do stuff when variable is nil
end
Ich glaube jedoch, dass Letzteres aus zwei Gründen eine bessere Option ist: 1. Ich denke, es ist objektorientierter, insbesondere in einer Sprache wie Ruby, in der alles ein Objekt- und Nachrichtenaustausch ist. 2. Es ist meiner Meinung nach besser lesbar, auch wenn es weniger kompakt ist.
Mache ich hier einen "Neuling" -Fehler?
coding-style
ruby
null
Javier Holguera
quelle
quelle
Antworten:
Schreiben Sie, was Sie meinen. Meinen Sie, was Sie schreiben.
Machen wir einen anderen Test.
.vowel?
vs.
Nun ist es offensichtlich, dass diese nicht dasselbe tun. Aber wenn Sie erwarten , nur
char
sein ,a
oderb
es wird funktionieren. Aber es wird den nächsten Entwickler verwirren - der zweite Block wird für die Bedingungen eingegeben, unter denen auch char ist[eiou]
. Aber dafüra
wird es richtig funktionieren.Ja, das ist der Fall
nil
undfalse
sind die einzigen falschen Werte in Ruby. Wenn Sie jedoch testen,nil
indem Sie testennil || false
, ist dies nicht das, was Sie meinen.Dies bedeutet, dass der nächste Entwickler (der zufällig ein verrückter Axtmord ist, der Ihre Privatadresse kennt) den Code liest und sich fragt, warum er auch
false
dort hineingehen sollte.Schreiben Sie den Code, der genau das vermittelt , was Sie meinen.
quelle
Folgendes berücksichtigen:
response = responses.to_a.first
Dies gibt das erste Element von
responses
oder zurücknil
. Dann, weil bedingte Anweisungen so behandeln,nil
wiefalse
wir schreiben können:Welches ist besser lesbar als:
Das
if (object)
Muster ist im Ruby-Code sehr verbreitet. Es führt auch gut zum Refactoring, zB:Denken Sie auch daran, dass eine Ruby-Methode
nil
standardmäßig zurückgegeben wird. So:kann vereinfacht werden zu:
So können wir weiter überarbeiten:
Jetzt können Sie argumentieren, dass eine Rückkehr
nil
nicht immer die beste Idee ist, da dies bedeutet, dass Sienil
überall nachsehen müssen. Aber das ist noch ein Fischkessel. Angesichts der Tatsache, dass das Testen auf "Anwesenheit oder Abwesenheit" von Objekten eine so häufige Anforderung ist, ist die Wahrhaftigkeit von Objekten ein nützlicher Aspekt von Ruby, wenn auch überraschend für Neulinge in der Sprache.quelle
Es wird nicht nur
if variable.nil?
eher wie eine natürliche Sprache gelesen, sondern es wird auch verhindert, dass ein Programmierer ihm versehentlich einenfalse
Wert zuweist und in Ihreif
Aussage fällt, da Ruby eine lose typisierte Sprache ist.quelle
Idiomatisch
unless variable
ist vorzuziehenif !variable
. Negierteif
Anweisungen werden oft als Codegeruch angesehen, da es einfacher ist, die Negation beim Überfliegen zu übersehen.Das größere Bild hier ist, dass solche
nil
Überprüfungen auch ein bisschen nach Code riechen. Verwenden Sie für eine ordnungsgemäße OO das Nullobjektmuster, damit diese Art der Überprüfung niemals erforderlich ist. http://devblog.avdi.org/2011/05/30/null-objects-and-falsiness/Sagen Sie den Objekten, was zu tun ist, und fragen Sie sie nicht, was sie sind. Dies wird manchmal als Tell Don't Ask bezeichnet
quelle