次のステップ
💡 お知らせ: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、原文(英語)を参照するか、翻訳にご協力ください。
いよいよ、最初の本格的なプログラムを書く準備が整いました!
ここでは、UNIX の由緒あるワードカウント(wc)プログラムの簡単な変種を書いてみます。
この機会に、Flix で代数エフェクト(Algebraic effects)をどのように使うかを紹介します。
use Fs.FileRead
def wc(file: String): Unit \ { FileRead, IO } =
match FileRead.readLines(file) {
case Ok(lines) =>
let totalLines = List.length(lines);
let totalWords = List.sumWith(numberOfWords, lines);
println("Lines: ${totalLines}, Words: ${totalWords}")
case Err(_) =>
println("Unable to read file: ${file}")
}
def numberOfWords(s: String): Int32 =
s |> String.words |> List.length
def main(): Unit \ { FileRead, IO } =
wc("Main.flix")
このプログラムは次のように動作します。
まず、ファイル名を受け取り、FileRead エフェクトを使ってファイルからすべての行を読み込む wc 関数を定義します。
ファイルの読み込みに成功した場合は、次の値を計算します:
List.lengthを使った行数。- 各行に
numberOfWordsを適用した結果を合計して求めた単語数。
計算結果は println を使ってターミナルに出力されます。
ファイルを読み込めなかった場合は、代わりにエラーメッセージが出力されます。
wc 関数の型とエフェクトのシグネチャには、エフェクト集合 {FileRead, IO} が指定されており、これらのエフェクトが必要であることを示しています。FileRead と IO はどちらもデフォルトハンドラを持っているため、main の中で明示的にハンドラを呼び出す必要はありません。