Blog do faraohh

Assuntos diversos, inclusive tecnologia.

Linguagem de programação Ruby

with one comment


Criamos uma lista de discussão para trocarmos ideia/experiências sobre desenvolvimento, linguagens de programação e frameworks quem quiser participar acesse [http://groups.google.com.br/group/godev] abaixo replico uma de minhas postagens.

Olá a todos,

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/

Written by Marcello Moura

30/08/2010 às 14:42

Publicado em geral

Tagged with ,

Uma resposta

Subscribe to comments with RSS.


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: