Existe-t-il un meilleur moyen que le suivant pour vérifier si une chaîne est nulle OU a une longueur de 0 dans Ruby?
if !my_string || my_string.length == 0
return true
else
return false
end
En C #, il y a le pratique
string.IsNullOrEmpty(myString)
Quelque chose de similaire à celui de Ruby?
my_string || my_string.length == 0
lèvera unNoMethodError
simy_string
est nul. Je pense que vous vouliez dire:my_string.nil? || my_string.length == 0
!my_string || my_string.length == 0
Réponses:
Quand je ne suis pas inquiet pour les performances, j'utilise souvent ceci:
Il existe bien sûr diverses variantes ...
la source
strip
peut être assez inefficace.Si vous souhaitez avoir besoin d'ActiveSupport, vous pouvez simplement utiliser la
#blank?
méthode, qui est définie pour NilClass et String.la source
J'aime faire cela comme suit (dans un environnement non Rails / ActiveSupport):
cela fonctionne parce que:
la source
string.to_s.empty?
fonctionne pour les deuxnil
et""
.Une alternative à la proposition de jcoby serait:
la source
Comme il a été dit ici avant que Rails (ActiveSupport) ait un vide pratique ? méthode et il est implémenté comme ceci:
Assez facile à ajouter à tout projet basé sur Ruby.
La beauté de cette solution est qu'elle fonctionne automatiquement par magie non seulement pour les chaînes, mais aussi pour les tableaux et autres types.
la source
variable.blank? le fera. Il renvoie true si la chaîne est vide ou si la chaîne est nulle.
la source
nil?
peut être omis dans les contextes booléens. En règle générale, vous pouvez l'utiliser pour répliquer le code C #:la source
Tout d'abord, méfiez-vous de cette méthode:
Comme le dit Jesse Ezel :
Et si vous corrigez la classe String ... assurez-vous que NilClass n'a pas été corrigée non plus !
la source
Chaque classe a une
nil?
méthode:Et les chaînes ont la
empty?
méthode:N'oubliez pas qu'une chaîne n'est pas égale
nil
lorsqu'elle est vide, utilisez donc laempty?
méthode pour vérifier si une chaîne est vide.la source
Une autre option consiste à convertir nil en résultat vide à la volée:
(my_string||'').empty?
la source
Konrad Rudolph a la bonne réponse.
Si cela vous dérange vraiment, modifiez la classe String ou ajoutez-la à une classe / module de votre choix. Ce n'est vraiment pas une bonne pratique de monkey patcher les objets principaux à moins que vous n'ayez une raison vraiment convaincante.
Alors tu peux faire
String.nilorempty? mystring
la source
Rechercher les chaînes vides dans Ruby brut tout en évitant les exceptions NameError
Il y a quelques bonnes réponses ici, mais vous n'avez pas besoin d'ActiveSupport ou de monkey-patching pour traiter le cas d'utilisation courant ici. Par exemple:
Cela "fera la bonne chose" si ma_chaîne est nulle ou une chaîne vide, mais ne lèvera pas d'exception NameError si ma_chaîne n'est pas définie. Ceci est généralement préférable aux plus artificiels:
ou son acabit plus verbeux, car les exceptions devraient vraiment être enregistrées pour des choses que vous ne vous attendez pas à ce qu'elles se produisent. Dans ce cas, bien qu'il s'agisse d'une erreur courante, une variable non définie n'est pas vraiment une circonstance exceptionnelle, elle doit donc être traitée en conséquence.
Votre kilométrage peut varier.
la source
Avez-vous essayé les raffinements?
la source
Si vous utilisez des rails, vous pouvez utiliser
#present?
Donc, inversement pour vérifier l'utilisation de longueur nulle ou nulle
!present?
la source
Dans les rails, vous pouvez essayer
#blank?
.Attention: cela vous donnera des points positifs lorsque la chaîne est composée d'espaces:
Je voulais juste le souligner. Peut-être que cela répond à vos besoins
UPD. pourquoi ai-je de vieilles questions dans mon flux? Désolé pour le nécropostage.
la source
Pour les golfeurs de code:
Ou si vous n'êtes pas un golfeur (nécessite ruby 2.3 ou version ultérieure):
la source