Ruby Language Déclaration de cas


Exemple

Ruby utilise le mot-clé case pour les instructions switch.

Selon les Ruby Docs :

Les instructions de cas sont constituées d'une condition facultative, qui se trouve dans la position d'un argument par rapport à la case , et de zéro ou plusieurs when clauses. La première clause when qui correspond à la condition (ou à l'évaluation de la vérité booléenne, si la condition est nulle) «gagne» et sa strophe de code est exécutée. La valeur de l'instruction case est la valeur de la clause when , ou nil s'il n'y en a pas.

Une instruction de cas peut se terminer par une clause else . Chaque when qu'une instruction peut avoir plusieurs valeurs candidates, séparées par des virgules.

Exemple:

case x
when 1,2,3
  puts "1, 2, or 3"
when 10
  puts "10"
else
  puts "Some other number"
end

Version plus courte:

case x
when 1,2,3 then puts "1, 2, or 3"
when 10 then puts "10"
else puts "Some other number"
end

La valeur de la clause case correspond à chaque clause when à l'aide de la méthode === (non == ). Par conséquent, il peut être utilisé avec différents types d'objets.

Une déclaration de case peut être utilisée avec des plages :

case 17
when 13..19
  puts "teenager"
end

Une déclaration de case peut être utilisée avec une expression rationnelle :

case "google"
when /oo/
  puts "word contains oo"
end

Une instruction de case peut être utilisée avec un Proc ou un lambda:

case 44
when -> (n) { n.even? or n < 0 }
  puts "even or less than zero"
end

Une déclaration de case peut être utilisée avec les classes :

case x
when Integer
  puts "It's an integer"
when String
  puts "It's a string"
end

En implémentant la méthode === , vous pouvez créer vos propres classes de correspondance:

class Empty
  def self.===(object)
    !object or "" == object
  end
end

case ""
when Empty
  puts "name was empty"
else
  puts "name is not empty"
end

Une instruction de case peut être utilisée sans valeur à comparer:

case
when ENV['A'] == 'Y'
  puts 'A'
when ENV['B'] == 'Y'
  puts 'B'
else
  puts 'Neither A nor B'
end

Une instruction de case a une valeur, vous pouvez donc l'utiliser comme argument de méthode ou dans une affectation:

description = case 16
              when 13..19 then "teenager"
              else ""
              end