La Programmation Orientée Objet en JavaScript est étrange - Letecode

La Programmation Orientée Objet en JavaScript est étrange

Découvrez les particularités de la POO en JavaScript

Joseph Kabemba
Joseph Kabemba Mise à jour : 20 décembre 2022 997 1

Lorsque j'ai découvert la programmation orientée objet en JavaScript, j'étais confus. Au début, ça semblait simple. Créer une classe était à peu près comme Java.

class Student { 

}


Mais juste après cette déclaration, beaucoup de questions ont surgi dans mon esprit. J'ai réalisé que quelque chose manquait : le modificateur d'accès public avant class. Donc, je l'ai ajouté. Malheureusement, mon éditeur de code ne l'a pas apprécié. public était en surbrillance. Quand je l'ai survolé, j'ai eu ce message.

The 'public' modifier can only be used in TypeScript files.ts(8009)



Je me suis dit "Quoi ! Je suis en train de coder en JavaScript. Pourquoi tu parles de Typescript ?". Après quelques recherches sur Google, j'ai découvert que JavaScript n'avait pas le mot clé public dans son vocabulaire. C'était plutôt implicite.

J'ai continué à coder. J'ai écrit mon premier constructeur.

class Student {  
 
   constructor(name, faculty){   
      this.name = name;   
      this.faculty = faculty;   
  }
}



Ayant programmé en Java et fait un peu de C++, c'était bizarre. Le constructeur n'avait pas le même nom que la classe et j'avais initialisé les propriétés d'instance name et faculty avant de les déclarer en amont. J'ai découvert plus tard que cela était possible grâce aux champs de classe. Je pouvais donc réécrire ce code, à la manière de Java ou de C++. Cela m'a soulagé.

class Student {   
     name;   
     faculty;   
     
     constructor(name, faculty){   
       this.name = name;   
       this.faculty = faculty;   
     } 
}



Cependant, je n'étais pas tout à fait satisfait. Je me demandais si je pouvais rendre les champs de ma classe privés pour me conformer au principe d'encapsulation de la POO qui encourage à restreindre l'accès direct aux éléments de la classe tels que les champs, les propriétés ou les méthodes. Comme pour public, le mot clé private n'existe pas dans le monde JS. Alors, je me suis dit à ce moment là : "Comment se fait-il que ce langage soit si limité ?".

J'étais trop pressé de critiquer jusqu'à ce que je trouve la réponse. Tout ce que j'avais à faire pour rendre une propriété ou une méthode privée, c'est de mettre juste devant elle le symbole harsh (#).

import moment from "moment";

class Student {
  #name;
  #faculty;
  #birthDate;

  constructor(name, faculty, birthdate){
   this.#name = name;
   this.#faculty = faculty;
   this.#birthDate= birthDate;
  }
 
  #computeAge() {
    return moment(this.#birthDate, "YYYY-MM-DD").fromNow();
  }

  getAge() {
    return this.#computeAge();
  }
}

La POO en JavaScript n'est pas canonique. Vous aurez beaucoup de surprises si vous venez d'un langage de programmation purement orienté objet. Envisagez de migrer progressivement vers Typescript, qui est un surensemble de JavaScript, pour avoir moins de maux de tête.

                                                                                          ***

Si vous avez apprécié la lecture de cet article, nous vous serions reconnaissants de le recommander et de le partager avec vos amis. Si vous n'en avez pas, suivez-nous, nous serons vos amis.

4

0 commentaire(s)

  • Image placeholder
    @mechack il y a 3 ans

    le seigneur.

    Répondre

Laissez votre commentaire à @josephkabemba

ou pour laisser un commentaire