コンソール アプリケーション

この記事では、F# コンソール アプリケーションを構造化する方法について学びます。

暗黙的なエントリ ポイント

既定では、F# アプリケーションにより暗黙的なエントリポイントが使用されます。 たとえば、次のプログラムでは、エントリ ポイントは暗黙的であり、プログラムが実行されると、コードは最初から最後の行まで実行されます。

open System

let printSomeText() =
    let text = "Hello" + "World"
    printfn $"text = {text}"

let showCommandLineArgs() =
    for arg in Environment.GetCommandLineArgs() do
        printfn $"arg = {arg}"

printSomeText()
showCommandLineArgs()
exit 100

明示的なエントリ ポイント

必要に応じて、明示的なエントリポイントを使用できます。 通常、次の理由のいずれかによる場合です。

  • System.Environment.GetCommandLineArgs() を使用するのではなく、関数に渡された引数を使用してコマンドライン引数にアクセスしたい場合。

  • exit を使用するのではなく、返された結果からエラーコードを返す場合。

  • コンソール アプリケーションの最後のファイルでコードを単体テストする必要がある場合。

次の例では、明示的なエントリポイントを持つ単純な main 関数を示しています。

[<EntryPoint>]
let main args =
    printfn "Arguments passed to function : %A" args
    // Return 0. This indicates success.
    0

このコードをコマンド ライン EntryPoint.exe 1 2 3 を使用して実行すると、出力は次のようになります。

Arguments passed to function : [|"1"; "2"; "3"|]

構文

[<EntryPoint>]
let-function-binding

解説

上記の構文で、let-function-binding は、let バインドで記述した関数の定義です。

実行可能ファイルとしてコンパイルされるプログラムのエントリ ポイントは、実行が正式に開始される位置です。 F# アプリケーションにエントリ ポイントを指定するには、プログラムの main 関数に EntryPoint 属性を適用します。 (let バインドを使用して作成される) この関数は、最後にコンパイルされるファイルの最後の関数である必要があります。 最後にコンパイルされるファイルは、プロジェクト内の最後のファイル、またはコマンド ラインに渡す最後のファイルです。

エントリ ポイント関数の型は string array -> int です。 コマンド ラインに指定された引数は、文字列の配列に入れて main 関数に渡されます。 配列の最初の要素は、最初の引数です。実行可能ファイルの名前は、他の言語のものであるため、配列には含まれません。 戻り値は、プロセスの終了コードとして使用されます。 通常、ゼロは成功を示します。ゼロ以外の値はエラーを示します。 ゼロ以外のリターン コードの特定の意味について規則はありません。リターン コードの意味は、アプリケーションによって異なります。

関連項目