JavaやらC#でプログラムを書いていると、『返り値を複数返したい』ケースが出てきます。
特に、違う型の返り値を返したい場合が厄介です。
返り値を返すためだけにBeanクラスを作ったりする。。。というのは面倒ですからね。
・・・まぁ、返り値を複数返したい時点でクラス/メソッド設計が微妙という突っ込みはありますが、
それを言ってしまうと本末転倒なのでここでは省略します。
scalaでは返り値を複数返したい場合、Tupleという型があります。
一言でいえば、異なる型のインスタンスを格納可能なListという感じです。
イミュータブルで、異なる型のインスタンスを混在して格納出来て、型指定も可能。
とりあえず使ってみたサンプルは下記の通りです。
■TupleMain.scala
package jp.gr.kmtn.scalatutorial.grammertips
/**
* タプルテスト用メインクラス
*
* @author Fukushi-
*/
object TupleMain {
/**
* タプルテスト用プログラムエントリポイント
*/
def main(args: Array[String]): Unit =
{
val tuplePair = ("Arg1", 2)
Console.println(tuplePair);
Console.println(tuplePair.getClass());
Console.println(tuplePair._1);
Console.println(tuplePair._2);
val tuplePairGenerics: Tuple2[Int, String] = (100, "Arg2")
Console.println(tuplePairGenerics);
Console.println(tuplePairGenerics.getClass());
Console.println(tuplePairGenerics._1);
Console.println(tuplePairGenerics._2);
val tupleQuintet = ("Args1", 2, 3, "Args4", "Args5");
Console.println(tupleQuintet.getClass());
}
}
で、実行結果は下記の通り。
■実行結果
(Arg1,2)
class scala.Tuple2
Arg1
2
(100,Arg2)
class scala.Tuple2
100
Arg2
class scala.Tuple5
どうやら、指定した引数の数に応じてTuple2、Tuple3...という別々の型が用意されているようです。
いくつまであるかは興味深い所ですが、そんな増える時点で他の所を疑うべきなのは確かですね。
scalaで出来ることを並べてみる:タプル
登録:
コメントの投稿 (Atom)
0 コメント:
コメントを投稿