D Language
スコープガード
サーチ…
構文
- scope(exit) - 現在のブロックがどのように終了してもステートメントは呼び出されます
- スコープ(成功) - 現在のブロックが正常に終了したときにステートメントが呼び出されます。
- scope(failure) - 現在のブロックが例外スローされて終了したときにステートメントが呼び出されます。
備考
スコープガードを使用すると、コードがはるかにクリーンになり、リソースの割り当てやコードの並び替えが可能になります。これらの小さなヘルパーは、特定のクリーンアップコードが実行時に実際にどのパスから取られるかを常に独立して確認するため、安全性も向上させます。
Dスコープ機能は、C ++で使用されているRAIIイディオムを効果的に置き換えます。これは、特殊リソース用の特別なスコープガードオブジェクトにつながることがよくあります。
スコープガードは、定義された逆の順序で呼び出されます。
割り当てとクリーンアップコードを互いに隣に配置する
スコープガードは、現在のブロックが残っている場合に特定の条件でステートメントを実行できるようにします。
import core.stdc.stdlib;
void main() {
int* p = cast(int*)malloc(int.sizeof);
scope(exit) free(p);
}
複数のネストされたスコープ
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>");
}
プリント
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow