70 votes

obj.néant? vs obj == nil

Est-il préférable d'utiliser obj.néant? ou obj == nil et quels sont les avantages des deux.

50voto

OscarRyz Points 82553

Est-il préférable d'utiliser obj.néant? ou obj == nil

C'est exactement le même. Il a exactement les mêmes effets observables de l'extérieur ( pfff ) *

et quels sont les avantages des deux.

Si vous aimez les micro-optimisations de tous les objets de retour d' false de la .nil? message, sauf pour l'objet nil lui-même, tandis que l'objet à l'aide de l' == message d'effectuer un micro comparaison avec l'autre objet de déterminer si c'est le même objet.

* Voir les commentaires.

11voto

Topher Fangio Points 7986

Personnellement, je préfère object.nil? comme il peut être moins compliqué sur les lignes les plus longues; cependant, j'ai aussi souvent utiliser object.blank? si je travaille dans les Rails qui vérifie également si la variable est vide.

5voto

DigitalRoss Points 80400

Dans de nombreux cas, aucun des deux, il suffit de tester la valeur boolean valeur de vérité de

Bien que les deux opérations sont très différents, je suis sûr qu'ils vont toujours de produire le même résultat, au moins jusqu'à ce que quelqu'un sur le bord de quelque chose décide de remplacer l'Objet de l' #nil? méthode. (On appelle l' #nil? méthode héritée de l'Objet ou substituée en NilClass et on compare à l'encontre de l' nil singleton.)

Je voudrais suggérer que, dans le doute, vous allez une troisième voie, en fait, et il suffit de tester la valeur de vérité d'une expression.

Donc, if x et pas if x == nil ou if x.nil?, afin de disposer de ce test DTRT lorsque la valeur de l'expression est fausse. En travaillant de cette façon peut aussi aider à éviter tentant de quelqu'un pour définir FalseClass#nil? comme vrai.

3voto

Andrew Grimm Points 22996

Vous pouvez utiliser le Symbole#to_proc sur nil?, alors qu'il ne serait pas pratique sur x == nil.

arr = [1, 2, 3]
arr.any?(&:nil?) # Can be done
arr.any?{|x| x == nil} # More verbose, and I suspect is slower on Ruby 1.9.2
! arr.all? # Check if any values are nil or false

0voto

Garrett Points 4295

Je me retrouve pas à l'aide de .nil? quand vous pouvez le faire:

unless obj
  // do work
end

C'est en fait plus lentement à l'aide de .nil? mais pas sensiblement. .nil? est juste une méthode pour vérifier si cet objet est égale à zéro, d'autres que l'attrait visuel et très peu de performance, il faut il n'y a pas de différence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X