• 8 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 10/10/23

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

Ç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éez et utilisez les propriétés et méthodes de classe

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

bus.drive(road: road)

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

Bus.propertyOfClass
Bus.methodOfClass()

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é static avant la déclaration, comme ceci :

class MyClass {
   static var propertyOfClass = 0
   static func methodOfClass() {
      // Ici se trouve les instructions de la méthode
   }
}

 

MyClass.propertyOfClass // J'accède à la propriété de classe
MyClass.methodOfClass() // J'appelle la méthode de classe

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

Tirez parti 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...  !

Si, bien sûr que si, 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 type Float , puisque pi et l'infini sont à 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 classe Road pour contrôler que les instances créées ont pour longueur maximum 77.

Vous avez trouvé ? Comparez votre solution avec la mienne, dans le screencast ci-dessous :

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 classe createStraightRoad qui 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.

La gestion de 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 de Road en une seule pour avoir une plus grande route, on écrirait sans doute une méthode de classe.

Autre exemple, les types Float  et Double ont comme méthode de classe maximum , qui permet d'obtenir la valeur absolue d'un nombre :

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

À vous de jouer !

Quand vous êtes prêt, un exercice sur Replit vous attend !

Pour accéder à la solution :

  1. Soumettez votre projet avec le bouton "Submit" en haut à droite, 

  2. Cliquez sur le titre de l'exercice en haut à gauche de la fenêtre,

  3. Puis sur "OCswiftpoo",

  4. Cliquez sur "Fork the solution".

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.

Félicitations, vous avez complété la deuxième partie de ce cours ! Maintenant que vous maîtrisez les bases de la POO avec ses classes, ses propriétés et ses méthodes, il est temps d’aller plus loin ! Validez vos compétences avec le quiz, puis rendez-vous dans la partie 3 pour parler d’héritage. Rassurez-vous, on ne parlera pas d’argent, mais bien de Swift !

Example of certificate of achievement
Example of certificate of achievement