Linguagens dinâmicas

junho 19, 2009 às 10:52 pm | Publicado em Desenvolvimento, Outros, ruby | 3 Comentários

Linguagem dinâmica, também conhecida como linguagem de scripting, ainda é algo obscuro para a grande maioria dos desenvolvedores. Entender e aplicar seus conceitos é algo que pode causar espanto e muitas dúvidas. Porém, é importante conhecer as vantagens e destantagens deste tipo de linguagem, saber quando é válido ou não a sua utilização no desenvolvimento de sistemas.

Estas linguagens são linguagens de alto nível, a grande maioria com tipagem dinâmica e com um Protocolo de Meta-Objeto (Meta-Object Protocol), ou MOP. Estas duas características proporcionam muitas facilidades e um enorme poder no desenvolvimento. Porém, quando não usadas com cuidado, podem causar grandes problemas.

Tipagem dinâmica é muito criticada pela comunidade de desenvolvedores, principalmente porque “escondem” alguns erros em tempo de desenvolvimento (compilação). Linguagens dinâmicas não são compiladas, portanto tipagem dinâmica faz todo sentido. Porém, existe algumas linguagens dinâmicas que utilizam de tipagem estática, como Groovy, para utilizar de técnicas como overloading de métodos e de construtor.

Meta-Object Protocol sem dúvida é a grande vantagem das linguagens dinâmicas. Em linguagens de programação como java, os objetos armazenam seus métodos e seus atributos. Com MOP, cada objeto tem um meta objeto associado e é no meta objeto que ficam os métodos. O objeto é responsável por armazenar seu estado. A grande vantagem é a possibilidade de alterar o meta objeto em tempo de execução e adicionar novas funcionalidades nos objetos.

Com o surgimento do Ruby e do framework Ruby on Rails, as linguagens dinâmicas vem ganhando força. Muitas empresas que utilizam metodologias agéis, estão aderindo a este tipo de linguagem, principalmente ao Ruby on Rails. Portanto, é visível que as linguagens dinâmicas e principalmente a linguagem Ruby poderá ser o próximo “boom” no desenvolvimento de software.

Anúncios

Ruby Module

março 9, 2009 às 7:09 pm | Publicado em ruby | Deixe um comentário

Um recurso muito interessante e extremamente útil na linguagem Ruby é o Módulo (module). O módulo possui duas funcionalidades: namespace e mixin.

Namespace

O Módulo pode ser utilizado para prover um namespace para os componentes, mantendo-os mais organizados evitando possíveis problemas de sobrescrita. Veja o exemplo abaixo:

ruby_module_1

Devido às características dinâmicas da linguagem, o método verify da classe AccessControl foi sobrescrito e o resultado do código será ‘verify 2’. Esta sobrescrita pode ser intencional ou não.

Para deixar o código mais organizado e prevenir que o componente seja sobrescrito por engano, pode-se utilizar o módulo como namespace:

ruby_module_2

Para referenciar elementos que estão dentro de um módulo, usa-se Modulo::Elemento

ruby_module_3

Desta forma, a sobrescrita por engano já está evitada. O código abaixo irá imprimir:

verify
verify 2

ruby_module_4

Mixin

Mixin é um recurso interessante. Um módulo pode ser incluído em uma classe. Quando isso ocorre, a classe passa a ter os métodos declarados no módulo. Veja o exemplo abaixo:

ruby_module_5

A classe AccessControl não possui o método “testing”. Quando o interpretador do ruby não encontra um método um um objeto, o método method_missing é invocado.

No exemplo, o módulo MethodMissing foi incluído dentro da classe AccessControl. Desta forma, a classe AccessControl passou a ter os métodos definidos no módulo.

O código imprime:
verify 2
The method ‘testing’ doesn’t exist!!!!

—-

O conceito de módulo é sem dúvida um recurso muito interessante e bastante utilizado pelo framework Ruby on Rails.

Rails Magazine

