T: / Corrigés des challenges / TypeScript
Les bases de la POO en TypeScript : propriétés, constructeur et méthodes
Deuxième corrigé des challenges de l’histoire originale Greenoïd, créée à l’occasion de la Battle Dev Thales 2024.
Le deuxième challenge de l’histoire consistait à lire des directions pour faire le chemin en sens inverse, en appliquant des opérations simples (+1 ou -1) sur des coordonnées x et y.
Pour résoudre ce challenge, je propose de créer une classe Robot en TypeScript ! De cette façon on peut voir les bases de la POO en typescript, avec 2 propriétés, le constructeur et 2 méthodes.
Cette classe a 2 propriétés qui représente les 2 positions X et Y et le constructeur permet d’initialiser les valeurs de ces 2 propriétés :
class Robot {
private positionX: number;
private positionY: number;
constructor(positionX: number, positionY: number) {
this.positionX = positionX;
this.positionY = positionY;
}
}
On crée ensuite une méthode moveBackward pour gérer les positions, de façon inversée, comme expliqué dans l’énoncé. Cette méthode utilise un switch pour gérer les 4 cas : « N », « S », « E », « W » :
public moveBackward(move: string): void {
switch (move) {
case 'N':
this.positionY--; // Le robot va vers le nord, on décrémente Y pour inverser
break;
case 'S':
this.positionY++; // Le robot va vers le sud, on incrémente Y pour inverser
break;
case 'E':
this.positionX--; // Le robot va vers l'est, on décrémente X pour inverser
break;
case 'W':
this.positionX++; // Le robot va vers l'ouest, on incrémente X pour inverser
break;
// Les autres mouvements sont ignorés
default:
break;
}
}
Et une dernière méthode pour retourner la position finale :
public getPosition(): string {
return `${this.positionX}_${this.positionY}`;
}
Voici le code du programme principal, qui va créer l’objet puis parcourir l’ensemble des coordonnées :
// Instanciation d'un objet Robot avec la position actuelle
const robot = new Robot(positionX, positionY);
// On parcourt les logs
for (let i = 0; i < logs.length; i++) {
const move = logs[i];
robot.moveBackward(move);
}
// Afficher la position initiale du robot
console.log(robot.getPosition());
class Robot {
private positionX: number;
private positionY: number;
constructor(positionX: number, positionY: number) {
this.positionX = positionX;
this.positionY = positionY;
}
public moveBackward(move: string): void {
switch (move) {
case 'N':
this.positionY--; // Le robot va vers le nord, on décrémente Y pour inverser
break;
case 'S':
this.positionY++; // Le robot va vers le sud, on incrémente Y pour inverser
break;
case 'E':
this.positionX--; // Le robot va vers l'est, on décrémente X pour inverser
break;
case 'W':
this.positionX++; // Le robot va vers l'ouest, on incrémente X pour inverser
break;
// Les autres mouvements sont ignorés
default:
break;
}
}
public getPosition(): string {
return `${this.positionX}_${this.positionY}`;
}
}
Bon… sans doute un peu d’over-engineering ici, il n’y a pas obligatoirement besoin de créer toute une classe pour résoudre ce challenge (qui peut se résoudre en une petite dizaine de lignes), mais on avait le temps pour résoudre les 3 premiers challenges, autant faire du joli code 😉
Other content to discover