Scala の静的メンバーを理解する

Suraj P 2023年1月30日
  1. Scala のシングルトンオブジェクト
  2. Scala のコンパニオンオブジェクト
Scala の静的メンバーを理解する

この記事では、Scala の静的メンバーについて学習します。

現在、Scala は Java よりもオブジェクト指向ですが、Java とは異なり、Scala には static キーワードがありません。したがって、解決策は、コンパニオンオブジェクトまたはシングルトンオブジェクトのいずれかを使用することです。

Scala のシングルトンオブジェクト

Scala には static キーワードがないため、シングルトンオブジェクトの概念を使用できます。シングルトンオブジェクトは、クラスの単一オブジェクトを定義するオブジェクトの一種です。

これは、プログラムを実行するためのエントリポイントを提供します。シングルトンオブジェクトがプログラムで作成されていない場合、コードはコンパイルされますが、出力は提供されません。

シングルトンオブジェクトは、object キーワードを使用して作成されます。

構文:

object name
{
//our code..
}

コード例:

object Example
{
    // Variables of singleton object
    var name = "My name is tony stark";
    var language = "We are learning Scala language";

    // Method of singleton object
    def display()
    {
        println(name);
        println(language);
    }
}

// Singleton object whose name is main
object Main
{
    def main(args: Array[String])
    {
        //calling the method
        Example.display();
    }
}

出力:

My name is tony stark
We are learning Scala language

説明:

上記のコードで、ExampleMain の 2つのシングルトンオブジェクトを作成しました。Example オブジェクトには、display() という名前のメソッドが含まれています。このメソッドは、オブジェクトを作成して呼び出す代わりに、オブジェクト名 Example を使用して Main オブジェクト内で直接呼び出されます。

シングルトンオブジェクトに関するいくつかの重要なポイントは次のとおりです。

  1. シングルトンオブジェクトを操作するときは、Main メソッドが常に存在する必要があります。
  2. シングルトンオブジェクトのインスタンスを作成することはできません。
  3. シングルトンオブジェクト内のメソッドには、グローバルなアクセス可能性があります。
  4. シングルトンオブジェクトは、クラスと特性を拡張できます。

Scala のコンパニオンオブジェクト

インスタンス、つまりクラス内の非静的メンバーを定義し、クラスと同じ名前のオブジェクトで静的メンバーとして表示するメンバーを定義します。この種のオブジェクトはコンパニオンオブジェクトと呼ばれ、クラスはコンパニオンクラスと呼ばれます。

コンパニオンオブジェクトとクラスは、同じソースファイルで定義する必要があります。

コード例:

class Example
{
    var name = "My name is tony stark";
    var language = "We are learning Scala language";


    def display()
    {
        println(name);
        println(language);
    }
}

object Example
{
    def main(args: Array[String])
    {
        //calling the method
        var obj = new Example();
        obj.display()
    }
}

出力:

My name is tony stark
We are learning Scala language
著者: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub