条件文(コンピュータプログラミング)

If-then-elseフロー図
ネストされたif-then-elseフロー図

コンピュータプログラミングにおいて条件 文は条件ブール式)の値に基づいてプログラムの 制御フローを制御します。条件式は、制御フローを変更する副作用なしに値を評価し、結果を出力します

多くのプログラミング言語( C言語など)には、明確な条件文と式があります。純粋関数型プログラミングでは条件式に副作用はありませんが、条件式を持つ多くの関数型プログラミング言語(Lispなど)では副作用がサポートされています。

条件文

If-then-else文

if-then-else 文の構文は言語によって異なりますが、一般的な構文は以下の擬似コードで示されています。条件プレースホルダーで表される部分は、真または偽のいずれかに評価される式です。真の場合、制御はconsequentに渡され、完了すると after に渡されます。偽の場合、制御はalternativeend ifに渡され、完了すると after に渡されます。else 節はオプションであるため、この部分は省略可能です。通常、consequentalternative はどちらも単一の文または文のブロックとして記述できますend ifelse alternative

条件が満たされ結果が満たされ、そうでなければ、代替案が満たされ、終了する     

次の例も擬似コードで、プレースホルダーをサンプルのロジックに置き換えます。

在庫0の場合メッセージ「新しい在庫を注文する」、そうでない場合はメッセージ「在庫があります」で終了           

歴史と発展

初期のプログラミング言語、特にBASICの方言では、if-then-else 文にはgoto文しか含めることができませんでしたが、これでは読みにくいスパゲッティ コードになる傾向がありました。その結果、コード ブロックを介して制御フローをサポートする構造化プログラミングが普及し、ほとんどの BASIC バリアントおよびすべての言語で標準になりました。このようなメカニズムと原則は、PascalModula-2などのALGOLファミリーの言語に基づいています。goto を構造化された方法で使用することは可能ですが、構造化プログラミングを使用するとそれが簡単になります。構造化された if-then-else 文は構造化プログラミングの重要な要素の 1 つであり、CJavaJavaScriptVisual Basicなどのほとんどの一般的な言語に存在します。

ぶら下がっているelse

慣例上、else節は、then節​​と同様に、最も近い先行if節に対応する。しかし、ALGOL 60などの初期の言語では、ネストされた条件文の意味論は必ずしも明確ではなかった。つまり、常に同じ述語節を指定するには構文が不十分であった。そのため、パーサーは、意図されたネスト階層内のおそらく多様な節のいずれかと、ifランダムに をペアリングする可能性がある。elseif

たとえば、次の文を考えてみましょう:
もしAなら、もしBならS そうでなければS2        
または、同じ文ですが、わかりやすくするためにインデントされています。
もしAなら、もしBならS そうでなければS2         
は、次のように解釈できます。
もしAならばもしBならばS )、そうでなければS2、終了         
もしAならばもしBならばS )、そうでなければS2、終了        
または意味として:
もしAならばもしBならばS 、そうでなければS2         
もしAならばもしBならばS、そうでなければS2 終了        

これはぶら下がりelse問題として知られています。この問題は言語によって様々な方法で解決されます(言語によっては、明示的なブロック終了構文( などend if)や中括弧({})などのブロック囲みを使用する場合もあります)。

連鎖

条件文の連鎖は、言語においてelse-if構文によって提供されることがよくあります。最初の条件が真となる文の後に続く文のみが実行されます。その他の文はスキップされます。プレースホルダ擬似コードでは、次のようになります。

条件1の場合、ブロック1、そうでない場合、条件2の場合、ブロック2、そうでない場合条件3場合、ブロック3、.. そうでない場合、ブロック4、終了の場合                 

以下の擬似コードでは、ある店が商品に最大30%の割引を提供しています。割引が10%の場合、最初のif文は真となり、「30ドル支払わなければなりません" が出力されます。最初の if ステートメントの下にある他のすべてのステートメントはスキップされます。

