Programación en Vala/Funcionalidades experimentales del lenguaje

Las funcionalidades que se presentan en este capítulo han sido definidas como experimentales y por lo tanto no se recomienda su uso hasta que se defina completamente el estándar del lenguaje, ya que podría cambiar su sintaxis e incluso dejar de existir en una versión definitiva del compilador.

Expresiones relacionales encadenadasEditar

Esta funcionalidad del lenguaje permite escribir expresiones relacionales complejas como la siguiente:

if (1 < a && a < 5) {}

if (0 < a && a < b && b < c && c < d && d < 255) {
    // Acciones
}

De una forma más simple como la siguiente:

if (1 < a < 5) {}

if (0 < a < b < c < d < 255) {
    // Acciones
}

De esta forma se encadenan los valores y nos aseguramos que la condición sea cierta antes de que se ejecuten las acciones. Esta forma de escribir la expresión relacional es más natural y semejante a como se define de forma matemática la expresión.

Expresiones regulares en literalesEditar

Las expresiones regulares son una técnica muy potente para tratar cadenas de texto y realizar operaciones de búsqueda de patrones entre otros usos. Vala dispone de funcionalidad experimental con expresiones regulares en literales de una forma similar a como lo hace el lenguaje de programación Perl. Vala utiliza el operador /expresion-regular/ para definir un objeto de tipo Regex. Por ejemplo:

string email = "tux@kernel.org";
if (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.match(email)) {
    stdout.printf("Dirección de correo válida\n");
}

El modificador i que aparece después de la definición de la expresión regular y antes de la llamada al método match(email) hace que la expresión regular sea insensible a las mayúsculas. Se puede almacenar una expresión regular en un objeto de tipo Regex:

Regex regex = /foo/;

Las expresiones regulares son una técnica de una complejidad suficiente como para dedicarles un documento separado del actual por lo que si el lector desea conocer más sobre el uso de expresiones regulares en Vala puede usar los siguientes enlaces para satisfaces su curiosidad:

Modo no-nulo estrictoEditar

Si se compilan programas con la opción --enable-experimental-non-null el compilador de Vala ejecutará una serie de comprobaciones estáticas considerando todos los tipos como no nulos por defecto a menos que sean declarados como posibles nulos con el modificador ?.

Object o1 = new Object();     // No puede ser nulo
Object? o2 = new Object();    // Puede ser nulo

El compilador realizará un análisis en tiempo de compilación para asegurarse de que las referencias se asigna a referencias que no pueden se nulas. Por ejemplo, en este modo de compilación, el siguiente código no compilaría y daría un error:

Object o1 = new Object();     // No puede ser nulo
Object? o2 = new Object();    // Puede ser nulo

o1 = o2;

La referencia o2 ha sido marcada como una referencia que puede tener el valor nulo mientras que o1 no puede ser nulo. Sin embargo se puede evitar este comportamiento por defecto del compilador mediante el uso de la conversión a un tipo no nulo explícita, siempre que estemos seguros de que la referencia no sea nula:

o1 = (!) o2;

El modo no nulo estricto ayuda a evitar errores con referencias que tienen valores nulos. Esta característica sería complete si la posibilidad de valor nulo de todos los valores de retorno en las librerias estuviera marcada de forma correcta, pero actualmente no siempre se hace.