Especificar cuándo y dónde se aplica una anotación

Cuando una anotación es condicional, puede requerir otras anotaciones para especificarlo al analizador. Por ejemplo, si una función tiene una variable que puede ser sincrónica o asincrónica, la función se comporta de la siguiente manera: en el caso sincrónico, siempre se ejecuta correctamente, pero, en el caso asincrónico, notifica un error si no se puede ejecutar correctamente de forma inmediata. Cuando se llama a la función de forma sincrónica, comprobar el valor de resultado no proporciona ningún valor al analizador de código porque no habría devuelto resultados. Sin embargo, cuando se llama a la función de forma asincrónica y no se comprueba el resultado de la función, podría producirse un error grave. En este ejemplo se muestra una situación en la que podría usar la anotación _When_, descrita más adelante en este artículo, para habilitar la comprobación.

Anotaciones estructurales

Para controlar cuándo y dónde se aplican las anotaciones, use las siguientes anotaciones estructurales.

Annotation Descripción
_At_(expr, anno-list) expr es una expresión que produce un valor lvalue. Las anotaciones de anno-list se aplican al objeto denominado por expr. Para cada anotación de anno-list, expr se interpreta en condición previa si la anotación se interpreta en condición previa y en condición posterior si la anotación se interpreta en condición posterior.
_At_buffer_(expr, iter, elem-count, anno-list) expr es una expresión que produce un valor lvalue. Las anotaciones de anno-list se aplican al objeto denominado por expr. Para cada anotación de anno-list, expr se interpreta en condición previa si la anotación se interpreta en condición previa y en condición posterior si la anotación se interpreta en condición posterior.

iter es el nombre de una variable cuyo ámbito es la anotación (incluido anno-list). iter tiene un tipo implícito long. Las variables con nombre idéntico en cualquier ámbito envolvente están ocultas de la evaluación.

elem-count es una expresión que se evalúa como un entero.
_Group_(anno-list) Se considera que todas las anotaciones de anno-list tienen algún calificador que se aplique a la anotación de grupo que se aplica a cada anotación.
_When_(expr, anno-list) expr es una expresión que se puede convertir en bool. Cuando es distinto de cero (true), las anotaciones especificadas en anno-list se consideran aplicables.

De forma predeterminada, para cada anotación de anno-list, expr se interpreta como que usa los valores de entrada si la anotación es una condición previa y como que usa los valores de salida si la anotación es una condición posterior. Para invalidar el valor predeterminado, puede usar la función intrínseca _Old_ al evaluar una condición posterior para indicar que se deben usar los valores de entrada. Nota: Es posible que se habiliten diferentes anotaciones como consecuencia de usar _When_ si un valor mutable (por ejemplo, *pLength) está involucrado porque el resultado evaluado de expr en la condición previa puede diferir de su resultado evaluado en la condición posterior.

Consulte también