Menu
Coddy logo textTech

Métodos y self

Parte de la sección Programación orientada a objetos del Journey de Swift de Coddy. Lección 3 de 57.

Dentro de un método, self es la instancia sobre la que se llamó al método. self.count y count significan la misma propiedad, por lo que normalmente se omite self:

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

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

Salida:

1

Se necesita self cuando un parámetro tiene el mismo nombre que una propiedad. Después, el nombre simple significa el parámetro y self.name significa la propiedad:

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

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

Salida:

Ada

Los métodos pueden llamar a otros métodos de la misma instancia, lo que mantiene cada método pequeño:

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)

Salida:

10

Un método también puede devolver un valor calculado a partir de las propiedades. Aquí isEmpty() responde a una pregunta sobre la instancia sin modificarla:

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

Salida:

true
false
challenge icon

Desafío

Fácil

Completa la clase Thermostat. setTarget(target:) almacena el parámetro en la propiedad target (usa self), warmer() aumenta el objetivo en 1 y display() devuelve target: 21.

El código proporcionado lee un objetivo inicial y una lista de comandos (warmer o set <n>), los aplica e imprime display() al final.

Tu código va en Thermostat.swift. main.swift contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

// Código de entrada/salida suministrado: déjalo tal 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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Playground de Swift