LoginSignup
6
9

More than 5 years have passed since last update.

.NETにおけるタプル

Last updated at Posted at 2015-10-23

昨年はSwift、今年はElixirをつまみ食いしていますが、
これら2つの言語で「タプル」という概念を新しく学びました。

タプルとは

Wikipedia

要は、値の組を作って関数の引数や戻り値に使えますよ、と理解しています。

使用を検討する状況としては、関数の戻り値として複数の値を返したいけど、
わざわざ戻り値用の構造体を作るのはちょっと手間だなーというときに、さくっと使えます。

.NETにもタプル

ところで普段の業務ではVB.NETを使っているのですが、
実は.NET Framework 4.0からタプルが導入されていました。
(新しい言語を学ぶと、今使っているもので新たな発見があるのが嬉しいです。)

Tuple クラス

使い方

例)エラーチェックを行う。エラーの場合、エラー理由も返す

VB.NET
Public Sub Main(args)
    Dim txt As String = "cccc"

    Dim result = ValidText(txt)

    '結果が不正の場合、エラーメッセージを表示する。
    If result.Item1 = False Then
        MsgBox(result.Item2)
    End If

End Sub

'文字列のチェック処理。戻り値.Item1がFalseであれば、不正。
Public Function ValidText(txt As String) As Tuple(Of Boolean, String)
    If String.IsNullOrEmpty(txt) Then
        Return Tuple.Create(False, "空文字です。")
    End If

    If Not txt.StartsWith("a") Then
        Return Tuple.Create(False, "aから始まっていません。")
    End If

    Return Tuple.Create(True, String.Empty)
End Function

所感

複数戻り値を返したいケースはたまーにあるので、さっとできるのは便利だけれども、
タプルの各要素へのアクセス方法がItem1、Item2..という感じで
それが何を示しているのかソースコード上のその部分から読み取れない。
(読み解くにはタプルを作っている場所で何をしているか知る必要がある。)
Swiftみたいにラベルを付けられたり、Elixirのキーワードリストみたいにできればいいのになーと思う
(キーワードリストに対し、ディクショナリの配列を返すようにするのはちょっとなぁ...と思う)

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9