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 :
1self 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 :
AdaLes 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 :
10Une 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
falseDéfi
FacileComplè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())
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
1Classes et objets
Travailler avec des fichiersDéfinir des classesMéthodes et selfInitialiseursLes classes sont des référencesRécapitulatif - Carte de bibliothèque4Encapsulation
Contrôle d’accèsLecture seule depuis l’extérieurProtection de l’étatInitialiseurs pouvant échouerRécapitulatif - Compte bancaire7Polymorphisme et génériques
PolymorphismeConversion de typeFonctions génériquesTypes génériquesRécapitulatif - Calculateur de formes2Structures et types valeur
StructuresSémantique de valeurMéthodes mutantesStructure ou classeRécapitulatif - article d’inventaire5Héritage
Sous-classesRedéfinition des méthodesInitialiseurs et superfinal et hiérarchiesRécapitulatif - hiérarchie des employés8Protocoles standard
CustomStringConvertibleEquatableComparableHashableRécapitulatif - Tri personnalisé11Projet : Gestion de bibliothèque
Livres et membresEmprunter des livresEntraînez-vous par vous-même : Playground Swift