C#7のタプル

C#7の新機能の話です。

言語レベルでタプルに対応するそうです。なお、System.Tupleとは関係がありません。
ざっくり言うと、メソッドの引数や戻り値、プロパティの型などに匿名型が使える様になります。

System.Tupleを使った場合も汎用の型として同様のことが行えますが、System.TupleはメンバへのアクセスがItem1やItem2のようにメンバの意味が分かる名称で無いため、可読性が悪くあまり使いたい機能では無かったです。

タプルを使用した戻り値は以下のようなコードになります。

public (int sum, int count) Tally(IEnumerable values) { … }

var t = Tally(myValues);
Console.WriteLine($”Sum: {t.sum}, count: {t.count}”);

Tallyメソッドの戻り値がsumとcountの2つになっています。
引数と同じように括弧で囲って複数記載できるようになっています。

Tallyメソッドの呼び出し側は、戻り値を変数tに代入しています。
tは、sumとcountメンバを持つ匿名メソッドのようになっています。

この機能追加によって、out引数を使用したり、戻り値専用に一時格納用クラスを定義する必要がなくなり、シンプルで可読性の高い実装になりそうです。

コメントを残す