sexta-feira, 18 de abril de 2008

Io

Smalltalk Depois de cinquenta e três dias afastado da rede mundial, estou de volta, podendo novamente postar artigos.

Para marcar esta volta, quero falar de uma novíssima linguagem de programação que, apesar ainda estar saindo do forno – não sei sua idade, mas deve ter pouco mais de um ano –, pode vir a se tornar uma escolha viável: Io.

Io é uma linguagem de programação pequena e prototipada. Seus conceitos são inpirados em outras linguagens de programação, como Smalltalk, Self, Lisp, Lua e outras.

É uma linguagem de código aberto – licença BSD –, a máquina virtual é pequena – por volta de 10KB – e roda atualmente em quatro plataformas: Unix-like, Windows, Symbian e Syllable – antigo AtheOS.

Possui uma sintaxe muito semelhante à de Smalltalk e um forte conceito de orientação a objetos.

Em Io, em vez de atributos, propriedades, métodos e variáveis, temos slots. Slot consiste no armazenamento de um objeto dentro de outro, ou seja, cada objeto possui slots contendo outros objetos.

Todas linhas de código são mensagens interceptadas pelo objeto Lobby: a primeira «palavra» é interpretada como o nome de um slot de Lobby. Caso o slot não exista, é gerada uma exceção.

Caso exista, o objetos residente naquele slot é retornado e o resto da mensagem é passada para ele, e assim sucessivamente.

Se o objeto num dos slots for um método, ele será executado e seu retorno será usado para tratar o restante da mensagem.

A atribuição de valor a um slot é feita por =, caso o slot não exista, será gerada uma exceção. Para a criação – e inicialização – de um novo slot, é usado :=.

Não há classes propriamente didas: a «instanciação» é feita por meio de protótipos, ou seja, clonagem de um objeto matriz.

Vamos a um exemplo…

Vamos criar um protótipo Person, que contenha nome, sobrenome e retorne o nome completo:
Person := Object clone
Person firstname := ""
Person lastname := ""
Person birth := Date
Person fullname := method("#{firstname} #{lastname}" interpolate)
Person asString = method(fullname .. ": " .. birth asString("%Y-%m-%d"))


Para «instanciar» um objeto de Person também usamos clone:
cacilhas := Person clone
cacilhas firstname = "Rodrigo"
cacilhas lastname = "Cacilhas"
cacilhas birth = Date fromString("1975-11-20", "%Y-%m-%d")


Ao ser executado:
cacilhas fullname println


Será exibido Rodrigo Cacilhas.
cacilhas println


Agora é exibido Rodrigo Cacilhas: 1975-11-20.

Para obter a data atual:
Date now println


Também é possível obter uma representação numérica da data usando asNumber, que no caso retorna a data em segundos:
Date now asNumber println


Outros slots válidos de Date now são: year (ano), month (mês), day (dia), hour (hora), minute (minuto) e second (segundo).

Pegando apontadores do Google:
SGML
xml := URL with("http://www.google.com/search?q=io+language") fetch asXML
links := xml elementsWithName("a") map(attributes at("href"))


Espero que tenham achado a linguagem tão interessante quanto eu achei e que ela alcance um nível de maturidade que permita sua aplicação extensiva.

[]'s
Cacilhas, La Batalema
blog comments powered by Disqus