割引< 11 %の場合「30ドルお支払いいただく必要があります」と出力し、割引< 21 %の場合は20ドルお支払いいただく必要があります」と出力し、割引< 31 %の場合10ドルお支払いいただく必要があります」出力します                        

代わりにを使用する場合は、 のみend ifが必要ですelse ifelseif

ALGOL 68では、1968年の「報告書草案」( ALGOL速報第26号の補足として配布)では、依然として「短縮された」条件文で太字のキーワードelsfが使用されていました。[1]その後、 綴りのelifは「アルゴリズム言語ALGOL 68の改訂報告書」(1973年)で標準化され、太字の単語とその「簡潔な」記号の両方が記載されています。elif短縮形の に対応します[2]if ~ then ~ elif ~ else ~ fi|:( ~ | ~ |: ~ | ~ | ~ )

Adaではelseifキーワードは2 つの単語 の糖衣構文です。PHP 、中括弧とコロン構文の両方で キーワードをサポートしています[3] 。PerlとRuby は複数のandステートメントに必要な多数の中括弧を回避するためにキーワード を提供しています。Python では、構造が中括弧ではなくインデントによって示されるため、andを繰り返し使用すると条件ごとにインデントを増やす必要がある ため、特別なキーワードを使用します。Visual Basic はをサポートしています[4] 同様に、初期のUNIX シェル(後に POSIX シェル構文[5]にまとめられました)もelifを使用していますが、スペース、改行、またはその両方で区切るオプションを提供しています。else ifelseifelsififelseelifelseifElseIf

しかし、 SimulaPascal、BCPL、Cなど、Algolからより直接的に派生した多くの言語では、この構文のための特別な構文は存在せず、 JavaECMAScriptelse ifなど、Cから派生した多くの構文にも存在しません。これらの言語では、任意の単一の文(この場合は)をブロックで囲むことなく条件文に続けることができるため、この構文は機能します。 [説明が必要]if cond...

条件文のシーケンス内のすべての項が 単一の式の値をテストする場合(例:if x = 0、、 else if x = 1else if x = 2 …)、代替手段としてswitch文を使用できます。switch文を持たない言語では、これらは連鎖的なif-then-elseとして記述できます。

スイッチ文

switch文は多方向分岐をサポートします。多くの場合、式の値を定数値と比較し、最初に一致したコードに制御を移します。一致するものが見つからない場合は、通常、デフォルトのアクションを実行するための規定があります。最適化コンパイラは、制御テーブルを使用してswitch文のロジックを実装する場合があります。動的言語では、ケースは定数式に限定されず、パターンマッチングにまで拡張されることがあります。右側のシェルスクリプトの例では、「*)」によってデフォルトのケースが任意の文字列に一致する正規表現として実装されています。

ガード条件文

エドガー・ダイクストラのガード付きコマンド言語GCL)は、ブール値のガード条件に対応)とそれに対応する文からなるコマンドのリストとして条件付き実行をサポートします。GCLでは、ガードが真である文のうち1つだけが評価されますが、どの文が評価されるかは任意です。このコードでは、

G0 → S0の場合 □ G1 → S1... □ Gn → Snフィ

G iはガード、S iは文です。ガードがどれも真でない場合、プログラムの動作は未定義です。

GCL は主にプログラムの推論を目的としていますが、同様の表記法がConcurrent Pascaloccamでも実装されています。

算術if

Fortran 77までのFortranにおける最も初期の条件文は、値(整数型、実数型、倍精度型)が<0、0、>0のいずれであるかに応じて3つのラベルのいずれかにジャンプする算術if文でした。[6]

次のコードでは、 の値に基づいて制御がラベルの 1 つに渡されますe

 IF ( e )ラベル1 ラベル2 ラベル3    

これは次のシーケンスと同等です。

 e_temp = e IF ( e_temp . LT . 0 ) GOTOラベル1 IF ( e_temp . EQ . 0 ) GOTOラベル2 IF ( e_temp . GT . 0 ) GOTOラベル3                    

