jeudi, juin 22, 2006

switch , case, when

Ca! C'est quelque chose que je ne trouve pas cool du tout en ruby! Dans tous les languages que je connais (java, javascript, C++...) on utilise switch/case:

public class Test {

 public void test(int key) {
  switch (key) {
  case 1:
   System.out.println("1");
   break;
  default:
   System.out.println("default");
   break;
  }
 }
}

Et en Ruby c'est case/when:
def switch_test(count)
  case(count)
    when 0: puts "zero"
    when 1: puts "un"
    else puts "else"
  end
end

switch_test(1)
switch_test(0)
switch_test(4)

Résultat:
un
zero
else

Je ne trouve pas ça plus clair et surtout je vais me mélanger avec les autres languages à tous les coups!

2 commentaires:

Sly a dit…

C'est pas mal mais ce n'est pas tout.

Je connais déjà trop de langages avec le switch-case différent (dont l'exceptionnel PatternMatching de CaML) donc franchement, une syntaxe de plus n'est pas vraiment grave. Surtout quand elle est si peu verbeuse et si confortable.

Le vrai avantage de Ruby est de pouvoir matcher sur à peu près tout, pas seulement des valeurs, par exemple (et encore je suis sur qu'on peut faire mieux, genre en nestant le code) :

case var
when String
n = var.to_i
when Fixnum
n = var
else
n = 0
end

case n
when 0
"error"
when 1, 3, 5
"1, 3 ou 5" # j'aime grouper
when 0..10
"inf 10" # on peut utiliser les objets genre Range, Regexp pour les tests
else
"j'en sais rien"
end

Voila :)

Benjamin Francisoud a dit…

Effectivement ce genre de switch case sur des objets m'a manqué à plusieurs reprises en Java...

Ce que je critiquais ici c'est juste que dans mon cas (codeur java) le fait que le "case" soit à la place du "swtich" va m'induire en erreur ;)

Sinon Ruby rulez on le sait tous :D