Então vamos? Para organizar melhor as coisas, primeiro criei uma outra
thread para fins de histórico de pesquisa, acredito que outros podem
acha na internet através do assunto, depois vinculo como referência e
motivação para discutimos o proposto no assunto do email anterior pelo
nosso amigo Prof. Ole. [0]
Como sugeri vou abordar a Linguagem Ruby e o Framework Rails, acredito
que a maioria está familiarizada com os jargões técnicos da
informática e não me reterei a eles, gosto de referenciar tudo no
final do texto através dos marcadores numéricos que uso entre
colchetes, logo os mais atenciosos podem consultá-los sem ter que
atrapalhar a leitura superficial e não quero convencer ninguém de usar
essa linguagem/framework, estarei apenas mostrando seus pontos forte e
porque escolhi usá-la em minha vida profissional.
Vamos ao que interessa, o Ruby é uma linguagem de programação criada
por Yukihiro Matsumoto, também conhecido como Matz, japonês nascido em
14 Abril de 1965 é casado e tem quatro filhos, uma frase muito
conhecida de Matz é:
"Ruby is simple in appearance, but is very complex inside, just like
our human body." [2]
Que em uma tradução livre é "Ruby é simples em sua aparência, mas
muito complexa por dentro, assim como nosso corpo humano.", e na
prática é isso que vivemos, Ruby é dinamicamente tipada ou seja não
precisamos declarar e alocar variáveis como fazemos na linguagem C,
essa abstração permite programar com muito mais facilidade sem nos
preocuparmos com a parte dura, ou seja, nos preocupamos com o negócio
e não em alocar memória para o recurso e toda aquela confusão que
fazemos com ponteiros...
Basicamente temos as seguintes definições:
var poderia ser uma variável local.
@var é uma variável de instância.
$var é uma variável global.
Ruby foi iniciado em 24 de fevereiro de 1993 e ocupou a décima posição
no rank Tiobe [3] em 2009, perdeu 2 posições em 2010, porém não perdeu
em outras questões que iremos abordar agora. Em Ruby tudo é objeto
logo seria redundante dizer que a linguagem é Orientado a Objetos [4],
orientação a objetos é um paradigma de programação que imita (ou
simula) o mundo real permitindo assim abstrair os conceitos que temos
puramente intrínsecos para um mundo computacional, então podemos dizer
mais ainda, podemos dizer que Ruby é orientada a humanos, vamos
novamente ao que Matz disse:
“I wanted a scripting language that was more powerful than Perl, and
more object-oriented than Python3.”
"Eu queria uma linguagem que fosse mais poderosa que Perl e mais
orientada a objetos que Python3." [5]
Aqui eu acabo me esbarrando onde não queria mas como não foi eu que
disse então passemos adiante. :-) Isso também quer dizer que se eu
declarar um número ele não é necessariamente um inteiro ou um ponto
flutuante, ele é um objeto que posso aplicar métodos sobre ele, algo
como:
3.times { puts "Eu amo Ruby!" }
Eu obtenho:
Eu amo Ruby!
Eu amo Ruby!
Eu amo Ruby!
E isso é uma influência de Smalltalk [6], provando que Ruby é uma
linguagem realmente dinâmica em todos os sentidos, apesar disso é uma
linguagem extremamente flexível que nos tira as dificuldades, vou
tentar demonstrar essa facilidade:
a = 1
b = 2
a,b = b,a #=> a = 2 e b = 1
O que está a frente do #=> é o valor que as variáveis assumem após
aquela linha ou seja, troco os valores das variáveis de uma maneira
simples e elegante, se me perguntarem: Qual o maneira que outras
linguagens fazem isso? Tradicionalmente poderia dizer que: 1) cria-se
uma variável temporária para armazenar o valor de 'b'; 2) logo 'b'
recebe 'a'; e por fim 3) 'a' recebe o valor da variável temporária. Eu
ainda poderia simplificar mais atribuindo os falores iniciais das
variáveis em uma só linha assim:
a,b = 1,2
Reparem também que não existe o ponto_e_vírgula no final das linhas,
será porque hein? Atire uma pedra em mim quem nunca passou por esse
problema.
Quando se trata somente do básico dizemos do arroz com feijão então
que tal uma salada? Pois é vamos falar de Blocks, Blocks são
inspirando em linguagens funcionais como Lisp, então voltamos ao
exemplos [7]:
(1..4).collect {|i| i*i } #=> [1, 4, 9, 16]
(1..4).collect { "cat" } #=> ["cat", "cat", "cat", "cat"]
Reparem no resultado após o sinal #=> no primeiro código o que está
entre parênteses é laço que vai do 1 até o 4, agora pulamos para o que
está entre chaves, o que está entre as barras de pé (pipe line) é a
variável que receberá o valor cada vez que ele executar, logo depois
dizemos para i multiplicar i e ele me retorna um vetor do resultado de
1*1, 2*2, 3*3 e 4*4, para mim é fazer muito e falar pouco!
Antes que me ataquem Ruby implementa herança múltipla através de mixin
[8], e as coisas não param por aí ainda temos:
* Capacidade de tratamento de excepções, tal como o Java ou Python,
para facilitar o tratamento de erros.
* Garbage Collector para todos os objectos Ruby.
* Escrever extensões C em Ruby é mais fácil do que em Perl ou Python,
com uma API refinada para chamar Ruby desde o código C.
* O Ruby pode carregar bibliotecas de extensão (extension libraries)
dinamicamente se o Sistema Operacional permitir.
* O Ruby tem um sistema de threading independente do Sistema
Operacional. Portanto, para todas as plataformas nas quais o Ruby
roda, temos multithreading, independentemente do Sistema Operacional
suportar ou não, até em MS-DOS temos multithreading!
* O Ruby é altamente portável: é desenvolvido principalmente em
ambiente GNU/Linux, mas trabalha em muitos tipos de ambientes UNIX,
Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2, etc.
Empolguei e acabei falando muito sobre Ruby, vou deixar o próximo para
falar de Rails, espero que tenham gostado.
Abraços.
[0] http://groups.google.com.br/group/godev/browse_thread/thread/f58fe51f41e22035
[1] http://en.wikipedia.org/wiki/Yukihiro_Matsumoto
[2] http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/2773
[3] http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
[4] http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos
[5] http://linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html
[6] http://www.smalltalk.org/versions/GNUSmalltalk.html
[7] http://ruby-doc.org/core/classes/Enumerable.html#M003128
[8] http://ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html
[9] http://www.ruby-lang.org/en/about/
--
Marcello Henrique
Blog - http://faraohh.wordpress.com
Associação Software Livre de Goiás (www.aslgo.org.br)
Cercomp - UFG (www.cercomp.ufg.br)