算術 if はgotoのように動作するので、非構造化プログラミングであり、構造化プログラミングではありません。IBM 704コンピュータにおける Fortran のオリジナル実装では、if は唯一の条件文でした。このコンピュータでは、テスト分岐命令コードには、これらの 3 つの状態に対応する 3 つのアドレスがありました。他のコンピュータでは、正、ゼロ、負、偶数、オーバーフロー、キャリーなどの「フラグ」レジスタが最後の算術演算に関連付けられており、「アキュムレータが負の場合に分岐」、次に「アキュムレータがゼロの場合に分岐」などの命令が使用されるでしょう。式は一度だけ評価され、整数演算などオーバーフローが発生する可能性のある場合には、オーバーフローフラグまたはキャリーフラグも考慮されることに注意してください。

算術IF文は、Fortran 90規格以降、廃止予定とされていました。Fortran 2018規格では削除されました。しかし、ほとんどのコンパイラは、従来のコードとの互換性を保つため、引き続きサポートしています。

雑談で

他の言語とは対照的に、Smalltalkでは条件文は言語構造ではなく、クラスで2つのパラメータ(両方ともクロージャ)Booleanを取る抽象メソッドとして定義されています。には2つのサブクラス()があり、どちらもメソッドを定義し、最初のクロージャのみを実行し、2番目のクロージャのみを実行します。[7]BooleanTrueFalseTrueFalse

var  = 条件 ifTrue: [ 'foo' ] ifFalse: [ 'bar' ]

JavaScriptの場合

JavaScriptはC言語の構文に似たif-else文をサポートしています。次の例では、ランダムな浮動小数点数(0から1までの値)が0.5より大きい場合に真となる条件文を使用しています。この文では、これを使用して、以下のどちらかをランダムに出力します。Math.random() < 0.5表が出ました!またはテイルスを手に入れました!

if ( Math . random () < 0.5 ) { console . log ( "表でした!" ); } else { console . log ( "裏でした!" ); }        

条件文は以下のように連鎖させることができます。

var x = Math.random ( ); if ( x < 1 / 3 ) { console.log ( " 1人が勝ちました!" ) ; } else if ( x < 2 / 3 ) { console.log ( " 2人が勝ちました!" ) ; } else { console.log ( "3人が同点です" ) ; }                  

ラムダ計算

ラムダ計算では、if-then-else 条件の概念は次の式を使用して表現できます。

真 = λx. λy. x偽 = λx. λy. yもしそうでなければ = (λc. λx. λy. (cxy))
  1. true は最大 2 つの引数を取り、両方が指定されると (カリー化を参照)、指定された最初の引数を返します。
  2. false は最大 2 つの引数を取り、両方が指定されると (カリー化を参照)、指定された 2 番目の引数を返します。
  3. ifThenElse は最大3つの引数を取り、すべての引数が渡されると、2番目と3番目の引数の両方を最初の引数(2つの引数を与えて結果を生成する関数)に渡します。ifThenElse は引数として true または false のみを取るものと想定しており、どちらの場合も与えられた2つの引数をそれぞれ優先する単一の引数に投影し、その引数を返します。

注意: ifThenElse に左と右の条件として 2 つの関数が渡される場合、選択した関数を実際に呼び出すには、ifThenElseの結果に空のタプルも渡す必要があります。そうしないと、 ifThenElse は呼び出されずに関数オブジェクトを返します。()

定義なしで数値を使用できるシステム (Lisp、従来の紙の数学など) では、上記は次のような単一のクロージャとして表現できます。

(( λtrue. λfalse. λifThenElse. ( ifThenElse true 2 3 ) )( λx. λy. x )( λx. λy. y )( λc. λl. λr. c l r ))               

ここで、true、false、 ifThenElseそれぞれの定義にバインドされ、ブロックの最後にそれぞれのスコープに渡されます。

これに対する実用的な JavaScript の類似例 (厳密さのために単一変数の関数のみを使用) は次のとおりです。

var computeResult = (( _true => _false => _ifThenElse => _ifThenElse ( _true )( 2 )( 3 ) )( x => y => x )( x => y => y )( c => x => y => c ( x )( y )));                         

上記の多変数関数を使用したコードは次のようになります。