março 2, 2009 às 1:47 pm | Publicado em ruby, Ruby on Rails | 1 Comentário

Rails Magazine

Quem gosta de Rails agora tem uma revista onde será possível compartilhar conhecimentoe novas idéias. A revista é Canadense e em breve será disponibilizado uma versão em PDF da mesma.

Creio que já passou da hora de uma iniciatia deste porte aqui no Brasil.. O que vocês acham?

Head First Rails

fevereiro 19, 2009 às 3:01 pm | Publicado em ruby, Ruby on Rails | 2 Comentários

 

Capa Head First Rails

Capa Head First Rails

 

Ruby on Rails é uma tecnologia que eu sempre esteve na minha lista de estudos.

Dediquei um bom tempo estudando ruby e quando me achei preparado, comprei o livro Head First Rails para iniciar no mundo rails. Sou fã da série Head First e sem dúvida aguardei ansioso a chegada do livro.

Talvez pela minha grande expectativa, me decepcionei um pouco com o conteúdo do livro. Em algumas situações ele foi um pouco repetitivo deixando de explicar alguns detalhes sobre o funcionamento do framework.

O capítulo sobre a integração com Google Maps é um pouco confuso. O REST é apresentado em poucas páginas apenas no final do livro. Infelizmente faltou conteúdo no livro.

Porém nem tudo está perdido, o conteúdo sobre AJAX está bem claro e simples de entender. O funcionamento dos controllers, views, validações e ActiveRecord também foi esclarecedor.

Bem, apesar de não ter ficando 100% satisfeito, o livro me abriu as portas pra uma nova forma de desenvolvimento web. Muito mais produtiva e sem perder a qualidade. 

railers << “Marcelo Madeira”

Linguagem fortemente tipada (Strong typing)

fevereiro 28, 2008 às 2:19 am | Publicado em Desenvolvimento, Java, JavaScript, ruby | 28 Comentários

Em uma conversa com uma professora da faculdade, surgiu uma pequena discussão.
O que é uma linguagem fortemente tipada?

Segundo a professora, linguagem fortemente tipada é aquela onde você precisa declarar o tipo da variável, por exemplo:

// código java
private String nome;

Na minha opinião, ela está enganada.
A principal característica de uma linguagem fortemente tipada (Strong typing), é que cada variável do programa representa um objeto de um tipo bem definido.

// codigo java
int x = 12.1; // erro, tipos incompatíveis
int j = (int) 12.1 // funciona, mas você perde as casas decimais 🙂

Java é uma linguagem formente tipada. Não é possível atribuir um double para um int.
Para executar tal operação, você terá que forçar a tranformação para o tipo definido pela variável. Chamamos isso de cast. Java também é uma linguagem com tipagem estática, ou seja, você precisa declarar qual o tipo de objeto a variável irá referenciar.

Vejamos um exemplo em Ruby.

x = ‘Marcelo’
y = 12
puts x + y

A principal diferença que podemos notar é a ausência do tipo da variável. Mas isso não torna ruby uma linguagem fracamente tipada. O que acontecerá se você tentar somar (+) um Fixnum (int) com uma String? Um belo erro no console:
can’t convert Fixnum into String (TypeError)

Ou seja, ruby também é fortemente tipada, porém de forma dinâmica. O interpretador “descobre” em tempo de execução o tipo da variável. Devido a essa característica, em ruby não existe cast. Caso os tipos envolvidos na operação sejam incompatíveis, você terá um belo erro pra se preocupar.

Veja um exemplo em javascript:

var x = “Marcelo”;
var y = 12;
alert(x + y);

JavaScript é fracamente tipada (weak typing), ou seja, este código será executado sem problemas. Você não precisa informar o tipo da variável e o intepretador do javascript sabe realizar algumas operações sobre os objetos dependendo do contexto.

Espero que a professora leia este POST. 🙂

Blog no WordPress.com.
Entries e comentários feeds.