Ruby: “si !objet.néant?” ou “si l'objet”
Sont-ils les mêmes si utilisé dans un if/else/end
déclaration? Que faites-vous habituellement? Je me demande s'il y a des différences subtiles ou edge cas où object
et !object.nil?
réagirait différemment.
- N'est-ce pas le ruby façon d'écrire
if object.nil?.!
😉
Vous devez vous connecter pour publier un commentaire.
Il y a des différences. Par exemple:
Donc:
Comme @tokland suggéré, dans la plupart des cas à l'aide de
!obj.nil?
construction est inutile.false
cas est en effet spécial, 99% du temps, le tristement commun!obj.nil?
est inutile et non-déclarative.!!nil => false
!!object => true
. Aussinil.to_bool => false
etobject.to_bool => true
. Mais pas encore parfait. Peut-être que la langue a besoin d'unnot_nil?
ou!nil?
Il existe un et un seul cas dans lequel
!object.nil?
etobject
évaluer à des résultats différents dans un contexte booléen, et qui est siobject
estfalse
. Dans toutes les autres situations, le résultat est le même.Avec cela, je pense que nous pouvons répondre à votre question (qui est: quelle Est la situation où je dois utiliser
if !object.nil?
au lieu de simplementif object
lorsque la protection contre lesobject
être nul?):Pas, vous pouvez toujours utiliser
if object
si vous voulez vérifier contrenil
.if object
tests siobject
n'est pasnil
oufalse
.!object.nil?
tests siobject
n'est pasnil
. (Rubydoc)Donc quand
object
estfalse
, ils ont des valeurs différentes.Bien.
if object
va se comporter différemment deif !object.nil?
siobject=false
.C'est à ce sujet.
Objets peuvent remplacer
nil?
mais ils ne peuvent pas être à tort, à moins qu'ils sont nuls ou faux. Personnellement, j'utilisenil?
ou ActiveSupport depresent?
alors que je maintiens que la flexibilité. Je pense aussi qu'il lit un peu mieux.