概要

型が違っていてもよい2つ以上のデータを格納できるコンテナ型。格納するデータの数や型は固定。 C言語の構造体から各フィールドの名前がなくなったみたいなもの。

静的な型付けの言語でないと意味がないかもしれない。要素ごとの型も静的に決まる。

Java

Javaにはタプルの機能はない。 Scalaのjarをクラスパスに含めておけば、scala.Tuple2等をそのまま使うことはできる。書き方はScalaに比べたら面倒ではあるが。

scala.Tuple2<Integer, String> t = new scala.Tuple2<>(1, "abc");

Scala

コンマ区切りの2つ以上の値を()で囲めば、タプルになる。

関数の返り値としてタプルを使えば、 複数の結果を返すことができる。

タプルは実際には普通のオブジェクトで、 2要素であれば scala.Tuple2、3要素であれば scala.Tuple3 というクラスのインスタンスである。

関数にタプルを1つだけ渡して呼び出すには、 ()はもともと関数呼び出しの引数を囲む記号なので、本来は二重にカッコで囲まないといけないのだが、省略してカッコを1組だけにしても大丈夫みたい。

Some(1, "abc") // => Some((1, "abc"))

これでAnyの引数1つだけの関数だと、実質は任意の数の引数を渡せることになる。 可変長引数の仕組みは別途あるのだが。

逆にこのカッコを省略できる機能でハマることもある。

Python

Pythonでいうタプルは、リストがイミュータブルになっただけのようである。なので、Pythonのタプルはリストとほとんど使い方が同じ。

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク