POO en TypeScript, construction d’une classe

Les bases de la POO en TypeScript : propriétés, constructeur et méthodes

→ Challenge Correction: Greenoïd #2 - A lead to investigate

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.

Création de la classe

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}`;
}

Programme principal

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());

Code complet de la classe

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 😉


Qui a codé ce superbe contenu ?

Keep learning

Other content to discover