Ruby é uma linguagem de programação que pode ser usada no desenvolvimento web, para processar textos, criar jogos, e como parte de uma ferramenta de desenvolvimento web muito popular, chamada Ruby on Rails. Ruby foi desenvolvido por Yukihiro “Matz” Matsumoto em 1995 como uma linguagem que enfatiza as necessidades humanas ao invés das necessidades do computador. É uma linguagem de alto nível (parece muito com a leitura e escrita em inglês), interpretada (não precisa de um compilador para codificar e executar os programas) e orientada a objetos (permite que os usuários manipulem estruturas de dados chamadas objetos para criar e executar programas).
As variáveis podem ser basicamente do tipo número, string ou valores booleanos. As operações matemáticas são realizadas com os sinais tradicionais de outras linguagens. Para imprimir uma mensagem na tela pode ser o “print” ou o “puts” (que adiciona uma nova linha em branco após a impressão).
Tudo em Ruby é um objeto, que possui certas habilidades internas chamadas métodos. Por exemplo, o método “gets” obtém os dados a partir da entrada do usuário, enquanto que “chomp” remove a linha extra criada pelo “puts”. Cada método é chamado em uma linha separada ou de forma encadeada, assim: “name.method1.method2.method3”. A interpolação de strings consiste em substituir o trecho #{variavel} pelo valor da variável.
Veja um exemplo aplicando o que foi visto até aqui:
# Linha de comentário resultado = 2*3 puts 'O resultado da minha conta é ' + resultado print "De que estado você é?" state = gets.chomp state.upcase! puts "Você é de #{state}."
Uma variável local é declarada normalmente. Uma variável de instância é declarada com um “@” no nome. Uma variável de classe é declarada com “@@”, e uma variável global é declarada com “$”. Variáveis que iniciam com uma letra maiúscula são consideradas constantes.
Fluxo de controle
A instrução if de Ruby recebe uma expressão e se for verdadeira (true), executa um bloco de ações; se for falso, pula e pode executar outro bloco (else e elsif, para mais de duas opções). Quando termina, seu fim deve ser informado com “end”. A indndentação de blocos não é obrigatória. O inverso desse método é o unless, que executa uma ação se a expressão for falsa.
x = 10 y = 11 if x < y puts "x é menor que y!" elsif x > y puts "x é maior que y!" elsif x == 3 puts "x é igual a 3!" else puts "x é igual a y!" end problem = false print "Tudo certo!" unless problem
Os operadores lógicos (ou booleanos) são: e (&&), ou (||), e não (!). Com &&, ambas as comparações, a esquerda e a direita, devem se avaliadas como verdadeiras true para que a instrução retorne true; se o lado esquerdo não retornar true nem adianta verificar o lado direito. Com ||, um lado ou o outro deve ser verdadeiro. O operador não (!) faz com que valores verdadeiros (true) sejam falsos (false), e vice-versa. Expressões entre parênteses sempre são avaliadas antes de qualquer coisa que estiver fora.
Iterações
O laço verifica se uma certa condição é verdadeira, e while (enquanto) ela for, o laço continua sendo executado. Assim que a condição deixa de ser verdadeira, o laço para. O “contrário” do laço while é o laço until (até que). Quando se sabe quantas iterações vão ser realizadas, pode-se usar o for. Nesse caso, se usar três pontos no intervalo exclui-se o número final na contagem; se usar dois pontos, vai incluir o maior número do intervalo.
counter = 1 while counter < 11 puts counter counter += 1 # ou counter = counter + 1 end # A mesma instrução acima, agora usando for #"Para a variável num no intervalo de 1 a 10, faça o seguinte" for num in 1..10 puts num end # A mesma instrução usando loop i = 11 loop do i -= 1 print "#{i}" break if i <= 0 end
O método loop invoca um bloco de código repetidamente. A palavra reservada next pode ser usada para pular alguns passos no laço. No exemplo acima, poderia ser incluída no loop a linha “next if i % 2 == 0” para não imprimir os números pares (resto da divisão por dois igual a zero).
Em Ruby, a estrutura de repetição for é apenas açúcar sintático para acessar o método each. Esse método obedece à seguitne sintaxe: “object.each { |item| #Tarefa }” ou “object.each do |item| #Tarefa end”. Veja um exemplo:
array = [1,2,3,4,5] array.each do |x| x += 10 print "#{x}" end
O método .times realiza a tarefa especificada um número x de vezes, através da seguinte sintaxe: “x.times { #Tarefa }”.
Arrays e hashes
Um array é simplesmente uma lista de itens entre colchetes – um mesmo array pode ter strings, inteiros e floats, por exemplo. Todo elemento de um array tem um índice, começando por 0, que permite acessar seus elementos diretamente. Usando o array mencionado acima, o elemento array[2] é o número 3. Se quiser incluir um valor no fim do array, use a sintaxe “array << 22" para incluir o valor 22. Arrays de arrays são chamados de arrays multidimensionais - por exemplo s = [["ham", "swiss"], ["turkey", "cheddar"], ["roast beef", "gruyere"]].
Se não quiser usar números como índices, existe uma estrutura alternativa chamada hash, que basicamente é uma coleção de pares chave-valor. As chaves devem ser únicas, mas os valores podem se repetir. Veja um exemplo:
my_hash = Hash.new # definição de hash vazia, não obrigatório my_hash = { "nome" => "Nino", "idade" => 300, "fome?" => true } my_ash.each do |item, valor| puts "#{item}: #{valor}" end
O laço imprime os valores das variáveis separados por dois pontos (:). Se tentar acessar uma chave que não existe, o Ruby vai retornar o valor especial nil (froma de dizer “nada”).
Símbolos
Símbolos sempre começam com dois pontos (:) e são primeiramente usados como chaves hash (já que não podem ser mudados depois de criados e apenas uma única cópia de qualquer símbolo existe em um dado momento, então eles economizam memória) ou para referenciar nomes de métodos. Eles devem ser nomes válidos de variáveis Ruby, então o primeiro caractere depois dos dois pontos deve ser uma letra ou um caractere sublinhado (_); depois disso, qualquer combinação de letras, números e caracteres sublinhados é permitida. Veja esse exemplo de definição de uma variável como um símbolo e como convertê-lo de formato:
my_first_symbol = :teste # Transformar o símbolo teste na string teste :teste.to_s # Transformar a string teste no símbolo teste "sasquatch".to_sym
Métodos
Método é um trecho de código reutilizável escrito para desempenhar uma tarefa específica em um programa. São definidos usando a palavra reservada def (abreviação de “define”). Um método que recebe argumentos pode ser definido da seguinte forma:
def square(n) puts n ** 2 end
e ser chamado na rotina principal assim (passando o argumento 12 no parâmetro n):
square(12)
Argumentos splat são precedidos por *, que sinaliza “não sei quantos argumentos serão passados, mas pode ser mais de um.”
Para finalizar, veja o script “papagaio.rb” que imprime uma string repetida 3 vezes em um arquivo e realiza a leitura do mesmo, imprimindo seu conteúdo na tela:
# Abertura do arquivo para escrita e fechamento automático File.open('arquivo.txt', 'w') do |arquivo| for i in (1..3) do arquivo.puts 'Monolito Nimbus!' end end # Leitura do arquivo linha por linha e impressão na tela File.readlines('arquivo.txt').each do |linha| puts linha end
Fontes