Menu
Coddy logo textTech

Méthodes et self

Fait partie de la section Programmation orientée objet du Journey Swift de Coddy. Leçon 3 sur 57.

Dans une méthode, self est l’instance sur laquelle la méthode a été appelée. self.count et count désignent la même propriété, c’est pourquoi self est généralement omis :

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

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

Sortie :

1

self est nécessaire lorsqu’un paramètre porte le même nom qu’une propriété. Dans ce cas, le nom seul désigne le paramètre et self.name désigne la propriété :

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

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

Sortie :

Ada

Les méthodes peuvent appeler d’autres méthodes de la même instance, ce qui permet de garder chaque méthode concise :

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)

Sortie :

10

Une méthode peut également renvoyer une valeur calculée à partir des propriétés. Ici, isEmpty() répond à une question concernant l’instance sans la modifier :

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

Sortie :

true
false
challenge icon

Défi

Facile

Complète la classe Thermostat. setTarget(target:) stocke le paramètre dans la propriété target (utilise self), warmer() augmente la cible de 1, et display() renvoie target: 21.

Le code fourni lit une cible initiale et une liste de commandes (warmer ou set <n>), les applique, puis affiche display() à la fin.

Ton code doit se trouver dans Thermostat.swift. main.swift contient le code d'entrée/sortie fourni et ne peut pas être modifié.

Essayez vous-même

// Code d'entrée/sortie fourni : le garder tel quel
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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Playground Swift