Aprenda Ruby

  • Página Inicial
  • Contato!
  • Tudo sobre Ruby Parte 1!
  • Tudo sobre Ruby Parte 2!
  • Tudo sobre Ruby Parte 3!
  • Tudo sobre Ruby Parte 4!
  • Tudo sobre Ruby Parte 1

    Primeiros Passos em Ruby

    Basicamente, a saída padrão do Ruby é com o puts, dessa forma:

    
    puts "Olá, Mundo!"
    
    

    Os comentários são inseridos dessa forma:

    
    # Comentário de uma linha
    
    =begin
    Comentário
    de
    várias
    linhas! 
    =end
    
    

    Veja a declaração dos tipos mais comuns (inteiro, float, string e booleano):

    
    numero = 50
    real = 9.85
    letra = "A"
    frase = "Isso é uma String"
    logico = true
    
    puts numero
    puts real
    puts letra
    puts frase
    puts logico
    
    

    No Ruby, todos os tipos são classes, onde a classe pai é a Object, de onde todas as outras classes herdam. Os tipos Integer e Float são filhos da classe Numeric. Temos também os tipos String, Symbols e outros. Para ver os tipos das variáveis, digite .class na variável desejada.

    Para pegar dados da linha de comando, usamos o gets, dessa forma:

    
    print "Digite um número inteiro: " # O print não pula uma linha
    numero = gets.to_i # Converte pra inteiro
    
    print "Digite um número real: "
    real = gets.to_f # Converte para real
    
    print "Digite uma única letra: "
    letra = gets[0] # Pega só o primeiro caractere
    
    print "Digite uma frase: "
    frase = gets.strip # Pega a string pura, o strip é pra remover espaços
    
    puts numero
    puts real
    puts letra
    puts frase
    
    

    Só pra complementar, a conversão de strings é usando a propriedade to_s.

    PS: Podemos rodar o Ruby no terminal interativamente digitando irb. Ele também permite operações aritméticas diretas, como digitar 10 + 5.

    Strings e Aspas

    Existem várias formas de declaras strings em Ruby, veja abaixo:

    
    d1 = "Isto é uma string de aspas duplas!"
    d2 = %Q{Isto é uma string de aspas duplas!}
    d3 = %{Isto é uma string de aspas duplas!}
    d4 = %/Isto é uma string de aspas duplas!/
    
    s1 = 'Isto é uma string de aspas simples!'
    s2 = %q{Isto é uma string de aspas simples!}
    
    puts d1
    puts d2
    puts d3
    puts d4
    puts s1
    puts s2
    
    

    A concatenação é feita usando + ou << (este último altera variáveis), como podem ver:

    
    preco = 10.99
    
    puts "O produto custa " + '%.2f' % preco + "."
    # Pode ser << no lugar do +, mas este altera a variável
    
    

    Nas strings de aspas duplas, podemos colocar variáveis, números e outros componentes de códigos com interpolações, como por exemplo:

    
    preco = 10.99
    
    puts "O produto custa #{'%.2f' % preco}."
    
    

    Como visto acima, podemos formatar usando máscaras, são praticamente as mesmas usadas em C (%s para strings, %d para inteiro e %f para float).

    
    puts "#{'%s' % 'String'}"
    puts "#{'%d' % 50}"
    puts "#{'%f' % 9.85}"
    
    

    E também podemos usar métodos do objeto da string, como estes:

    
    texto = "Exemplo de String"
    
    puts texto.upcase # Deixa tudo em letra maiúscula
    puts texto.downcase # Deixa tudo em minúscula
    puts texto.reverse # Inverte o texto
    puts texto.concat(" com mais algo") # Concatena texto
    puts texto.split # Divide a string
    puts texto.gsub!("String", "Texto") # Substituí algo
    
    

    Isso serve pra criar hashs de senhas:

    
    require "digest/md5"
    
    senha = "123"
    
    md5 = Digest::MD5.new
    
    crip = md5.hexdigest senha
    
    puts crip
    
    

    PS: Podemos usar também a opção SHA1 para criar hashs.

    O Digest é uma gem do Ruby, falaremos delas mais pra frente.

    Operações Aritméticas

    Basicamente, os operadores são os mesmos de outras linguagens, como por exemplo:

    
    print "Digite o primeiro número: "
    n1 = gets.to_i
    
    print "Digite o segundo número: "
    n2 = gets.to_i
    
    soma = n1 + n2
    subs = n1 - n2
    mult = n1 * n2
    divi = n1 / n2
    rest = n1 % n2
    
    puts "#{n1} + #{n2} = #{soma}."
    puts "#{n1} - #{n2} = #{subs}."
    puts "#{n1} * #{n2} = #{mult}."
    puts "#{n1} / #{n2} = #{divi}."
    puts "#{n1} % #{n2} = #{rest}."
    
    

    PS: Da forma acima, ele retornará a divisão inteira. Para divisões reais, faça a conversão, dessa forma:

    
    divi = n1.to_f / n2.to_f
    
    

    A ordem de precedência matemática é a mesma das demais linguagens (primeiro parênteses, depois multiplicações e divisões incluindo restos, e depois adições e subtrações).

    PS: Podemos também colocar atribuição com algum valor, como por exemplo num += 2 ou num -= 3, que faça a atribuição e a operação juntos no mesmo comando. Concatenação com atribuição também pode ser colocada com o +=.

    Veja um exemplo pra analisar notas:

    
    print "Digite a primeira nota: "
    nota1 = gets.to_f
    
    print "Digite a segunda nota: "
    nota2 = gets.to_f
    
    media = (nota1 + nota2) / 2
    
    puts "A média das notas é de #{'%.1f' % media}."
    
    

    Mas diferente de outras linguagens, a biblioteca Math não faz todas as operações como potências e arredondamentos, nós fazemos isso em Python usando métodos do próprio objeto (apenas as raizes são calculadas pelo Math), por exemplo:

    
    print "Digite o primeiro número: "
    n1 = gets.to_f
    
    print "Digite o segundo número: "
    n2 = gets.to_f
    
    puts "O número absoluto de #{n1} é #{n1.abs}."
    puts "A raiz quadrada de #{n1} é #{Math.sqrt(n1)}."
    puts "A raiz cúbica de #{n1} é #{Math.cbrt(n1)}."
    puts "O quadrado de #{n1} é #{n1 ** 2}."
    puts "O cubo de #{n1} é #{n1 ** 3}."
    puts "#{n1} elevado à #{n2} é #{n1 ** n2}."
    puts "O número #{n1} arredondado pra cima é #{n1.ceil}."
    puts "O número #{n1} arredondado pra baixo é #{n1.floor}."
    puts "O número #{n1} arredondado pro mais próximo é #{n1.round}."
    puts "Número aleatório entre #{n1} e #{n2}: #{rand(n1..n2)}"
    
    

    Operadores Lógicos e Relacionais

    No Ruby também temos os operadores lógicos e relacionais. São os mesmos das linguagens C-like. Veja um exemplo de uso deles:

    
    print "Digite sua idade: "
    idade = gets.to_i
    
    if idade >= 18 && idade < 70 then
        puts "Voto Obrigatório!"
    elsif idade >= 16 && idade < 18 || idade >= 70 then
        puts "Voto Opcional!"
    else
        puts "Voto Proibido!"
    end
    
    

    Outro exemplo:

    
    print "Você Fuma? [S/N] "
    opc = gets.strip[0]
    
    logico = (opc == "S" || opc == "s") # Retorna um booleano
    
    res = !logico ? "não fuma" : "fuma"
    
    puts "Ele #{res}!"
    
    

    Veja os operadores Relacionais:

    Operador Aritmético Significado
    == Igualdade.
    != Diferente.
    > Maior.
    < Menor.
    >= Maior ou Igual.
    <= Menor ou Igual.

    Os operadores lógicos são usados:

    Operador Operação Significado
    && AND E
    || OR Ou
    ! NOT Não