26 / 2796%

LESSON 26 ・ クラス

メソッドと初期化

メソッドを定義する

class Student {
    var name: String = ""
    var score: Int = 0

    func show() {
        print("\(self.name): \(self.score)点")
    }
}

let student = Student()
student.name = "Mary"
student.score = 65

student.show()

クラスにはストアドプロパティだけでなく、クラス専用の関数であるメソッド(method)を定義することもできます。メソッドの中ではselfが自分自身を指します。省略してnamescoreと書くこともできます。

ここでは、Mary: 65点のような形式で名前と点数を出力するメソッドshowを実装しています。

student.show()とすると、studentに格納されているStudentオブジェクトに対してshowが呼び出されます。

作成と同時に初期化する

class Student {
    var name: String
    var score: Int

    init(_ name: String, _ score: Int) {
        self.name = name
        self.score = score
    }

    func show() {
        print("\(self.name): \(self.score)点")
    }
}

let student = Student("Mary", 65)
student.show()

initは特別なメソッドのようなもので、Student( )Studentオブジェクトを作成するときに呼ばれます。initにパラメータを定義すると、Student("Mary", 65)のように引数を渡し、オブジェクト作成と同時に指定された値でストアドプロパティを初期化できます。

そうすれば、後からstudent.name = "Mary"のようにして値をセットしなくても、Student("Mary", 65)のようにして初期化できます。

initのことをイニシャライザ(initializer)と言います。

Swiftでは、初期値を持たないストアドプロパティを作るときにも型が必要です。ここではname: Stringscore: Intを宣言し、initの中で必ず初期値を代入しています。

PRACTICE

演習問題

コードを自分で書いて実行してから、答えと解説を確認しましょう。

問題1

名前と点数を持つStudentクラスに、名前: 点数点の形で表示するshowメソッドを定義してください。名前が"Mary"、点数が65のオブジェクトでshowを呼び出してください。

答えと解説を見る

模範解答

class Student {
    var name: String = ""
    var score: Int = 0

    func show() {
        print("\(self.name): \(self.score)点")
    }
}

let student = Student()
student.name = "Mary"
student.score = 65
student.show()

メソッドの中では、selfを使って、そのメソッドを呼び出したオブジェクト自身の値へアクセスします。

問題2

題名とページ数を作成時に受け取るBookクラスを定義してください。また、題名: ページ数ページの形で表示するshowメソッドも定義し、"Python Guide"240で作ったオブジェクトから呼び出してください。

答えと解説を見る

模範解答

class Book {
    var title: String
    var pages: Int

    init(_ title: String, _ pages: Int) {
        self.title = title
        self.pages = pages
    }

    func show() {
        print("\(self.title): \(self.pages)ページ")
    }
}

let book = Book("Python Guide", 240)
book.show()

initで作成時の引数を受け取り、それぞれの値を初期化しています。

問題3

幅と高さを作成時に受け取るRectangleクラスを定義してください。面積を返すareaメソッドを作り、幅8・高さ5の長方形の面積を表示してください。

答えと解説を見る

模範解答

class Rectangle {
    var width: Int
    var height: Int

    init(_ width: Int, _ height: Int) {
        self.width = width
        self.height = height
    }

    func area() -> Int {
        return self.width * self.height
    }
}

let rectangle = Rectangle(8, 5)
print(rectangle.area())

初期化した幅と高さをareaメソッドで掛け、結果を戻り値にします。rectangle.area()40を返します。