83 votes

Le meilleur idiome ruby pour "nil or zero".

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.

1 votes

Que se passe-t-il si val est égal à false ?

8voto

ntl Points 21

Nil.to_i renvoie zéro, donc je fais souvent cela :

val.to_i.zero?

Cependant, vous obtiendrez une exception si jamais val est un objet qui ne répond pas à #to_i.

5voto

Stefan Points 23363

Bien que to_i ne fonctionne pas, to_f fait :

if val.to_f.zero?
# do something there
end

4voto

unwind Points 181987

Je crois que votre code est incorrect ; il testera en fait trois valeurs : nil , false et zéro. Ceci est dû au fait que le !val est vraie pour toutes les valeurs qui sont fausses, ce qui en Ruby est nil y false .

Le mieux que j'ai pu trouver pour l'instant est

if val == nil || val == 0
  # do stuff
end

Ce qui, bien sûr, n'est pas très intelligent, mais (très) clair.

4voto

RichOrElse Points 76

Ma solution utilise également les raffinements, sans les conditionnels.

module Nothingness
  refine Numeric do
    alias_method :nothing?, :zero?
  end

  refine NilClass do
    alias_method :nothing?, :nil?
  end
end

using Nothingness

if val.nothing?
  # Do something
end

2voto

Gishu Points 59012

Rails le fait par le biais de méthodes de requête d'attributs, où, en plus de false et nil, 0 et "" sont également évalués à false.

if (model.attribute?) # => false if attribute is 0 and model is an ActiveRecord::Base derivation

Il a cependant son lot de détracteurs. http://www.joegrossberg.com/archives/002995.html

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