何言語である"ガード"キーワードやコンセプト?
-
24-09-2019 - |
質問
いて把握に努めたC++プログラムを書いた個人的に思った背景にはプログラミング:例えば、彼が宣言した 閉鎖 クラスのた広く用いられているのは少し違うとして知られる閉鎖機能プラグインです。別のクラスと呼ばれる ガード, なんか今までが良いです。そして何らかの浄化機能が付いています。
の言語を見ること ガード はGimp用ドキュメならと同様のコードを見つけた。その他の言語ではこのような概念が存在し、著者のC++コードの場合において言及すか?
解決
私にはそれが聞こえる。
クラスのコンストラクタ/デストラクタは対称的例外安全なコンテキスト内のリソースの割り当て/解放のいくつかのフォームを処理するために使用される(デストラクタが呼ばれるようにguranteedされるJavaプログラマは} {ついに呼ぶもの。)。
これは非常に一般的なC ++でイディオムと近代的なC ++で広くUEDされます。
でした。このようなコードを見ます:
void Plop()
{
Guard guard(lock);
// Do lots of stuff
}
ここで、ガードがコンストラクタでロックをロックし、デストラクタでロックを開錠されます。
他のヒント
一般的な用語では、のガードのは、単純に継続するために、いくつかの経路に沿って実行するためにtrueに評価する必要がある構造です。このまたはそのようなものは、すべての有用なチューリング完全なプログラミング言語に存在するが、多くの場合、エンティティとして個別に名前が付いていないことかもしれないので、基本的なものです。ここではHaskellでの簡単な例があります:
f x
| x < 0 = -x
| otherwise = x
これは絶対値関数と等価である:ネゲート数がその正の相手を生成する負かどう。そうでない場合は、渡された同じ値を返す2つのガードがここにあります。。xがゼロ未満であるとき真であるx < 0
、およびotherwise
、常に真である
Haskell の Control.Monad モジュールには、 guard
:
guard :: MonadPlus m => Bool -> m ()
guard b
はreturn ()
もしb
はTrue
, 、 そしてmzero
もしb
はFalse
.
たとえば、各脚が 25 を超えないピタゴラス トリプルを計算するには、次のようにします。
triples = do
a <- [1..25]
b <- [a..25]
c <- [b..25]
guard (p a b c)
return (a,b,c)
where
p a b c = a*a + b*b == c*c
何が起こっているかの説明については、私のブログ投稿を参照してください プログラム可能なセミコロンの説明.
コンピュータサイエンスのガードは、一般的にループ構造を継続する必要があることを示しブール式を参照してください。例えば(しゃれを許し)
for (int i = 0; i < N; ++i)
/* stuff */
ここで、i < N
がガードされています。
それより多くの情報がなく、より徹底的にあなたの質問に答えることは困難です。