var computeResult = (( _true , _false , _ifThenElse ) => _ifThenElse ( _true , 2 , 3 ) )(( x , y ) => x , ( x , y ) => y , ( c , x , y ) => c ( x , y ));                      

数字を想定するシステムを使用しない前述の例の別のバージョンを以下に示します。

最初の例では最初の分岐が実行されることを示しており、2 番目の例では 2 番目の分岐が実行されることを示しています。

(( λtrue. λfalse. λifThenElse. ( ifThenElse true ( λFirstBranch. FirstBranch ) ( λSecondBranch. SecondBranch )) )( λx. λy. x )( λx. λy. y )( λc. λl. λr. c l r ))                 (( λtrue. λfalse. λifThenElse. ( ifThenElse false ( λFirstBranch. FirstBranch ) ( λSecondBranch. SecondBranch )) )( λx. λy. x )( λx. λy. y )( λc. λl. λr. c l r ))                 

Smalltalk は、真偽の表現に同様の考え方を使用しており、 と はTrue、メッセージifTrue/ifFalseに異なるFalse応答をするシングルトン オブジェクトです。

Haskell はブール型にまさにこのモデルを使用していましたが、執筆時点では、ほとんどの Haskell プログラムは、別の関数にラップされるか、このページの Haskell セクションに示すように再実装されない限り 、 ifThenElseとは異なり構成されない構文糖構造を使用しています。if a then b else c

条件式

多くの言語は条件式をサポートしています。条件式は文とは異なり、制御フローを制御するのではなく、値として評価されます。条件式の概念は、 1950年代後半にジョン・マッカーシーが記号処理とLISPの研究中に初めて開発されました。

アルゴル

ALGOL 60およびALGOLファミリーの他のメンバーでは、if–then–else式として が使用できます。条件式を含めるというアイデアはジョン・マッカーシーによって提案されましたが、ALGOL委員会はマッカーシーの数学的構文ではなく英語の単語を使用することを決定しました。

myvariable := x > 20の場合1、そうでない場合2         


複合ステートメントはすべて、特徴的な閉じ括弧によって終了(保護)されます。

  • IF選択節:
 IF条件THEN文[ ELSE文] FI 「簡潔な」形式: ( 条件 | ステートメント | ステートメント )
 IF条件1 THENELIF条件2 THEN文 [ ELSE文 ] FI 「簡潔な」形式: ( 条件1 | ステートメント |: 条件2 | ステートメント | ステートメント )

この方式は、ぶら下がっている else の問題を回避するだけでなく、埋め込みステートメントBEGINシーケンスでand を使用する必要も回避しますEND

  • CASE選択句:
 CASEスイッチIN文、文、... [ OUT文 ] ESAC 「簡潔な」形式: ( switch | ステートメント、ステートメント、... | ステートメント )
 CASE switch1 INステートメント、ステートメント、... OUSE switch2 INステートメント、ステートメント、... [ OUTステートメント ] ESAC CASEステートメント の「簡潔な」形式: ( switch1 | ステートメント、ステートメント、... |: switch2 | ステートメント、ステートメント、... | ステートメント )

簡潔な記号を使用した選択節の例:

PROC月の日数 = ( INT年, 月) INT : (月| 31, (年÷×4=0 ∧ 年÷×100≠0 ∨ 年÷×400=0 | 29 | 28)、 31、30、31、30、31、31、30、31、30、31 );

Lisp

条件式は常にLispの基本的な要素です 。純粋なLISPでは関数が使用されます。Scheme RacketCommon LispCONDなどの方言では、以下のようになります 

;; Scheme ( define ( myvariable x ) ( if ( > x 12 ) 1 2 )) ; 'x'の値に応じて、'myvariable'に1または2を割り当てます         
;; Common Lisp ( let (( x 10 )) ( setq myvariable ( if ( > x 12 ) 2 4 ))) ; 'myvariable'を2に代入する           

ハスケル

Haskell 98ではif式のみが存在しif文はなく、elseすべての式は何らかの値を持たなければならないため、この部分は必須です。[8]他の言語では条件文で表現されるロジックは、再帰関数では 通常パターンマッチングで表現されます。

