D Language
Osłony celowników
Szukaj…
Składnia
- scope (exit) - instrukcje są wywoływane bez względu na sposób wyjścia z bieżącego bloku
- zakres (sukces) - instrukcje są wywoływane, gdy bieżący blok został zakończony normalnie
- zakres (błąd) - instrukcje są wywoływane, gdy bieżący blok został zakończony przez zgłoszenie wyjątku
Uwagi
Użycie osłon zakresu sprawia, że kod jest znacznie bardziej przejrzysty i pozwala na umieszczenie alokacji zasobów i wyczyszczenie kodu obok siebie. Ci mali pomocnicy również poprawiają bezpieczeństwo, ponieważ zapewniają, że pewien kod czyszczenia jest zawsze wywoływany niezależnie od tego, które ścieżki są faktycznie pobierane w czasie wykonywania.
Funkcja zakresu D skutecznie zastępuje idiom RAII używany w C ++, co często prowadzi do specjalnych obiektów chroniących zakres dla specjalnych zasobów.
Osłony zakresów są wywoływane w odwrotnej kolejności niż są zdefiniowane.
Umieść kod przydzielania i czyszczenia obok siebie
Osłony zakresu pozwalają na wykonywanie instrukcji w określonych warunkach, jeśli pozostanie bieżący blok.
import core.stdc.stdlib;
void main() {
int* p = cast(int*)malloc(int.sizeof);
scope(exit) free(p);
}
Wiele zagnieżdżonych zakresów
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>");
}
odciski
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow