scalaにおけるmapとforeachの違い

948 ワード

Scalaの集合オブジェクトにはforeachとmapの2つの方法があります.2つのメソッドの共通点は、集合オブジェクトを巡回し、各項目に対して指定されたメソッドを実行することです.両者の違いはforeachに戻り値(正確にはvoid)がなく、mapは集合オブジェクトを返すことである.b.getClassはvoidであり、c.getClassはcolletionである.コードの9-11行目を見て、foreachとmapの実行結果は一致しています.結論:foreachはmapに代わることができない.mapメソッドはforeachの代わりに使用できます.
質問:なぜscalaはforeachとmapの2つの方法を提供しているのでしょうか.本人の見方はscalaが1種の関数式のプログラミングの範式を支持する言語として、必然的に1種のメカニズムを導入して数学の中で関数の概念を支持しなければならなくて、数学の中で関数はマッピングで、だからscalaの中でmapの方法があって少しもおかしくありません.foreachは、コレクションをマッピングする必要はありませんが、コレクションを巡回する必要がある場合にのみ使用されます.要するに、foreachはコレクションを巡回するために使用され、mapはコレクションを別のコレクションにマッピング(変換)するために使用される.
object arrayTest extends App{
  var increase=(x:Int)=>x+1
  val someNumbers = List ( -11, -10, - 5, 0, 5, 10)
  var b = someNumbers.foreach(increase)
  println(b.getClass)
  var c = someNumbers.map(increase)
  println(c.getClass)

  c.foreach((x:Int)=>print(x+" "))
  println()
  c.map((x:Int)=>print(x+" "))

}