クラス、オブジェクト、パッケージ
Scalaでクラスを定義し、オブジェクトを作成し、パッケージを使ってコードを整理する方法を理解します。
「クラス、オブジェクト、パッケージ」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン1/2です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全2レッスンが含まれています。
ScalaのOOPへようこそ
このレッスンでは、Scalaにおけるオブジェクト指向プログラミング(OOP)の核心に踏み込みます。クラスを使ったコードの構造化、クラスのインスタンス(オブジェクト)の作成、パッケージによる整理について学びます。
堅牢でモジュール化されたアプリケーションの構築を始めましょう!
クラス:設計図
class は、オブジェクトを作成するための設計図だと考えてください。オブジェクトが持つプロパティ(データ)と振る舞い(メソッド)を定義します。class 自体がデータを保持するのではなく、オブジェクトが保持できるデータを記述します。
基本的な class の定義は次のとおりです。
class Car {
// Properties and methods go here
}シンプルな class の定義
Scala では、class キーワードの後に名前を続けて class を定義します。ここではシンプルな Dog class を作成します。まだ何もできませんが、これが第一歩です。
この空の class 定義を実行してみてください。
class Dog {
// This dog has no properties or behaviors yet
}
object Main {
def main(args: Array[String]): Unit = {
println("Dog class defined!")
}
}オブジェクト(インスタンス)の作成
object は class のインスタンスです。設計図から作成された実体のある「もの」だと考えてください。オブジェクトを作成するには、new キーワードの後に class 名を指定します。
各オブジェクトは、class で定義された独自のデータ一式を持ちます。
class Dog {
// Still an empty dog blueprint
}
object Main {
def main(args: Array[String]): Unit = {
val myDog = new Dog()
val yourDog = new Dog()
println("Two dog objects created!")
}
}class へのプロパティの追加
class には、データを格納するプロパティ(フィールドまたはメンバーとも呼ばれます)を持たせることができます。これらは class のコンストラクターで定義し、オブジェクトを作成するときのパラメーターにできます。
Dog に name と breed を持たせてみましょう。
class Dog(val name: String, val breed: String) {
// 'val' makes name and breed immutable properties
}
object Main {
def main(args: Array[String]): Unit = {
val myDog = new Dog("Buddy", "Golden Retriever")
println(s"My dog's name is ${myDog.name} and breed is ${myDog.breed}.")
}
}振る舞い(メソッド)の追加
class では、オブジェクトの振る舞いを表す関数であるメソッドも定義します。メソッドからは、オブジェクトのプロパティにアクセスしたり、変更したりできます。
これで Dog は bark() できるようになります。
class Dog(val name: String, val breed: String) {
def bark(): String = {
s"${name} says Woof!"
}
}
object Main {
def main(args: Array[String]): Unit = {
val myDog = new Dog("Max", "Labrador")
println(myDog.bark())
}
}Scala の `object`(シングルトン)
Scala では、object キーワードでシングルトンを定義します。これは、そのインスタンスが常に 1 つしか存在しないことを意味します。作成時に new は使わず、名前をそのまま参照します。
シングルトンは、ユーティリティメソッドや単一のエントリーポイントとしてよく使われます。
object MathUtils {
def add(a: Int, b: Int): Int = a + b
def subtract(a: Int, b: Int): Int = a - b
}
object Main {
def main(args: Array[String]): Unit = {
val sum = MathUtils.add(5, 3)
println(s"5 + 3 = ${sum}")
}
}コンパニオンオブジェクト
コンパニオンオブジェクトとは、class と同じ名前を持ち、同じソースファイル内で定義された object です。コンパニオンオブジェクトと class は、お互いの private メンバーに特別にアクセスできます。
- class には、インスタンス固有のデータとメソッドを保持します。
- コンパニオンオブジェクトには、static に似たメソッドやファクトリーメソッドを保持します。
class Circle(val radius: Double) {
def area: Double = Circle.PI * radius * radius
}
object Circle {
// This is the companion object for the Circle class
val PI: Double = 3.14159
def apply(r: Double): Circle = new Circle(r) // Factory method
}
object Main {
def main(args: Array[String]): Unit = {
val c = Circle(5.0) // Using the apply method from companion object
println(s"Circle area: ${c.area}")
}
}パッケージによるコードの整理
パッケージは、class や object を論理的なグループに整理する仕組みです。名前の衝突を防ぎ、コードの保守性を高められます。
コード用のフォルダーのようなものだと考えてください。Scala ファイルの先頭で package キーワードを使い、パッケージを宣言します。
package com.coddykit.animals
class Cat(val name: String) {
def meow(): String = s"${name} says Meow!"
}
// This class is now inside com.coddykit.animals packageパッケージからのメンバーのインポート
別のパッケージで定義された class や object を使うには、それらをインポートする必要があります。import キーワードによって、パッケージのメンバーを現在のスコープで利用できるようになります。
ここでは Cat class をインポートしてみましょう。
package com.coddykit.app
// Define a class in a package first for import example
package com.coddykit.animals {
class Cat(val name: String) {
def meow(): String = s"${name} says Meow!"
}
}
import com.coddykit.animals.Cat
object Main {
def main(args: Array[String]): Unit = {
val myCat = new Cat("Whiskers")
println(myCat.meow())
}
}クイックチェック:class と object の違い
class、object、パッケージについて学びました。理解度を確認してみましょう。
まとめ:class、object、パッケージ
すばらしいです。Scala における OOP の基本を学びました。
- class は、プロパティと振る舞いを定義する設計図です。
- object は、
newを使って class から作成するインスタンスです。 - Scala の
objectキーワードはシングルトンを作成し、ユーティリティやファクトリーに役立ちます。 - コンパニオンオブジェクトは class と組み合わせて、static に似たメンバーを提供します。
- パッケージはコードを整理し、名前の衝突を防いで構造を改善します。
次は、継承とポリモーフィズムについて学び、この基礎をさらに発展させます。
よくある質問
「クラス、オブジェクト、パッケージ」レッスンは無料ですか?
はい。「クラス、オブジェクト、パッケージ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全2レッスンが含まれています。
「クラス、オブジェクト、パッケージ」で何を学びますか?
Scalaでクラスを定義し、オブジェクトを作成し、パッケージを使ってコードを整理する方法を理解します。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/2です。
「クラス、オブジェクト、パッケージ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?
はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- クラス、オブジェクト、パッケージ
- 継承とポリモーフィズム