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: