miércoles, 17 de julio de 2013

Lenguaje Go! Comenzando a ver la sintaxis (enumeraciones y estructuras)



Hola a todos, nuevamente otro post de este lenguaje llamado Go!, en este caso vamos a ver que son los enums y los struct, como utilizarlos y declararlos.



Primero y antes que nada, que es un enum o enumeración? (definición de C, C++)

Una enumeración es un tipo especial de estructura en la que los literales de los valores que pueden tomar sus objetos se indican explícitamente en su definición.

Ejemplo de código en Go:

const (
Red = (1<<iota)
Green = (1<<iota)
Blue, ColorMask = (1<<iota), (1<<(iota+1))-1
)

El uso que van a encontrar, es la enumeración de constantes. Ya que en Go, no hay diferenciación entre constantes y enumeraciones. 
En C como en la mayoría de los lenguajes que ofrecen tipos enumerados, nosotros debemos proveer de manera explícita los valores numéricos para el segundo tipo de enumeración, ya que el primero lo enumera automáticamente el compilador.
En cambio Go provee un mecanismo mucho más flexible para el diseño de enum, el identificador pre-declarado “iota” es similar al __COUNTER__ de GNU C, pero más potente. Es una expresión constante entera, que en el ámbito normal del programa se evalúa a 0, pero que en el ámbito de una declaración es inicialmente cero, pero va incrementando en uno cada vez que se utiliza. A diferencia de __COUNTER__ iota tiene ámbito, es decir es cero en la primera línea del grupo en este ejemplo, y siempre será cero en la primera línea de este grupo, con independencia de la forma en que se utiliza en otros lugares. Si tiene varias const con grupos en un solo archivo de código fuente, iota será igual a cero al inicio de cada uno de ellos. También es posible hacer referencia a las constantes de otra declaración de constantes. Del mismo modo, se puede extender la declaración de constantes existentes declarando antes una expresión iota.

Primero y antes que nada, que es un struct o estructura? (definición de C, C++)

Un struct es una manera de juntar un grupo de variables en una estructura. Cuando se crea un struct, se pueden crear varias instancias de este «nuevo» tipo de variable que ha inventado.

Este es un ejemplo de código en Go:
type Example struct {
Val string
count int
}

Las estructuras en Go, son un poco más ricas que en C, una de las diferencias más importantes es que las estructuras en GO automáticamente soportan data hiding.
Los métodos o nombres de variables que comienzan con una letra mayúscula son visibles fuera del paquete en el que se declaran. Esto se extiende también a los campos del struct. En el código de ejemplo como se puede ver, en su interior tienen dos definiciones, la primera es un string  y puede ser accedido por cualquiera, en cambio el segundo es un int y es únicamente visible para el código definidos en el mismo paquete.
Para los que venimos de lenguajes orientados a objetos como C++ o Java, puede resultarnos raro, que esten los tipos de acceso public y private pero no protected, pero la respuesta es bastante sencilla, en Go no existe la herencia entonces ese tipo de acceso no tiene ningún tipo de significado.

Web Oficial

Ver por lo de la licencia

Bueno eso es todo por ahora, probablemente en el próximo post veremos lo que son métodos e interfaces en Go, espero que les haya gustado, y que se comiencen a enganchar con este lenguaje, que cada vez me gusta más ;)

Saludos a todos, Gabriel