昨年はSwift、今年はElixirをつまみ食いしていますが、
これら2つの言語で「タプル」という概念を新しく学びました。
#タプルとは
Wikipedia
要は、値の組を作って関数の引数や戻り値に使えますよ、と理解しています。
使用を検討する状況としては、関数の戻り値として複数の値を返したいけど、
わざわざ戻り値用の構造体を作るのはちょっと手間だなーというときに、さくっと使えます。
#.NETにもタプル
ところで普段の業務ではVB.NETを使っているのですが、
実は.NET Framework 4.0からタプルが導入されていました。
(新しい言語を学ぶと、今使っているもので新たな発見があるのが嬉しいです。)
#使い方
例)エラーチェックを行う。エラーの場合、エラー理由も返す
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のキーワードリストみたいにできればいいのになーと思う
(キーワードリストに対し、ディクショナリの配列を返すようにするのはちょっとなぁ...と思う)