以下の内容はhttps://tnakamura.hatenablog.com/entry/2025/10/20/kekkaより取得しました。


Kekka - Result Type for C#

関数型ドメインモデリングを読んで、あの本は F# だったけど、C# でも同じことをやってみたくなった。ただ、C# には標準で Result クラスがないので自作しないといけない。F# のコンピューテーション式も C# にはない。ただ、LINQ のクエリ式を使えば同じことができるかも、と思ってライブラリを作成してみた。

github.com

「Kekka(結果)」っていう名前。Result クラスとちょっとした拡張メソッドが用意した。使い方としては基本的に Result.OkResult.Error で値をラップするだけ。あと、LINQ のクエリ式を使うことで F# と似た書き味で書くことができる。Railway Oriented Programming。

using Kekka;

var result1 = from x in Result.Ok<decimal, Exception>(2)
              from y in Result.Ok<decimal, Exception>(x)
              from z in Result.Ok<decimal, Exception>(y)
              select x + y + z;

if (result1.TryGetValue(out var value))
{
    Console.WriteLine($"result1: {value}");  // Output: result1: 6
}

var result2 = from x in Result.Ok<decimal, Exception>(2)
              from y in Result.Error<decimal, Exception>(new Exception("Error!!"))
              from z in Result.Ok<decimal, Exception>(3)
              select x + y + z;

if (result2.TryGetError(out var error))
{
    Console.WriteLine($"result2: {error.Message}");  // Output: result2: Error!!
}

関数型ドメインモデリングの著者が GitHub に、本で紹介したサンプルのソースコードを公開していたので、それを C# で移植してみた。

github.com

自作の Result クラスを使って、サンプルを C# に置き換えることができたので、少なくとも目標としていた Railway Oriented Programming というか、関数型ドメインモデリングC# で行うための最低限の機能は実装できたかな。




以上の内容はhttps://tnakamura.hatenablog.com/entry/2025/10/20/kekkaより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14