Recherche…


Syntaxe

  • scope (exit) - les instructions sont appelées quelle que soit la sortie du bloc actuel
  • scope (success) - les instructions sont appelées lorsque le bloc en cours a été quitté normalement
  • scope (failure) - les instructions sont appelées lorsque le bloc en cours a été quitté via le lancement d'exceptions

Remarques

L'utilisation de gardes de portée rend le code beaucoup plus propre et permet de placer l'allocation de ressources et de nettoyer le code les uns à côté des autres. Ces petits outils améliorent également la sécurité car ils garantissent que certains codes de nettoyage sont toujours appelés indépendamment des chemins réellement empruntés à l'exécution.

La fonction d'étendue D remplace efficacement l'idiome RAII utilisé en C ++, ce qui conduit souvent à des objets de surveillance de portée spéciale pour des ressources spéciales.

Les gardes de portée sont appelés dans l'ordre inverse de leur définition.

Jouez avec les gardes de la portée ou consultez un didacticiel complet .

Placez les codes d’allocation et de nettoyage les uns à côté des autres

Les gardes de portée permettent d'exécuter des instructions à certaines conditions si le bloc actuel est laissé.

import core.stdc.stdlib;

void main() {
    int* p = cast(int*)malloc(int.sizeof);
    scope(exit) free(p);
}

Plusieurs portées imbriquées

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>");
}

estampes

<html>
    <head>
        <title>Hello</title>
    </head>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow