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
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"
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
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
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).
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
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