[Ruby] Difficulté à refactoriser les opérateurs logiques (précision et lisibilité)

Après avoir essayé de découvrir Ne vous répétez pas, il y a eu des cas où l'objectif initial n'a pas pu être atteint, je vais donc le laisser comme un article.

Définition d'exigence

Par exemple, supposons que vous souhaitiez saisir uniquement une chaîne de caractères spécifique. (Dans le cas suivant, l'entrée de l'un quelconque de "0", "1", "2" est jugée par l'instruction if.)

Description à l'aide d'opérateurs logiques

input_number = gets.chomp
sample_number = ["0","1","2"]

if input_number == "0" || input_number == "1" || input_number == "2"
    puts "L'entrée est 0,1,C'est l'un des 2."
 else
    puts "0,1,Un caractère autre que 2 a été saisi!"
end

Opérateur logique||Il semble que la partie (ou) soit longue ... J'essaye de le rendre plus simple par essais et erreurs.

Essayez d'utiliser la méthode entre?

case1 between?Méthode


input_number = gets.chomp
sample_number = ["0","1","2"]

#La chaîne de caractères saisie est"0"De"2"Renvoie la vérité quant à savoir si c'est entre les deux.
t_or_f = input_number.between?("0", "2")

if t_or_f == true
  puts "La chaîne de caractères saisie est 0,1,Est l'un des 2"
else
  puts "D'autres personnages sont inclus!"
end

Le nombre de définitions de variables a augmenté de un, mais si vous souhaitez accepter plus de chaînes de caractères, vous devez ajouter ou modifier moins que l'opérateur logique. Il s'avère que le refactoring est terminé et qu'un autre problème se pose. Si elle contient une chaîne de caractères non liée telle qu'un alphabet, elle sera fausse, mais une entrée telle que "0120" ou "1.9" sera renvoyée comme vraie. Et ensuite?

Essayez d'utiliser les méthodes any? And include?

any?Méthode et inclure?Méthode


input_number = gets.chomp
sample_number = ["0","1","2"]

#any?Méthode: renvoie vrai si l'une des conditions est remplie, faux si aucune des conditions n'est remplie
#bloquer{}Traitement en ... échantillon_numberの配列内の要素をbloquer引数nに代入。
#input_Juge si l'argument de bloc n est inclus (inclus) dans le nombre et renvoie vrai ou faux à plusieurs reprises (dans ce cas, 3 fois).
t_or_f = sample_number.any? {|n| input_number.include?(n)}

if t_or_f == true
  puts "La chaîne de caractères saisie est 0,1,Est l'un des 2"
else
  puts "D'autres personnages sont inclus!"
end

Dans ce cas, si la chaîne de caractères d'entrée contient 0, 1 ou 2, elle retournera toujours true. (Exemple: 1234 => true, abc0120 => true)

Conclusion

Après tout, l'opérateur logique||La saisie stricte est la plus précise.

dans la méthode? (* Rails uniquement)

Le Ruby étendu dans Rails, plutôt que l'original Ruby, a une méthode __in? __. Dans ce cas, seuls 0,1,2 sont acceptés, 01 etc. ne sont pas passés.

in?Méthode


input_number = gets.chomp
if input_number.in?(["0", "1", "2"])
 puts "La chaîne de caractères saisie est 0,1,Est l'un des 2"
else
  puts "D'autres personnages sont inclus!"
end

Recommended Posts

[Ruby] Difficulté à refactoriser les opérateurs logiques (précision et lisibilité)
11 Correspond aux opérateurs de comparaison et logiques
Ecrire des clés et des valeurs dans Ruby
Points à prendre en compte lors de la combinaison d'instructions if et d'opérateurs logiques
Faire un tri à bulles et sélectionner le tri avec Ruby
Résumé des hachages et symboles dans Ruby
[Ruby] Distinction et utilisation des boucles dans Ruby
Différence entre "|| =" et "instance_variable_defined?" Dans Ruby memo
[Ruby] Clé de base pour être fort dans la refactorisation
[Comprendre] Différence entre le hachage et le tableau dans Ruby
Placez les fichiers CSV contenant "'" et "" "dans Ruby 2.3 dans MySQL