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é.