Ruby
Structures de contrôle
Ruby propose des structures de contrôle "classiques" que l'on retrouve dans de nombreux autres langages comme par exemple if
, while
ou encore for
.
Cependant, de nouvelles structures sont introduites afin de faciliter la programmation.
if - unless
Voici un exemple de structure conditionnelle if
(on notera que les parenthèses autour de la condition sont facultatives) :
#!/usr/bin/ruby
s = "ruby"
if s == "ruby"
puts s + " ok";
else
puts "not ok";
end
# Affiche "ruby ok"
La structure conditionnelle unless
est identique à if
à la différence près que la condition est inversée. Par conséquent, le bloc de code suivant unless
sera exécuté uniquement si la condition est fausse :
#!/usr/bin/ruby
s = "ruby"
unless s != "ruby" then
puts s + " ok";
else
puts "not ok";
end
# Affiche "ruby ok"
while - until
Voici un exemple de boucle while
:
i = 0
while (i < 10)
i += 1
end
puts i
# Affiche 10
A l'instar de if
et unless
, il existe une structure while
avec une condition inversée. Il s'agit de until
(la boucle est donc exécutée tant que la condition est fausse) :
i = 0
until (i >= 10)
i += 1
end
puts i
# Affiche 10
for
La syntaxe de la boucle for
en Ruby est un peu particulière. En effet, elle nécessite l'utilisation d'un tableau fournissant l'ensemble des valeurs à parcourir et peut donc être comparé aux boucles foreach
que l'on retrouve dans d'autres langages :
tab = [1,2,3]
for t in tab
print t.to_s + "\n" # to_s : conversion de l'entier t en string
end
# Affiche :
# 1
# 2
# 3
upto - downto
Ruby introduit deux nouveaux types de boucles : upto
et downto
.
Chacune de ces fonctions s'appliquent à une valeur de départ et prennent en paramètre une valeur de fin.
upto
parcourera l'intervalle ainsi formé par incrément de 1 :
max = 3
1.upto( max ) { |i| # i contient la valeur courante de l'itérateur
puts i
}
# Affiche :
# 1
# 2
# 3
downto
fonctionne à l'identique mais par décrément de 1 :
max = 3
max.downto( 1 ) { |i|
puts i
}
# Affiche :
# 3
# 2
# 1
case
case
est l'équivalent d'un switch
en C par exemple. Cependant, son fonctionnement et sa syntaxe sont quelque peu différents comme on peut le constater dans l'exemple suivant :
lettre = "z"
case lettre
when "a":
print "a\n"
when "b":
print "b\n"
when "c":
print "c\n"
else
print "other\n"
end
# Affiche "other"
Notons ici que le mot-clé break
n'est pas utilisé.
En effet, en Ruby, il est implicite et par conséquent, un seul bloc peut être exécuté.