0Pricing
Scala for Backend Engineering & Functional Programming · レッスン

クラス、オブジェクト、パッケージ

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. クラス、オブジェクト、パッケージ
  2. 継承とポリモーフィズム
← Scala for Backend Engineering & Functional Programmingに戻る