クラスの定義
CoddyのKotlinジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 2/57。
classはオブジェクトの種類、つまり保持するデータと実行できることを記述します。class Dog { ... }は型を宣言し、Dog()はその型のオブジェクトであるインスタンスを作成します。Kotlinにはnewキーワードはありません。
class Dog {
var name = "Rex"
var age = 3
}mainの中では次のようにします。
val dog = Dog()
println(dog.name)
println(dog.age)出力:
Rex
3クラス内の変数は、そのクラスのプロパティです。各インスタンスはそれぞれ独自のコピーを持ち、ドットを使って読み取ったり変更したりします。
class Dog {
var name = "Rex"
}mainの中では:
val first = Dog()
val second = Dog()
second.name = "Bella"
println(first.name)
println(second.name)出力:
Rex
Bellaクラス内の関数はメソッドです(Kotlinではメンバー関数と呼びます)。メソッドは、それが呼び出されたインスタンスのプロパティを読み取ったり変更したりできます。
class Counter {
var count = 0
fun increment() {
count++
}
fun report() = "count is $count"
}mainの内部:
val clicks = Counter()
clicks.increment()
clicks.increment()
println(clicks.report())出力:
count is 2クラス名にはUpperCamelCase(BankAccount)を使用し、プロパティとメソッドにはlowerCamelCase(balance、deposit())を使用します。データを、そのデータに対して動作する関数とまとめることが、オブジェクト指向プログラミングの核心的な考え方です。Counterを使用するコードはincrement()を呼び出すだけで、カウントがどのように格納されているかを知る必要はありません。
class BankAccount {
var balance = 0
fun deposit(amount: Int) {
balance += amount
}
}チャレンジ
簡単クラス Pet のメソッド describe() を完成させてください。このメソッドはプロパティから組み立てた1文を返します。名前が Rex、種別が dog、年齢が 3 のペットの場合、結果は Rex is a 3 year old dog になります。
提供されたコードは Pet を作成し、入力(名前、種別、年齢)からそのプロパティを設定して、describe() の結果を出力します。
コードは Pet.kt に記述してください。Main.kt には提供された入出力コードが含まれており、編集できません。
自分で試してみよう
fun main() {
// 提供された入出力コード: そのままにしておく
val input = generateSequence(::readLine).toList()
val pet = Pet()
pet.name = input[0]
pet.species = input[1]
pet.age = input[2].toInt()
println(pet.describe())
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Kotlinプレイグラウンド