D Language
Guardias de alcance
Buscar..
Sintaxis
- alcance (salida): las declaraciones se llaman sin importar cómo se salió del bloque actual
- ámbito (éxito): las declaraciones se invocan cuando el bloque actual se cerró normalmente
- ámbito (error): se invocan declaraciones cuando se sale del bloque actual mediante el lanzamiento de excepciones
Observaciones
El uso de guardas de alcance hace que el código sea mucho más limpio y permite colocar la asignación de recursos y limpiar el código uno al lado del otro. Estos pequeños ayudantes también mejoran la seguridad porque se aseguran de que cierto código de limpieza siempre se llame independiente de qué rutas se toman realmente en tiempo de ejecución.
La función de alcance D reemplaza efectivamente el lenguaje RAII usado en C ++ que a menudo conduce a objetos de guardas de alcance especiales para recursos especiales.
Las guardas de alcance se llaman en el orden inverso al que están definidas.
Coloque la asignación y el código de limpieza uno al lado del otro
Las guardas de alcance permiten ejecutar sentencias en ciertas condiciones si se deja el bloqueo actual.
import core.stdc.stdlib;
void main() {
int* p = cast(int*)malloc(int.sizeof);
scope(exit) free(p);
}
Múltiples ámbitos anidados
import std.stdio;
void main() {
writeln("<html>");
scope(exit) writeln("</html>");
{
writeln("\t<head>");
scope(exit) writeln("\t</head>");
"\t\t<title>%s</title>".writefln("Hello");
} // the scope(exit) on the previous line is executed here
writeln("\t<body>");
scope(exit) writeln("\t</body>");
writeln("\t\t<h1>Hello World!</h1>");
}
huellas dactilares
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow