As aventuras de programador em busca do Ruby – Parte 1
Já faz um tempo que não posto nada, aproveitei o tempo vago nos últimos dias para aprender um nova linguagem de programação –algo que me dá uma grande satisfação–.
Baixei vários livros de diversas linguagens, mas os papos de corredor me levaram a escolher Ruby.
Apesar de programar em PHP por alguns anos, já estava desacostumado com linguagens Dinamicamente Tipadas, gosto muito de Java, estou até devendo escrever algo aqui no blog, mas com certeza ele me acostumou muito mal!!!
Pois bem, vamos parar de história e começar a diversão!
A escolha do livro 
Essa parte foi bem difícil, porém, não menos interessante… Iniciei a leitura com o livro indicado por um amigo de trabalho o bem recomendado The Ruby Way, porém achei a leitura um tanto densa e longa (888 páginas assustam), então parti para um livro mais barato e menor, porém, não menos completo e interessante The Ruby Programming Language. O livro é ótimo e um dos seus autores é nada mais nada menos que o criador do Ruby Yukihiro Matsumoto – Matz –acho que o cara manja um pouquinho!–.
A leitura deste livro é bem tranqüila e eu estou gostando muito, recomendo, e enquanto for lendo vou compartilhar os ensinamentos adquiridos aqui no site, assim eu fixo o aprendizado e compartilho com a comunidade!
Vou deixar bem claro que não se trata de uma tradução, poderia talvez chamar isto de um “resumo público”, mas ainda assim, recomendo que comprem e leiam o livro.
Vou dividir a estrutura igual ao livro, porém vou iniciar a série de posts a partir do capitulo 2. Motivo? Quero que você tenha a mesma surpresa que eu tive quando ler o capitulo 1!
Estrutura e Execução de Programa Ruby
Estrutura Léxica
Comentários
# isto é um comentário de uma linha inteira puts "Alan" # isto é um comentário regex = /#[A-Za-z0-9] isto eh um expressão regular/ # isto é outro comentário
Comentários de múltiplas linhas deve ser feito assim:
# # Desta forma é possível fazer um comentário de várias linhas # No Ruby não há uma forma de comentar semelhante a essa no Java /* */ #
Documentos Embutidos
No Ruby há outra forma de inserir comentários multi linhas. Basta iniciar o bloco comentado por =begin e termina-lo com =end. Tudo que estiver entre =begin e =end será ignorado pelo interpretador, mas lembre-se, deve ter no minimo um espaço em branco após o =begin.
=begin isto é um comentário multi linha tudo que esta aqui será ignorado pelo o interpretador. =end
Literais
No Ruby há valores literais, aqueles que são inseridos diretamente no código, podem ser uma String, um número inteiro, ponto flutuante, expressão regular, etc., como o exemplo a seguir:
1 # inteiro 1.0 # ponto flutuante "texto" # string /regex/ # expressão pessoal
Operadores
Há vários operadores no Ruby, porém vou falar mais sobre eles mais na frente (estão no capitulo 4 do livro rsrs), tem várias informações interessantes para falar sobre eles depois.
Identificadores
Identificadores são simplesmente um nome no Ruby e são usados para representar nomes de variáveis, métodos, Módulos, Classes e outros. Podem ser escritos por letras, números e underscore, porém eles não podem iniciar com um número.
Identificadores não podem iniciar por operadores exceto +, – ,|| e outros que serão descritos.
Os identificadores que iniciarem com uma letra maiúscula serão considerados constantes (passível que gerar um alerta, caso houver tentativa de alteração de seu valor). Classes e Módulos devem iniciar por uma letra maiúscula.
Ex:
a a2 a_2 a2b _var PI # constante class Pessoa # define a classe pessoa end
O ruby é uma linguagem case sensitive, o identificador NOME é diferente de nome ou NoMe, lembre-se disso.
Outros usos de identificadores
No Ruby alguns identificadores tem um valor especial e são usados no inicio e no fim dos identificadores, vou mostrar essa parte com exemplos:
$var_global # como no Perl, o Ruby define variáveis globais com $ @var_instance # atributos de objeto são definidos com @ na frente do identificador @@var_class # atributos de escopo de classe recebem @@ na frente obj.respond_to? # métodos que retorno um boolean por convenção recebem um ? no final do identificador "nome".upcase! # métodos que devem ser usados com cuidado recebem um ! nome final pessoa.nome="josé" # métodos de atribuição deveria receber = no final... vamos falar mais disso depois
Palavras Chave
As seguintes palavras são chaves e tem um significado especial para Ruby.
__LINE__ case ensure not then __ENCODING__ class false or true __FILE__ def for redo undef BEGIN defined? if rescue unless END do in retry until alias else module return when and elsif next self while begin end nil super yield break
E mais essas 3 que quando aparecem no inicio da linha tem um significado especial para o parser.
=begin =end __END__
Apesar de serem palavras chave, se estas palavras forem precedidas de @, @@, $ ou se usadas em nomes de métodos o código será interpretado sem erro (isto se deve a flexibilidade do interpretador do Ruby) porém o uso dessas palavras irá gerar um código de difícil interpretação, não acha?
Alguns comportamentos e características do Ruby estão ligados aos métodos de Kernel, Object, Module e Class. Como boa prática seria interessante tratar seus métodos como palavras reservadas.
# Estes métodos parecem palavras chaves ou reservadas at_exit catch private require attr include proc throw attr_accessor lambda protected attr_reader load public attr_writer loop raise # Estes são normalmente usados como funções globais Array chomp! gsub! select Float chop iterator? sleep Integer chop! load split String eval open sprintf URI exec p srand abort exit print sub autoload exit! printf sub! autoload? fail putc syscall binding fork puts system block_given? format rand test callcc getc readline trap caller gets readlines warn chomp gsub scan # E estes são usado como métodos de Object allocate freeze kind_of? superclass clone frozen? method taint display hash methods tainted? dup id new to_a enum_for inherited nil? to_enum eql? inspect object_id to_s equal? instance_of? respond_to? untaint extend is_a? send
Espaços em branco
A sintaxe do código Ruby é bem flexível, porém devemos ter alguns cuidados com isso. O uso de espaços em branco pode mudar a interpretação do código e causar resultados inesperados.
Ex:
avalia(3+1)+1 # executa o método avalia e adiciona 1
Outro exemplo:
# O Interpretador assume que o "(" (parenteses) foi omitido e intepreta (3+1)+1 e
# passa o resultado como argumento para o método avalia.
avalia (3+1)+1
Existem outras situação que serão mostradas nos post seguintes.
Estrutura Sintática
Neste capitulo do livro é introduzido temas relacionados a simples expressões a até complexos módulos.
No Ruby a unidade básica é a expressão, desde um valor literal que é uma expressão primária ou expressões mais complexas que usam palavras chaves como nil, self, true, false.
[:a,:b,:c] # array de símbolos ["nome" => "José", "endereco" => "Rua Amazonas"] # declaração literal de um hash 5 # expressão primária x = x+1 # atribuição
Assim como em outras linguagens de programação, no Ruby composições de declarações formam declarações (statement) conforme a seguir:
if x > 1
puts "#{x} é maior que 1"
else
puts "#{x} é menor ou igual a 1"
end
Blocos
Há duas maneiras de criar blocos no Ruby, e esta forma de construção é extremamente prático.
10.times { puts "Olá mundo 10 vezes, só para confirmar!" }
1.upto 10 do |n| puts "o número atual é #{n}" end
Mais informações sobre os blocos serão mostradas nos próximos posts.
Bem então é isso, a aventura não acabou, muito pelo contrário, ela está apenas iniciando.
Primeiras impressões
As primeiras impressões com o Ruby foram as melhores possíveis, acho que de todas as linguagens que aprendi essa foi a me mais me identifiquei até hoje, superou até o Python o qual eu não brinco já há algum tempo (tenho um colega que discordará dessa frase).
Pois bem, só posso concluir esse post dizendo, você deveria experimentar o ruby agora!!!

