Menu
Coddy logo textTech

Métodos e self

Parte da seção Programação Orientada a Objetos do Journey de Swift da Coddy. Lição 3 de 57.

Dentro de um método, self é a instância na qual o método foi chamado. self.count e count significam a mesma propriedade, então self geralmente é omitido:

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

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

Saída:

1

self é necessário quando um parâmetro tem o mesmo nome que uma propriedade. Então, o nome simples significa o parâmetro, e self.name significa a propriedade:

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

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

Saída:

Ada

Os métodos podem chamar outros métodos da mesma instância, o que mantém cada método pequeno:

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)

Saída:

10

Um método também pode retornar um valor calculado a partir das propriedades. Aqui, isEmpty() responde a uma pergunta sobre a instância sem alterá-la:

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())

Saída:

true
false
challenge icon

Desafio

Fácil

Complete a classe Thermostat. setTarget(target:) armazena o parâmetro na propriedade target (use self), warmer() aumenta o alvo em 1, e display() retorna target: 21.

O código fornecido lê um alvo inicial e uma lista de comandos (warmer ou set <n>), aplica-os e imprime display() ao final.

Seu código deve ficar em Thermostat.swift. main.swift contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

// Código de entrada/saída fornecido: mantenha-o como está
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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Playground de Swift