はじめに
Scalaを勉強し始めたので、学んだ内容を整理していきます。
参考書として 基礎からわかるScala を使っています。
今回は、「クラス」について学びました。
1. インスタンス化
書き方
val オブジェクト名 = new クラス名(引数)
サンプル
ClassSample.scala
val obj = new Sample(argument)
2. コンストラクタ
基本コンストラクタと補助コンストラクタの2つがある。
2-1. 基本コンストラクタ
クラスの定義ブロック内に記載された内容が上から順に実行される。
サンプル
CLassSample.scala
object ClassSample extends App{
val explanation = new Explanation();
}
class Explanation {
println("Scalaの基本コンストラクタは、");
println("ブロック内に記載された内容が");
println("上から順に実行されます。");
}
実行結果
Scalaの基本コンストラクタは、
ブロック内に記載された内容が
上から順に実行されます。
2-2. 補助コンストラクタ
引数の異なるコンストラクタを定義したい場合に利用する。
thisをつけることで、既存のコンストラクタを呼び出すことができる。
あくまでも補助であり、基本コンストラクタが複数種類になる訳ではないので注意。
(C#はオーバーロードすることで、コンストラクタを複数種類書けるので、個人的に混同しがち)
サンプル
ClassSample.scala
object ClassSample extends App{
val greeting = new Greeting("Hey", "Jack")
val defaultGreeting = new Greeting("Bob")
val conditionalGreeting = new Greeting(true, "Tom")
}
class Greeting(val greetingWord: String, val name: String) {
println(greetingWord + ", " + name);
def this(name:String) = this("Nice to meet you", name)
def this(isFriend: Boolean, name:String)
= this( if (isFriend) "What's up" else "Hello", name)
}
実行結果
Hey, Jack
Nice to meet you, Bob
What's up, Tom
3. メソッド
書き方
def メソッド名(引数の宣言): 戻り値の宣言 = { 処理の記述 }
サンプル
ClassSample.scala
object ClassSample extends App{
val methodSample = new MethodSample()
val message = methodSample.GetMessage("Michael")
println(message)
}
class MethodSample {
def GetMessage(name:String): String =
{
return "This is message for " + name;
}
}
実行結果
This is message for Michael
4. 補足知識
4-1. オブジェクト
classキーワードの代わりにobjectキーワードを用いることで、シングルトンオブジェクトとして活用することが可能になる。
サンプル
ClassSample.scala
object ClassSample extends App{
println(ObjectSample.GetMessage("Oliver"))
}
object ObjectSample {
def GetMessage(name:String): String =
{
return "This is message for " + name;
}
}
実行結果
This is message for Oliver