あけましておめでとうございます。
桁数が揃っていないので、ちょっと直しました。
桁数を揃えたバージョンがこちらです。
なお、もう副作用まみれで副作用のない書き方はどうしたものかっていう気分です。
"abc" * 3ってやると"abcabcabc"って結果になるのは、なんとなくScalaっぽい気がしました。
あけましておめでとうございます。
桁数が揃っていないので、ちょっと直しました。
桁数を揃えたバージョンがこちらです。
なお、もう副作用まみれで副作用のない書き方はどうしたものかっていう気分です。
"abc" * 3ってやると"abcabcabc"って結果になるのは、なんとなくScalaっぽい気がしました。
scala> List(1, 2, 3).flatMap(x => List(x*2)) res8: List[Int] = List(2, 4, 6) scala> List(1, 2, 3).flatMap(x => List("a")) res9: List[String] = List(a, a, a) scala> List(1, 2, 3).flatMap(_ => List("a")) res10: List[String] = List(a, a, a)
flatMap自体はこういう説明。
コレクションの要素を変換する。関数fでAを処理して複数のBを返すと、それらを結合した新しいコレクションが作られる。
Scalaコレクションメソッドメモ(Hishidama's Scala collection method Memo)
Modegramming Style: Scala Tips / flatMapとbind(>>=)の違い
使い方はなんとなくこんな感じ。
flatMapはbind(>>=)とほぼ同じという話まで持ち上がってきており、リストなどから値を取り出して、それを関数に渡すという理解がいまいまのところ。
プログラミングで、メソッドや関数の、名前・戻り値や引数の型などの組み合わせ。
RubyやPythonとは違い、シグネチャが一意である場合に買い切り2つ以上のメソッドを同じ名前にする、つまり多重定義することができるのがJavaとかScala。