• 20 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 2/1/19

Découvrez les propriétés et méthodes de classe

Log in or subscribe for free to enjoy all this course has to offer!

Ça y est ! Nos classes commencent à ressembler à quelque chose. On a même enfin un bus qui roule le long de la route ! Elle est pas belle la vie ? Mais bon, je vous connais, vous en voulez encore. Alors dans ce chapitre je vais vous montrer quelque chose qui va nous être bien pratique : les propriétés et méthodes de classe.

Hé mais on connaît déjà ça !

Non… pas tout à fait. Vous connaissez en effet les propriétés et les méthodes. Mais la forme sous laquelle vous les connaissez pour l'instant s'appelle les propriétés et méthodes d'instance ! Pourquoi d'instance ? Parce qu'on les utilise sur des instances.

Créer et utiliser les propriétés et méthodes de classe

Par exemple, la méthodedriveque vous venez de créer dans le chapitre précédent, vous l'utilisez sur une instance : l'instance unBus en l'occurrence :

unBus.drive(road: road)

Avec une méthode ou une propriété de classe, on utilise directement la classe, comme ceci :

Bus.propriétéDeClasse()
Bus.methodeDeClasse()

On appelle directement la méthode ou la propriété avec le nom de la classe.

Pour créer une méthode ou une propriété de classe. On utilise le mot cléstaticavant la déclaration comme ceci :

class MaClasse {
    static var unePropriétéDeClasse = 0
    static func uneMéthodeDeClasse() {
        // Ici se trouve les instructions de la méthode
    }
}

MaClasse.unePropriétéDeClasse // J'accède à la propriété de classe
MaClasse.uneMéthodeDeClasse() // J'appelle la méthode de classe

Donc rien de plus simple, il suffit d'ajouter le mot-cléstaticpour passer d'une propriété ou méthode d'instance à une propriété ou méthode de classe.

Utilité des propriétés et méthodes de classe

Holà ! Tout doux mon garçon ! C'est formidable ton histoire, mais ça sert à quoi ?

À rien... :D !

Non bien sûr que non et c'est même très pratique. Laissez-moi vous montrer quelques cas d'utilisation.

Les constantes

Souvent, dans une classe, on va vouloir définir des constantes qui sont vraies pour toutes les instances de la classe. Par exemple, le type Float en a plusieurs :

Float.infinity // contient le plus grand nombre décimal pouvant être contenu dans un float
Float.pi // Contient le nombre pi

Ça n'aurait pas de sens de devoir d'abord créer une instance de float avant d'accéder à ces valeurs. On préfère y avoir accès directement. Mais il faut bien le stocker quelque part et quoi de plus logique que de le stocker dans le typeFloatpuisquepiet l'infini sont a priori décimaux.

Autre exemple, dans notre cas, cela va nous permettre de stocker le nombre maximum de sections que peut contenir la route. En effet, le canevas ayant une taille limitée, on ne peut pas afficher plus de 77 sections de route. Donc nous allons utiliser une propriété de classe pour cela :

class Road {
    static let maxLength = 77
    // La suite de la classe...
}

Petit exercice au passage, je vous propose de modifier l'init de la classeRoadpour contrôler que les instances créées ont pour longueur maximum 77.

// Ne regardez pas la correction tout de suite !





























class Road {
    static let maxLength = 77
    var sections = [RoadSection]()

    init(length: Int) {
        var length = length
        if length > Road.maxLength {
            length = Road.maxLength
        }
        for _ in 0..<length {
            self.sections.append(RoadSection())
        }
    }
}

Les initialisations particulières

On peut utiliser les méthodes de classe pour initialiser des instances particulières facilement. Vous avez sans doute remarqué maintenant que la route que l'on crée fait des virages pour se poursuivre. On pourrait créer une méthode de classecreateStraightRoadqui crée une route toute droite. Pour cela, il suffit de lui donner une longueur inférieure à 12 sections pour ne pas atteindre le premier virage.

class Road {
    static func createStraightRoad() -> Road {
            return Road(length: 11)
    }
    // (...)
}

Road.createStraightRoad() // Le canevas affiche une ligne droite

Cette fonction renvoie bien une route droite de longueur 11.

Gérer plusieurs instances

Certaines méthodes de classe sont utilisées pour faire des calculs ou des modifications sur plusieurs instances en même temps. Par exemple, si on voulait combiner deux instances deRoaden une seule pour avoir une plus grande route, on écrirait sans doute une méthode de classe.

Autre exemple, les typesFloatetDoubleont comme méthode de classemaximumqui permet d'obtenir la valeur absolue d'un nombre :

Double.maximum(2, 12) // Renvoie 12
Float.maximum(3, 13) // Renvoie 13

Exercice

Entraînez-vous avec cet exercice !

En résumé

  • Les propriétés et méthodes de classe se déclarent avec le mot-cléstatic.

  • Par opposition à une propriété ou méthode d'instance, une propriété ou méthode de classe s'utilise à partir du nom de la classe.

  • Les propriétés de classe sont particulièrement utiles pour définir des constantes pour la classe.

  • Les méthodes de classe sont particulièrement utiles pour définir des initialisations particulières ou pour gérer plusieurs instances.

Example of certificate of achievement
Example of certificate of achievement