Estruturas de controle
Ruby tem as estruturas de controle comuns à maioria das linguagens mais conhecidas. São elas:
if .. [then] # if tradicional .. [elsif .. [then] ..] [else ..] end unless .. [then] # negação do if (a menos que ...) .. [else ..] end case .. # execução por casos (comparação com o operador ===) [when .. [,..] [,..] [then] ..] [else ..] end while .. [do] # while tradicional (faça enquanto ...) .. end until .. [do] # negação do while (até que ...) .. end for i in .. [do] # iteração por uma lista de objetos .. end
Além disso, if, unless, while e
until podem ser usadas como modificadores, da seguinte forma:
puts "oi!" if bem_vindo expulsa_pessoas until recinto.vazio?
Estas estruturas de controle retornam o valor da última expressão avaliada por elas.
Há também BEGIN e END, que recebem blocos, que
serão executados respectivamente antes e depois da execução do restante do
programa. Múltiplos blocos podem ser definidos, mas apenas no nível mais externo
do arquivo (fora que quaisquer classes ou módulos). Blocos BEGIN
são executados na ordem de definição. Blocos END são executados na
ordem inversa de definição.
# Obs.: isto não funciona no Irb
puts "aie"
END { puts "finalizando" }
BEGIN { puts "inicializando" }
Controle de laços e iteradores
Em laços e iteradores, break serve para sair do laço/bloco mais
interno, next começa imediatamente a próxima iteração,
redo reinicia a iteração atual, e retry reinicia a
iteração reavaliando a condição (laços) ou refazendo a atribuição de argumentos
(iteradores).