Menu
Coddy logo textTech

メソッドとself

CoddyのSwiftジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 3/57。

メソッド内では、self はそのメソッドが呼び出されたインスタンスです。self.count と count は同じプロパティを意味するため、通常は self を省略します:

class Counter {
    var count = 0
    func increment() {
        self.count += 1
    }
}

let c = Counter()
c.increment()
print(c.count)

出力:

1

パラメータがプロパティと同じ名前の場合、self が必要です。この場合、単純な名前はパラメータを意味し、self.name はプロパティを意味します。

class Player {
    var name = "unknown"
    func rename(name: String) {
        self.name = name
    }
}

let p = Player()
p.rename(name: "Ada")
print(p.name)

出力:

Ada

メソッドは同じインスタンスの他のメソッドを呼び出せるため、各メソッドを小さく保てます。

class Cart {
    var total = 0
    func add(_ price: Int) {
        total += price
    }
    func addTwice(_ price: Int) {
        add(price)
        add(price)
    }
}

let cart = Cart()
cart.addTwice(5)
print(cart.total)

出力:

10

メソッドは、プロパティから計算した値を返すこともできます。ここで isEmpty() はインスタンスを変更せずに、そのインスタンスについての質問に答えます。

class Cart {
    var items: [String] = []
    func add(_ item: String) {
        items.append(item)
    }
    func isEmpty() -> Bool {
        items.count == 0
    }
}

let cart = Cart()
print(cart.isEmpty())
cart.add("tea")
print(cart.isEmpty())

出力:

true
false
challenge icon

チャレンジ

簡単

クラス Thermostatを完成させてください。setTarget(target:)はパラメーターをプロパティ targetに(selfを使って)格納し、warmer()は target を 1 増加させ、display()は target: 21を返します。

提供されたコードは開始時の target とコマンドのリスト(warmerまたはset <n>)を読み込み、それらを適用した後、最後に display()を出力します。

コードは Thermostat.swiftに記述してください。main.swiftには提供された入出力コードが含まれており、編集できません。

自分で試してみよう

// 提供された入出力コード: そのままにしておく
var input: [String] = []
while let line = readLine() { input.append(line) }
let t = Thermostat()
t.setTarget(target: Int(input[0])!)
for cmd in input.dropFirst() {
    if cmd == "warmer" { t.warmer() } else { t.setTarget(target: Int(cmd.dropFirst(4))!) }
}
print(t.display())
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Swiftプレイグラウンド