Je cherche un moyen concis de vérifier une valeur pour voir si elle est nulle ou zéro. Actuellement, je fais quelque chose comme :
if (!val || val == 0)
# Is nil or zero
end
Mais cela semble très maladroit.
Je cherche un moyen concis de vérifier une valeur pour voir si elle est nulle ou zéro. Actuellement, je fais quelque chose comme :
if (!val || val == 0)
# Is nil or zero
end
Mais cela semble très maladroit.
Les objets ont un Nul ? méthode .
if val.nil? || val == 0
[do something]
end
Ou, pour une seule instruction :
[do something] if val.nil? || val == 0
Attention à l'utilisation de "or" et "and", qui ont une priorité différente et très faible par rapport à || et &&. Voir blog.jayfields.com/2007/08/ pour quelques remarques.
Je suis d'accord avec certains posteurs sur l'"odeur" de la question, mais pour moi, c'est plutôt la manière ruby.
La préséance de or
ne nécessite pas de parenthèses ici, et sera lu tout naturellement par un Rubyiste expérimenté. Les seules personnes qui se font piquer par ||
contre or
sont des personnes qui n'ont jamais programmé Perl :)
À partir de Ruby 2.3.0, vous pouvez combiner l'opérateur de navigation sûre ( &.
) avec Numeric#nonzero?
. &.
renvoie à nil
si l'instance était nil
y nonzero?
- si le numéro était 0
:
unless val&.nonzero?
# Is nil or zero
end
Ou postfix :
do_something unless val&.nonzero?
Tout d'abord, je pense que c'est la façon la plus concise de vérifier cette condition particulière.
Deuxièmement, pour moi, il s'agit d'une odeur de code qui indique un défaut potentiel dans votre conception. En général, nil et zéro ne devraient pas signifier la même chose. Si possible, vous devriez essayer d'éliminer la possibilité que val soit nil avant de faire ce code, soit en le vérifiant au début de la méthode, soit par un autre mécanisme.
Vous pouvez avoir une raison parfaitement légitime de faire cela, auquel cas je pense que votre code est bon, mais j'envisagerais au moins de me débarrasser de la vérification de nil si possible.
Vous avez raison pour l'odeur du code ! +1 Je pourrais envisager d'examiner le modèle NullObject. fr.wikipedia.org/wiki/Null_Object_pattern
Vous pouvez utiliser la fonction Object.nil ? pour tester spécifiquement la présence de nil (et ne pas être pris entre false et nil). Vous pouvez également intégrer une méthode dans Object.
class Object
def nil_or_zero?
return (self.nil? or self == 0)
end
end
my_object = MyClass.new
my_object.nil_or_zero?
==> false
Ce n'est pas recommandé car les modifications apportées à l'objet sont difficiles à retracer pour les collègues et peuvent rendre votre code imprévisible pour les autres.
Epochwolf, si vous mettez cela sur la classe Numeric, alors nil?
retournerait toujours faux. nil?
ne renvoie que vrai sur la NilClass.
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.
1 votes
Que se passe-t-il si val est égal à
false
?