条件付きロジックを使用して複数の実行パスを作成する
たとえば、フォルダー内のファイルに基づいてバックアップ ファイルを作成するプログラムがあるとします。 このプログラムは、一連のファイルを検索して圧縮する数行のコードで構成されています。 バックアップがその日に作成されていない場合にのみバックアップ ファイルを作成するロジックを追加するにはどうすればよいでしょうか。 このプログラムには、その条件をチェックし (バックアップが既に作成されているかどうか)、次に、その条件が true であるかどうかに基づいて異なる処理を実行する (その日のバックアップ ファイルが存在する場合は、バックアップを実行しない) 方法が必要になります。
if コンストラクトを使用してコード分岐を作成する
if
コンストラクトを使用して、ブール式を評価します。 この式が true
と評価された場合、プログラムはコードの特定の分岐を実行します。 if
コンストラクトの構文は次のようになります。
if <condition> then <expression>
より具体的なコード例は、次の例のようになります。
let age = 66
if age > 65
then printfn "Senior citizen"
else 句を使用して代わりの分岐を定義する
if
ステートメントが false
と評価された場合は、if
コンストラクトと共に else
句を使って、コードの別の分岐を実行します。
else
句の使用方法を次に示します。
let age = 66
if age > 65
then printfn "Senior citizen"
else printfn "Citizen"
if コンストラクトを式として使用する
ここまで、if
と else
を使用してコード内に別々の分岐を作成する方法を見てきました。 コードが異なる分岐をたどる場合、ブール条件が true
と false
のどちらに評価されるかどうかに基づいて、異なる結果が得られます。 お気づきでないかもしれませんが、式が実行されたときは、値が生成されます。
次の例のようにコードを記述すると、その結果が明らかになります。
let age = 64
let message = if age > 65 then "Senior citizen" else "Citizen"
printfn "%s" message
この場合、if
と else
が三項式のように機能します。 条件が true
の場合は、ある値を返します。 false
の場合は、もう一方の値を返します。 どちらの場合も、値が返されます。 すべての if
式に当てはまる事実です。
前のコード例を見直し、その舞台裏を見てみましょう。
let age = 66
if age > 65 then printfn "Senior citizen" else printfn "Citizen"
先ほど見たのと同じコード例ですが、今回は、if
と else
が同じ行にあります。 printf
操作の重要なアクションは関数内で発生するため、関数から実際の値を返す必要はありません。 したがって、printfn "Senior citizen"
式の戻り値は unit
型の値を生成します。
Note
unit
は、実際の値が返されない場合のプレースホルダーとして機能する値です。 void
や None
と同じと考えることができます。
もう 1 つ注意すべき点は、型を混在させることができないことです。 if
と else
は同じデータ型を返す必要があります。そうしないと、エラーが発生します。 たとえば、次の例のようなコードを記述することはできません。
let someCondition = true
let value = if someCondition then "hello" else 1 // not allowed
この場合、if
で戻り値の型が string
であると判断されるため、else
でこの型を int
に変更することはできません。 上記のコードを動作させるには、次のように変更する必要があります。
let someCondition = true
let value = if someCondition then "hello" else "1" // allowed
elif コンストラクトを使用する
ここまで、if
と else
がどのように動作するのかについて見てきました。 elif
は、if
を使用するのと同じように使用できるもう 1 つのコンストラクトです。 if
コンストラクトと同様に、elif
コンストラクトはブール値を受け取り、if
の直後に追加する必要があります。 elif
コンストラクトは、if
条件が false
と評価された場合に実行されます。 elif
の使用方法の例を次に示します。
let cardValue = 1
let cardDescription = if cardValue = 1 then "Ace" elif cardValue = 14 then "Ace" else "A card"
printfn "%s" cardDescription