Haskellは遅延評価なので、 ifのような制御構造を通常の式として記述することができます。遅延評価とは、if関数が条件と適切な分岐のみを評価することを意味します(正格言語では3つすべてを評価することになります)。これは次のように記述できます。[9]

if' :: Bool -> a -> a -> a if' True x _ = x if' False _ y = y                  

C系言語

Cおよび関連言語は、次のような条件式を提供する三項演算子をサポートしています。

条件 ?真値 :偽値

条件が真の場合、式は真値(true-value)と評価され、そうでない場合は偽値(false-value)と評価されます。次のコードでは、x > 10の場合、rは「foo」に、そうでない場合は「bar」に代入されます。

r = x > 10 ? "foo" : "bar" ;        

同じことを if 文で実現しようとすると、複数の文が必要になり、r2 回記述する必要が生じます。

もしx > 10ならr = "foo" ;そうでなければr = " bar" ;         

明示的なif-then文の方が読みやすく、三項演算子よりも効率的なコードにコンパイルできると主張する人もいます[10]。一方、簡潔な式の方が繰り返し節が少ないため読みやすく優れていると主張する人もいます。

ビジュアルベーシック

Visual Basicやその他の言語では、条件式として使用できる関数 という関数IIfが用意されています。ただし、これは真の条件式のように動作しません。なぜなら、常に真と偽の両方の分岐が評価されるからです。どちらか一方の結果は破棄され、もう一方の結果はIIf関数によって返されるだけです。

Tcl

Tcl ではifはキーワードではなく関数です(Tclではコマンドまたは と呼ばれますproc)。例えば

if { $x > 10 } { "Foo!"と出力します}      

という関数を呼び出し、if2つの引数を渡します。最初の引数は条件、2番目の引数は真の分岐です。どちらの引数も文字列として渡されます(Tclでは、中括弧で囲まれたものはすべて文字列です)。

上記の例では、関数を呼び出す前に条件が評価されていません。代わりに、関数の実装はif条件を文字列値として受け取り、呼び出し元のスコープ内でこの文字列を式として評価する責任を負います。[11]

このような動作は、コマンドuplevelexprコマンドを使用することで可能になります。Uplevelを使用すると、新しい制御構造をTclプロシージャとして実装できます(例えば、uplevelを使用してwhile構造をTclプロシージャとして実装できます)。[12]

は実際には関数であるためif、値も返します。コマンドからの戻り値は、実行された本体スクリプトの結果、または、式がいずれも0以外で、bodyNが存在しない場合は空文字列となります。 [13]

さび

Rustではifは常に式です。これは、実行される分岐の値に評価されます。()分岐が実行されない場合は、ユニット型に評価されます。分岐が戻り値を提供しない場合は、()デフォルトで に評価されます。式の型がコンパイル時ifに であることを保証するため、各分岐は同じ型の値に評価される必要があります。このため、のない はデフォルトで常に に評価されるため、他の分岐が に評価されない限り、分岐は事実上必須です[14]else()ifelse()

以下は、rx の値に応じて 1 または 2 を割り当てます。

x > 20の場合r = { 1 }、そうでない場合は{ 2 }とします。           

必要ない場合は値を省略できます。

x > 20の場合{ println! ( "xは20より大きい" ); }     

パターンマッチング

パターンマッチングは、条件文(if–then–elseやswitchなど)の代替手段です。Wolfram言語MLなど、関数型プログラミング機能を備えた多くの言語で利用できます。OCaml言語で記述した簡単な例以下に示します

 フルーツを次 のものと一致させます|  「りんご」 -> パイを焼く | 「ココナッツ」->だんご餅を焼く| 「バナナ」->混ぜる;;       

パターンマッチングの強みは、アクションだけでなく値もデータのパターンに簡潔にマッチさせることができることです。以下は、これらの両方の機能を示すHaskellで書かれた例です。

マップ_ [] = []マップf ( h : t ) = f h :マップf t               

