条件付きロジックを使用して複数の実行パスを作成する

完了

たとえば、フォルダー内のファイルに基づいてバックアップ ファイルを作成するプログラムがあるとします。 このプログラムは、一連のファイルを検索して圧縮する数行のコードで構成されています。 バックアップがその日に作成されていない場合にのみバックアップ ファイルを作成するロジックを追加するにはどうすればよいでしょうか。 このプログラムには、その条件をチェックし (バックアップが既に作成されているかどうか)、次に、その条件が 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 コンストラクトを式として使用する

ここまで、ifelse を使用してコード内に別々の分岐を作成する方法を見てきました。 コードが異なる分岐をたどる場合、ブール条件が truefalse のどちらに評価されるかどうかに基づいて、異なる結果が得られます。 お気づきでないかもしれませんが、式が実行されたときは、値が生成されます。

次の例のようにコードを記述すると、その結果が明らかになります。

let age = 64
let message = if age > 65 then "Senior citizen" else "Citizen"
printfn "%s" message

この場合、ifelse が三項式のように機能します。 条件が true の場合は、ある値を返します。 false の場合は、もう一方の値を返します。 どちらの場合も、値が返されます。 すべての if 式に当てはまる事実です。

前のコード例を見直し、その舞台裏を見てみましょう。

let age = 66
if age > 65 then printfn "Senior citizen" else printfn "Citizen"

先ほど見たのと同じコード例ですが、今回は、ifelse が同じ行にあります。 printf 操作の重要なアクションは関数内で発生するため、関数から実際の値を返す必要はありません。 したがって、printfn "Senior citizen" 式の戻り値は unit 型の値を生成します。

Note

unit は、実際の値が返されない場合のプレースホルダーとして機能する値です。 voidNone と同じと考えることができます。

もう 1 つ注意すべき点は、型を混在させることができないことです。 ifelse は同じデータ型を返す必要があります。そうしないと、エラーが発生します。 たとえば、次の例のようなコードを記述することはできません。

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 コンストラクトを使用する

ここまで、ifelse がどのように動作するのかについて見てきました。 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