domingo, 5 de diciembre de 2010

Io

Io es un lenguaje de programación prototipado inspirado en Smalltalk, Self, NewtonScript, Act1, LISP y Lua.

Io es prototipado. Existen varias formas de implementar la programación orientada a objetos, la más conocida es por medio de clases. La otra no tan conocida es por prototipos donde no nos preocupamos por las clases sino por los objetos, y estos objetos se pueden duplicar o clonar. De esta forma funciona la programación orientada a objetos en Javascript.

Veamos un hola mundo hecho en io, luego de instalarlo desde el siguiente sitio: http://iolanguage.com/
En la consola hacemos Io y luego escribimos:
“Hola mundo” print
Y va imprimir “Hola mundo”, como vemos el string envía un mensaje de que se imprima.

Veamos como crear un objeto:
Vehiculo := Object clone
Vehiculo no es una clase, sino es un objeto tipo “template” que se utiliza para crear otros objetos.
Vehiculo descripcion := “Es un vehiculo”
descripcion es una propiedad del Vehiculo. Las propiedades son vectores clave valor, similar a Javascript.

Y si ejecutas
Vehiculo descripcion
El resultado sera “Es un vehiculo” como era de esperar. En realidad un objeto es una lista que contiene propiedades y metodos.

Io> Vehiculo slotNames
==> list("type", "descripcion")

Como vemos el objeto tiene una propiedad tipo:

Io> Vehiculo type
==> Vehicle
Io> Object type
==> Object

Como podemos ver Vehiculo es un tipo, una idea que resalto es que los typos no son clases sino objetos. El objeto Vehiculo es un tipo.
Ahora vamos a construir un Auto usando herencia:

Io> Auto := Vehiculo clone
==> Auto_0x100473938:
type = "Auto"
Io> Auto slotNames
==> list("type")
Io> Auto type
==> Auto
Ahora vamos a hacer un ferrari B)

Io> ferrari := Auto clone
==> Auto_0x1004f43d0:
Io> ferrari slotNames
==> list()

ferrari no es un tipo, como sabe Io cual es un Tipo y cual no, por convención los tipos comienzan con mayúscula.

Io> ferrari type
==> Auto

Ni clases, ni modulos, ni interfaces, solo Objetos!

En Io es fácil hacer metodos:

Io> method("este es un metodo." println)
==> method(
“este es un metodo." println
)

Los metodos son objetos:

Io> method() type
==> Block

Podemos asignarle un metodo a el Auto
Io> Auto manejar := method("Manejando manejando voy!" println)
==> method(
"Manejando manejando voy!" println
)

Io es un lenguaje simple y potente que nos permite comprender como funcionan los lenguajes prototipados. Aprender Io nos ayuda a entender Javascript o Haskell.

Para mayor información ver: