2013-06-10 6 views
15

私はバグやコードを修正してAdaを学んでいます。私はいくつかのif文が "and"で、他は "and"であることに気づいた。同様に、「または」と他の場所には「またはその他」があります。同僚は文法的な砂糖だけだと言いますが、違いはありません。彼が正しいのだろうか?エイダand then"と"の間に違いがありますか? "IF文の中で

+0

+1質問:-) –

+0

短い答え - はい。 – NWS

+3

NWS - より短い(そして正しい)答えはNoです! –

答えて

19

or elseは、それに対応し、andorオペレータのいわゆる「短絡」形である。

ショートカットオペレータ[and thenor elseは]の部分の評価を行うために使用されブール式は条件付きです。これは決して実行するべきではありません (現代の最適化コンパイラでは、 はおそらくその効果がありません)評価をスピードアップする。正しい使用は、例外を発生させることが知られている式の評価を防止することです。

例(wikibooks/Adaから、上記の説明のように、撮影した):ここ

if Dog /= null and then G (Dog) then 
    Walk (Dog); 
end if; 

G(犬)犬がnullでない場合にのみ、を評価します。 and thenがなければ、とにかく評価され、Dogが実際にnullの場合は例外が発生します。

and thenor elseは、厳密に言えば、オーバーロードできないため演算子ではありません。

私はこのwikibookを読むことをお勧めします。それはAdaをあなたの旅に大きく役立つでしょう。 )

+0

'1/x'は 'Boolean型ではないので、wikibookへのリンクを提供するための+1 - 最も有用なリソース – erict

2

FuncBは、副作用を持つBooleanを返す関数であるとします。ショートフォーム

if False and then FuncB then 
    null; 
end if; 

とfuncBのの副作用が発生しないながら

if False and FuncB then 
    null; 
end if; 

にfuncBの副作用が起こります。

2

and then構造体は、いくつかのプログラミング言語が短絡と呼ばれる特性を使用しています。

あなたはこれらのコードスニペットを試みることによって、この機能をテストし、理解することができます:

x:=0; 
if false and 1/x=1 then 
    null; 
end if; 

この1つはゼロ例外によって、除算が発生します。

x:=0; 
if false and then 1/x=0 then 
    null; 
end if; 

これは第2条件をチェックしないため、例外は発生しません。

+0

' falseと[then] 1/x'はコンパイル時のエラーメッセージを表示します'。 –

関連する問題