F# インタラクティブとは

完了

場合によっては、アプリケーションの作成、パッケージ化、配布というプロセスを実行したくないことがあります。 F# インタラクティブは、対話型プログラミングとスクリプトの環境です。 コンソールやスタンドアロンのスクリプト ファイルを使ってリアルタイムでコードを記述し、評価できるため、アイデアを簡単にコードへと反映できます。

F# インタラクティブの開始

F# インタラクティブは .NET SDK に組み込まれています。 .NET CLI dotnet fsi コマンドを使って開始できます。

dotnet fsi

Read-Evaluate-Print Loop (REPL)

F# インタラクティブを起動すると、read-evaluate-print loop (REPL) セッションが開始され、コンソールで F# コードを記述して、その出力をすぐに評価できます。

Microsoft (R) F# Interactive version 13.9.201.0 for F# 9.0 
Copyright (c) Microsoft Corporation. All Rights Reserved.

For help type #help;;

>

式の実行と評価

入力を評価するには、> 文字の後に入力する必要があります。

> #help;;

たとえば、#help コマンドを実行すると、出力に F# インタラクティブのヘルプ メニューが表示されます。

F# Interactive directives:

    #r "file.dll";;                               // Reference (dynamically load) the given DLL
    #i "package source uri";;                     // Include package source uri when searching for packages
    #I "path";;                                   // Add the given search path for referenced DLLs
    #load "file.fs" ...;;                         // Load the given file(s) as if compiled and referenced
    #time ["on"|"off"];;                          // Toggle timing on/off
    #help;;                                       // Display help
    #help "idn";;                                 // Display documentation for an identifier, e.g. #help "List.map";;
    #r "nuget:FSharp.Data, 3.1.2";;               // Load Nuget Package 'FSharp.Data' version '3.1.2'
    #r "nuget:FSharp.Data";;                      // Load Nuget Package 'FSharp.Data' with the highest version
    #clear;;                                      // Clear screen
    #quit;;                                       // Exit
    
F# Interactive command line options:

    See 'dotnet fsi --help' for options

;;文字は、式の末尾を区切ります。 ;; 文字を入力するまで、コードは評価されません。 この構造体は、コードが改行文字で区切られていないため、複数行の式を記述する場合に便利です。

F# コードの評価も同じように動作します。 次のコードでは、コンソールにメッセージが出力されます。

> printfn "Hello World!";;

評価された出力は次のようになります。

Hello World!
val it: unit = ()

最初の行には評価されたコードからの出力が表示され、2 行目には出力の型情報が表示されます。 この場合、コンソールへの値 (val) の出力は unit 型であり、 () トークンによって表され、 it 名にバインドされます。 さらに操作を実行するときは、後でプログラムで it の値にアクセスできます。

REPL の終了

F# インタラクティブの REPL を使ったら、#q または #quit コマンドを使って終了します。

> #q;;

F# スクリプト ファイル

さらにコードを記述すると、 fsx ファイル拡張子を持つスクリプトにコードを保存できます。

コンソールにメッセージを印刷するのと同じ例を使用する場合は、 my-script.fsx という名前のファイルを作成してコードを記述できます。

printfn "Hello World!"

ただし、 fsx ファイルでは、式の最後に ;; を使用する必要はないということです。 不要になる理由は、スクリプト ファイルの場合、F# インタラクティブではインデントや改行などの標準的な F# コード書式設定ガイドラインを使用できるためです。

ソース コードをコンパイルした後にそのコンパイル済みのアセンブリを実行する代わりに、dotnet fsi を実行して F# コードが含まれているスクリプト ファイルの名前を指定するだけで、F# インタラクティブによってリアルタイムでコードが読み取られ、実行されます。

dotnet fsi my-script.fsx

このスクリプトを実行すると、次の出力が生成されます。

Hello World!