Programación en Vala/Otras técnicas

El compilador Valac está basado en el modelo de objetos de GLib y GObject. Todos los programas que escribimos en lenguaje Vala son traducidos a lenguaje C y luego con el compilador GCC son compilados a código de máquina.

Por esto mismo, los programas en Vala escritos de esta forma

void main () {
    stdout.printf("Programa de prueba");
}

Tienen de forma oculta un namespace sin mostrarlo, ya que es agregado automáticamente al compilador, de forma que el programa anterior es equivalente al siguiente

using GLib; // Aunque esta línea no es necesaria.
 
void main () {
    stdout.printf("Programa de prueba");
}

Y es que la clase stdout es miembro de GLib, por tanto sucederá que si escribimos o no el namespace este se usará.

Namespaces de GLibEditar

Una lista de los namespaces de GLib[1] es:

Y cabe decir que todos estos namespaces, cada uno con todas sus clases y funciones están disponibles para su uso con el compilador Valac sin agregar otra librería o namespace.

Ejemplo de uso de un Namespace de GLibEditar

Como ya lo dijimos, los Namespaces de GLib pueden ser usados en cualquier momento en los programas escritos en Vala que hagamos. Para ejemplificarlo veremos una ejemplo práctico y sencillo: Dado el valor de un ángulo, deseamos conocer el valor del seno matemático de éste. Para eso, recurriremos al Namespace Math de GLib, usando la función Math.sin() para conocer el valor de dicha operación (expresada en Radianes). Dicho programa tendría la siguiente forma:

void main () {
    stdout.printf("Dame el valor de un ángulo: ");
    string entrada = stdin.read_line();
    double resultado = Math.sin( double.parse(entrada) );
    stdout.printf("El seno de %s es %d radianes\n", entrada, resultado);
}

Explicando el programa, tenemos que en primer lugar, se imprime la línea indicando la entrada de un ángulo. En la siguiente línea se crea una cadena de texto, llamada entrada, y el valor de esa cadena de texto se asigna mediante la función stdin.read_line().

Luego, se crea un flotante de precisión doble, llamado resultado, y el valor de dicho resultado es la salida de la función Math.sin(), y como parámetro a dicha función se asigna el valor de la cadena de texto entrada. Pero como se trata de una cadena de texto (string), hacemos una conversión hacia un flotante de precisión doble con la función double.parse().

Luego, se imprimen los resultados en pantalla. El indicador %s indica que se pasa una cadena de texto (string), y el indicador %d indica que se pasa un flotante de precisión doble(double). Y a esos parámetros se pasan los parámetros entrada y resultado.

Este ejemplo fue algo sencillo para explicar los Namespaces de GLib, y cada uno de ellos tiene su forma de uso, pero básicamente se utilizan de esa forma.

ReferenciasEditar

  1. http://valadoc.org/glib-2.0/GLib.html
  2. http://developer.gnome.org/glib/2.28/glib-Numerical-Definitions.html
  3. http://developer.gnome.org/glib/2.28/glib-Atomic-Operations.html
  4. http://developer.gnome.org/glib/2.28/glib-Atomic-Operations.html
  5. http://developer.gnome.org/glib/2.28/
  6. http://developer.gnome.org/glib/2.28/glib-Random-Numbers.html
  7. http://developer.gnome.org/glib/2.28/