このコードは関数mapを定義しています。この関数は、最初の引数(関数)を2番目の引数(リスト)の各要素に適用し、結果のリストを返します。2行は、この場合に考えられる2種類の引数、つまりリストが空の場合(空のリストを返すだけ)と、リストが空でない場合の2種類に対する関数の定義です。

パターンマッチングは厳密に言えば常に選択構造であるとは限りません。Haskellでは、常に一致することが保証された選択肢を1つだけ記述することが可能だからです。この場合、パターンマッチングは選択構造としてではなく、単に名前と値を結び付ける方法として使用されています。しかし、パターンマッチングが利用可能な言語では、選択構造として頻繁に使用されます。

ハッシュベースの条件文

PythonPerlPHPObjective-Cなど、連想配列やそれに類似したデータ構造を持つプログラミング言語では、条件付き代入を実装するためにそれらを使用するのが慣用的です。[15]

pet  =  input ( "名前を付けたいペットの種類を入力してください: " ) known_pets  =  {  "Dog" :  "Fido" ,  "Cat" :  "Meowsles" ,  "Bird" :  "Tweety" , } my_name  =  known_pets [ pet ]

匿名関数を持つ言語、またはプログラマが名前付き関数を変数参照に割り当てることができる言語では、ハッシュをディスパッチ テーブルとして使用して条件付きフローを実装できます。

分岐述語

条件分岐命令の代替として、分岐プレディケーションがあります。プレディケーションとは、制御フローを変更する代わりに、命令を条件付きで実行できるようにするアーキテクチャ上の機能です。

選択システムの相互参照

この表は、各言語の最新の言語仕様を参照しています。仕様が存在しない言語については、公式にリリースされた最新の実装を参照しています。

プログラミング言語構造化された場合スイッチ–セレクト–ケース条件式算術ifパターンマッチング[A]
それからそれ以外そうでなければ
エイダはいはいはいはいはいいいえいいえ
アルゴル60はいはい不要[C]いいえはいいいえいいえ
アルゴル68はいはいはいはいはいはい -ケースはい - 適合条項
APLいいえはいはいはいはいいいえいいえ
Bashシェルはいはいはいはいはいいいえはい
CC++いいえはい不要[B] [C]フォールスルーはいいいえいいえ
C#いいえはい不要[B] [C]はいはいいいえいいえ
コボル不要はい不要[C]はいいいえいいえいいえ
エッフェルはいはいはいはいはいいいえいいえ
F#はいはいはいはい[D]はいいいえはい
フォートランはいはいはいはいはい[G]はい[私]いいえ
行くいいえはい不要[C]はいいいえいいえいいえ
ハスケルはい必要不要[C]はい[D]はいいいえはい
ジャワいいえはい不要[C]フォールスルー[16]はいいいえいいえ
ECMAScriptJavaScriptいいえはい不要[C]フォールスルー[17]はいいいえいいえ
マセマティカいいえはいはいはいはいいいえはい
オベロンはいはいはいはいいいえいいえいいえ
パールいいえはいはいはいはいいいえいいえ
PHPいいえはいはいフォールスルーはいいいえはい
PascalObject PascalDelphiはいはい不要はいいいえいいえいいえ
パイソンいいえはいはいはいはいいいえはい
クイックベーシックはいはいはいはいいいえいいえいいえ
ルビーはいはいはいはいはいいいえはい[H]
さびいいえはいはいはい[D]はいいいえはい
スカラいいえはい不要[C]フォールスルー[要出典]はいいいえはい
SQLはい[F]はいはいはい[F]はいいいえいいえ
迅速いいえはいはいはいはいいいえはい
Tclいいえはいはいはいはいいいえはい
Visual Basic、クラシックはいはいはいはいはいいいえいいえ
ビジュアルベーシック.NETはいはいはいはいはいいいえいいえ
Windows PowerShellいいえはいはいフォールスルーはいいいえいいえ
  1. ^これは、正規表現サポート などの単なる文字列パターン マッチング サポートとは対照的に、プログラミング言語における明確な条件付き構造としてのパターン マッチングを指します
  2. 1 2 #ELIF ディレクティブは、コンパイル前にコードを変更したり、他のファイルをインクルードしたりするために使用されるプリプロセッササブ言語で使用されます。
  3. 1 2 3 4 5 6 C言語系、COBOL、Haskellでよく見られる「else-if 」は言語機能ではなく、ネストされた独立したif-then-else文の集合であり、特定のソースコードレイアウトと組み合わされています。しかし、これはこれらの言語では明確なelse-if構造が実際には必要ではないことも意味します。 else if
  4. 1 2 3 Haskell の case 式と F# および Haskell の match 式では、switch-case とパターン マッチングの両方を使用できます。
  5. ^ Rubycase構文では、正規表現マッチングは条件付きフロー制御の選択肢の一つです。例として、Stack Overflowのこちらの質問をご覧ください。
  6. 1 2 SQLには、両方の役割を果たす2つの類似した構文があり、どちらもSQL-92で導入されました。「検索」式はのように動作し、「単純」式はswitch 文のように動作します。詳細と例については、Case (SQL)を参照してください。CASECASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 [...] ELSE exprDflt ENDif ... else if ... elseCASECASE expr WHEN val1 THEN expr1 [...] ELSE exprDflt END
  7. ^ Fortran 90 ではMERGE組み込み関数が追加されました。Fortran 2023 では C のような三項演算子が追加されました。
  8. ^ パターンマッチングはRuby 3.0で追加されました。[18]一部のパターンマッチング構造はまだ実験段階です。
  9. ^ 算術演算はifFortran 90 では廃止予定とされていました。Fortran 2018 標準では削除されました。

