Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

main 関数

💡 お知らせ: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、原文(英語)を参照するか、翻訳にご協力ください。

すべての Flix プログラムのエントリーポイント(Entry point)は main 関数です。main 関数は引数を取らず、Unit を返す必要があります:

def main(): Unit \ IO =
    println("Hello World!")

main のエフェクト

main 関数では、次のものを自由に組み合わせて使うことができます:

  • プリミティブエフェクト: IONonDet
  • デフォルトハンドラを持つ任意のエフェクト: 例えば EnvExitClockLogger など。

デフォルトハンドラを持つエフェクトは、Flix コンパイラによって自動的に IO へと変換されます。詳細はデフォルトハンドラを参照してください。

例えば、main では EnvExit エフェクトを使うことができます:

use Sys.Env
use Sys.Exit

def main(): Unit \ {Env, Exit} =
    let args = Env.getArgs();
    match List.head(args) {
        case None    =>
            println("Missing argument.");
            Exit.exit(1)
        case Some(a) =>
            println("Hello ${a}!")
    }

コマンドライン引数へのアクセス

プログラムに渡されたコマンドライン引数には、Env エフェクトを通じて Env.getArgs() を呼び出すことでアクセスできます:

use Sys.Env

def main(): Unit \ {Env, IO} =
    let args = Env.getArgs();
    println("Arguments: ${args}")

プログラムの終了

Exit.exit を使うと、特定の終了コード(Exit code)を指定してプログラムを終了できます:

use Sys.Exit

def main(): Unit \ Exit =
    Exit.exit(0)

なぜ main はエフェクトを持たなければならないのか?

Flix は、main がエフェクトを持つことを要求します。もし main が純粋であれば、そのプログラムを実行する理由がないからです。通常、この要件は main がコンソールへ出力したり、その他の副作用を持つことで満たされます。