Construções simples

Vamos explorar algumas construções simples disponíveis no Ruby. O exemplo abaixo p014constructs.rb ilustra as construções if e else. Por convenção, if e while não necessitam de parênteses.

 1 # No Ruby nil e false são interpretados como false (falso),
 2 # todo o restante (incluindo true e 0) siginificam true (verdadeiro)
 3 # nil é um objeto real
 4 # if else end (se, caso contrário, fim)
 5 var = 5
 6 if var > 4
 7   puts "A variável é maior que 4"
 8   puts "Posso ter múltiplas declarações aqui"
 9   if var == 5
10     puts "É possível ter if else aninhados"
11   else
12     puts "Muito legal"
13   end
14 else
15   puts "A variável não é maior que 4"
16   puts "Posso ter múltiplas declarações aqui"
17 end

Um exemplo do uso do elsif está no programa p015elsifex.rb como mostrado abaixo:

 1 # p015elsifex.rb
 2 # exemplo elseif
 3 
 4 # Exemplo original
 5 puts "Olá, qual é o seu nome?"
 6 STDOUT.flush
 7 nome = gets.chomp
 8 puts 'Olá, ' + nome + '.'
 9 
10 if nome == 'Satish'
11     puts 'Que nome legal!!'
12 else
13     if name == 'Sunil'
14         puts 'Outro nome legal!'
15     end
16 end
17 
18 # Exemplo modificado com elsif
19 puts "Olá, qual é o seu nome?"
20 STDOUT.flush
21 nome = gets.chomp
22 puts 'Hello, ' + nome + '.'
23 
24 if nome == 'Satish'
25     puts 'Que nome legal!!'
26 elsif nome == 'Sunil'
27         puts 'Outro nome legal!'
28 end
29 
30 # Outra modificação
31 puts "Olá, qual é o seu nome?"
32 STDOUT.flush
33 nome = gets.chomp
34 puts 'Olá, ' + nome + '.'
35 
36 # || é o operador lógico OU
37 if nome == 'Satish' || nome == 'Sunil'
38     puts 'Que nome legal!!'
39 end

Alguns operadores condicionais comuns são: ==, !=, >=, <=, >, <

O unless (ao menos), como uma declaração ou modificador, é o oposto do if: ele executa o código somente se uma expressão associada é interpretada como nil ou falso. O construtor ruby unless começa com unless e termina com end.
O corpo é o texto entre ambos.

1 unless ARGV.length == 2
2   puts "Uso: programa.rb 23 45"
3   exit
4 end

No programa acima, o corpo é executado ao menos que o número de elementos no array seja igual a 2 (o que significa que ambos
os argumentos foram dados). O método Kernel.exit termina seu programa, retornando um valor de estado para o sistema operacional.

Loops como o while também estão disponíveis. O exemplo abaixo ilustra o uso do while.

1 # Loops - imprime números de 0 a 9
2 var = 0
3 while var < 10
4   puts var.to_s
5   var += 1
6 end

O condicional ?: (ou operador ternário)

Como uma alternativa concisa aos operadores if/else podemos usar o operador condicional ou ternário ?:. É o único operador ternário (com três operandos) no Ruby. Ele tem a seguinte estrutura básica:

1 (condição) ? (resultado se a condição é verdadeira) : (resultado se a condição é falsa)

O primeiro operando aparece antes do ponto de interrogação. O segundo operando aparece entre o interrogação e os dois pontos. E o terceiro operando aparece depois dos dois pontos. O ponto de interrogação deve aparecer na mesma linha que o primeiro e o segundo argumentos e os dois pontos devem aparecer na mesma linha que o segundo argumento. O operador ?: sempre avalia seu primeiro operando (a condição). Se a condição é qualquer coisa diferente de false ou nil, o valor da expressão é o valor do segundo operando. Caso contrário, se o primeiro operando for false ou nil, então o valor da expressão é o valor do terceiro operando. O operador ?: age como uma declaração if/then/else compacta.
Vamos ver um exemplo:

1 idade = 15
2 # Falaremos da classe Range (intervalo) mais tarde
3 # terá como saída adolescente
4 puts (14...20).include?(idade) ? "adolescente" : "não é adolescente"

O operador ternário pode ser útil também para atribuições condicionais:

1 idade = 23
2 pessoa = (14...20).include?(idade) ? "adolescente" : "não é adolescente"
3 puts pessoa # => "não é adolescente"

Modificadores de instrução

Os modificadores de instrução do Ruby representam um atalho útil no caso em que o corpo de uma instrução if ou while é uma única
expressão. Apenas escreva a expressão, seguida por if ou while e então a condição. Aqui, por exemplo, temos uma simples instrução if.

1 puts "Os registros pararao agora" if participantes > 2500

Expressões case

Esta forma é bastante próxima a uma série de instruções if: ela permite que você liste uma série de condições e execute uma instrução correspondente a primeira que for verdadeira. Por exemplo, anos bissextos devem ser divisíveis por 400, ou divisíveis por 4 e não por 100. Além disso, lembre-se que o case retorna o valor da última expressão executada.

1 ano = 2000
2 bissexto = case
3        when ano % 400 == 0 then true
4        when ano % 100 == 0 then false
5        else ano % 4   == 0
6        end
7 puts bissexto
8 # a saida é: true

nil é um objeto

No Ruby, nil (que representa “nulo”) é um objeto real. Você pode chamar métodos no nil, assim como em qualquer outro objeto. Você pode adicionar métodos ao nil, assim como faz para outros objetos.

nil e false são interpretados como false (falso), todo o restante (incluindo true e 0) são true (verdadeiro).

A diferença entre FALSE e NIL

Embora ainda tenhamos que falar sobre classes, aqui estão algumas informações adicionais. nil e false não são a mesma coisa.
Ambos têm valor falso mas são objetos diferentes e lembre-se que tudo em Ruby é um objeto. Veja o seguinte programa:

 1 # Podemos determinar a classe de nosso objeto ou seu ID único de objeto
 2 # NIL é um sinônimo para nil
 3 puts NIL.class # NilClass
 4 puts nil.class # NilClass
 5 puts nil.object_id # 4
 6 
 7 # FALSE é um sinônimo para false
 8 puts FALSE.class # FalseClass
 9 puts false.class # FalseClass
10 puts false.object_id # 0

 

Logo do Guru-SP

Este material tem como base o tutorial do RubyLearning.com de Satish Talim e foi traduzido por membros do GURU-SP com a permissão do autor.

Ajude o RubyLearning participando em algum dos cursos pagos ou fazendo uma doação para o projeto

Voltar para o índice