不変コレクション詳解
List、Map、Setなどの基本的な不変コレクションを学び、効率的な使い方を身に付けます。
「不変コレクション詳解」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全3レッスンが含まれています。
不変コレクション:概要
不変コレクションへようこそ!Scalaでは、特に関数型プログラミングにおいて、堅牢で並行処理に対応し、予測しやすいコードを書くための基盤となります。
List、Map、Setなどの基本的な型を取り上げ、効率的かつ安全な使い方に焦点を当てます。
不変性が重要な理由
不変性とは、いったんコレクションを作成すると変更できないことを意味します。「変更」しているように見える操作も、実際には新しいコレクションを返します。
- 予測しやすさ:コードについて考えやすくなります。
- スレッドセーフ:データが変化しないため、ロックは必要ありません。
- 副作用がない:操作によって別の場所のデータが予期せず変更されることはありません。
ScalaのList:順序付きシーケンス
ScalaのListは、同じ型の要素からなる不変の順序付きシーケンスです。順序が重要な逐次データに適しています。
要素を列挙するだけでリストを作成できます。
object Main {
def main(args: Array[String]): Unit = {
val numbers = List(1, 2, 3, 4, 5)
val fruits = List("apple", "banana", "cherry")
println(s"Numbers list: $numbers")
println(s"Fruits list: $fruits")
}
}Listの操作:head、tail、cons
Listでは、head(先頭要素)やtail(リストの残りの部分)を取得するなど、一般的な操作を行えます。::(cons)演算子は要素を先頭に追加し、新しいリストを作成するために使います。
object Main {
def main(args: Array[String]): Unit = {
val numbers = List(10, 20, 30)
println(s"Original list: $numbers")
println(s"Head of list: ${numbers.head}") // 10
println(s"Tail of list: ${numbers.tail}") // List(20, 30)
val newList = 5 :: numbers // Prepend 5
println(s"List with 5 prepended: $newList")
}
}ScalaのMap:キーと値の関連付け
Mapは、キーと値のペアを格納する不変コレクションです。各キーは一意で、1つの値に対応します。Mapは、特定のキーから値を検索するのに適しています。
object Main {
def main(args: Array[String]): Unit = {
val ages = Map("Alice" -> 30, "Bob" -> 25, "Charlie" -> 35)
val codes = Map(1 -> "One", 2 -> "Two")
println(s"Ages map: $ages")
println(s"Codes map: $codes")
}
}Mapの操作:アクセスと更新
Mapの値にはキーを使ってアクセスできます。キーと値のペアを「更新」または「追加」するには、変更内容を反映した新しいMapを作成します。元のMapは変更されません。
object Main {
def main(args: Array[String]): Unit = {
val ages = Map("Alice" -> 30, "Bob" -> 25)
println(s"Original ages: $ages")
println(s"Bob's age: ${ages("Bob")}")
val updatedAges = ages + ("Charlie" -> 35) // Add new pair
println(s"Ages after adding Charlie: $updatedAges")
val changedAges = updatedAges + ("Alice" -> 31) // Update Alice's age
println(s"Ages after updating Alice: $changedAges")
}
}ScalaのSet:一意な要素
Setは、一意な要素からなる不変コレクションです。Listとは異なり、Set内の要素の順序は保証されず、重複する要素は自動的に無視されます。
Setは、要素の存在確認や一意性の確保に最適です。
object Main {
def main(args: Array[String]): Unit = {
val numbers = Set(1, 2, 2, 3, 4, 3, 5)
val letters = Set('a', 'b', 'a')
println(s"Unique numbers: $numbers")
println(s"Unique letters: $letters")
}
}Setの操作:追加、削除、和集合
ListやMapと同様に、Setで要素を追加・削除する操作も新しいSetを返します。union(集合の結合)など、集合論に基づく操作も実行できます。
object Main {
def main(args: Array[String]): Unit = {
val setA = Set(1, 2, 3)
val setB = Set(3, 4, 5)
println(s"Set A: $setA")
println(s"Set B: $setB")
val addedSet = setA + 4 // Add element
println(s"Set A + 4: $addedSet")
val removedSet = setA - 2 // Remove element
println(s"Set A - 2: $removedSet")
val unionSet = setA union setB // Combine sets
println(s"Set A union Set B: $unionSet")
}
}不変性:元のコレクションは残る
Scalaの不変コレクションに対する「変更」操作はすべて新しいコレクションを返すことを覚えておくことが重要です。元のコレクションが変更されることはありません。
この動作は、Scalaの関数型プログラミングの基盤となるものです。
object Main {
def main(args: Array[String]): Unit = {
val originalList = List(10, 20, 30)
println(s"Original List: $originalList")
val doubledList = originalList.map(_ * 2) // map returns a NEW list
println(s"List after map: $doubledList")
println(s"Original list is still: $originalList") // Unchanged!
}
}理解度チェック
次のScalaコードを考えてみましょう。
val mySet = Set(1, 2, 3)
val newSet = mySet + 3 + 4
val finalSet = newSet - 2これらの操作の後、mySetの値はどうなるでしょうか。
復習:不変コレクション
Scalaの基本的な不変コレクションについて、詳しく学びました。
- List:順序付きシーケンスで、逐次データに適しています。
- Map:キーと値のペアで、検索に効率的です。
- Set:一意な要素の集合で、存在確認に適しています。
重要なポイントは不変性です。操作は常に新しいコレクションを返すため、予測しやすさと安全性が保たれます。
よくある質問
「不変コレクション詳解」レッスンは無料ですか?
はい。「不変コレクション詳解」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全3レッスンが含まれています。
「不変コレクション詳解」で何を学びますか?
List、Map、Setなどの基本的な不変コレクションを学び、効率的な使い方を身に付けます。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。
「不変コレクション詳解」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?
はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。