参照

参考文献

  1. ^ アルゴリズム言語 ALGOL 68 に関するレポート草案(PDF) (レポート)。 Mathematisch Centrum (Algol Bulletin 26 の補足)。 1968.p. 55.
  2. ^ 「アルゴリズム言語ALGOL 68改訂報告書」(PDF) . Algol Bulletin(補足47)/ Numer. Math. : 118– 121. 1973.記号表:「太字else if」→「elif」;「簡略else if」→「|:」)
  3. ^ PHP elseif構文
  4. ^ Visual Basic ElseIf構文
  5. ^ POSIX標準シェル構文
  6. ^ “American National Standard Programming Language FORTRAN”. 1978年4月3日. 2007年10月11日時点のオリジナルよりアーカイブ。 2007年9月9日閲覧
  7. ^ “VisualWorks: Conditional Processing”. 2006年12月16日. 2007年10月22日時点のオリジナルよりアーカイブ2007年9月9日閲覧。
  8. ^ Haskell 98 言語とライブラリ:改訂版
  9. ^ 「HaskellWiki における If-then-else 提案」
  10. ^ 「効率的なCのヒント #6 – 三項演算子は使わない « Stack Overflow」Embeddedgurus.com. 2009年2月18日. 2012年9月7日閲覧
  11. ^ 「新しい制御構造」Tclerのwiki 。 2020年8月21日閲覧
  12. ^ 「uplevelマニュアルページ」 www.tcl.tk . 2020年8月21日閲覧
  13. ^ 「ifマニュアルページ」。www.tcl.tk 。 2020年8月21日閲覧
  14. ^ 「if 式と if let 式」 。 2020年11月1日閲覧
  15. ^ 「Pythonでswitch/case文を実装する方法」。2015年1月20日時点のオリジナルよりアーカイブ2015年1月19日閲覧。
  16. ^ Java.sun.com、Java 言語仕様、第 3 版。
  17. ^ Ecma-international.org Archived 2015-04-12 at the Wayback Machine ECMAScript 言語仕様、第 5 版。
  18. ^ 「パターンマッチング」。Ruby 3.0のドキュメント
  • ウィキメディア・コモンズの条件文(コンピュータプログラミング)関連メディア
  • IF NOT (ActionScript 3.0) ビデオ
「https://en.wikipedia.org/w/index.php?title=Conditional_(computer_programming)&oldid=1319312034」より取得