【Scala】イテレーションの代わりにコレクション操作を使おう!

scala
scalaプログラミング言語

Scalaのコレクション操作は、データを処理する際に効率的であり、コードの可読性を向上させるための便利な方法です。イテレーション(ループ)を使わずに、コレクション操作を活用してコードを効率的に書く方法を紹介します。

map 要素の変換

map関数を使用すると、コレクション内の各要素を変換できます。
以下はリストの値を2倍にするコードです。

val numbers = List(1, 2, 3, 4, 5)
val doubled = numbers.map(_ * 2) // 各要素を2倍に

filter 要素のフィルタリング

filter関数を使用すると、コレクション内の条件に合致する要素だけを抽出できます。
以下はリストの値の内、偶数のみを抽出するコードです。

val numbers = List(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter(_ % 2 == 0) // 偶数のみ抽出

reduce 要素の集計

reduce関数を使用すると、コレクション内の要素を集計できます。
以下はコレクション内の要素を合計するコードです。

val numbers = List(1, 2, 3, 4, 5)
val sum = numbers.reduce(_ + _) // 合計

チェーン操作

ここでは、紹介した”map”、”filter”、”reduce”を組み合わせ、「リスト内の偶数要素のみ2倍し集計する」処理を紹介します。その際に①イテレーションを使った従来のJava的なコードと、②コレクション操作を使ったScala的なコードの2種類を紹介します。

①イテレーションを使用したコード

val numbers = List(1, 2, 3, 4, 5)
var sum = 0
for (number <- numbers) {   if (number % 2 == 0) {          // 偶数のみ2倍して加算
          sum += number * 2
      }
}

②コレクション操作を使用したコード

val numbers = List(1, 2, 3, 4, 5)

// チェーン操作
val result = numbers.filter(_ % 2 == 0).map(_ * 2).reduce(_ + _)

まとめ

コレクション操作を使用したScalaの書き方は、コードが簡潔で読みやすく、バグのリスクが低いという利点があります。また、内部的に処理が最適化されるためパフォーマンスが向上します。
Scalaの強みを活かすため、積極的にコレクション操作を使用しましょう。

タイトルとURLをコピーしました