Named Parameters

Les paramètres ordonnées nuisent à la lisibilité du code et au refactoring.

class Customer {
    constructor(firstName, lastName, email, phoneNumber) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.phoneNumber = phoneNumber;
    }
}

new Customer('Foo', null, null, '123');

Malheureusement, les named parameters n'existent pas mais une solution de contournement native est possible grâce au destructuring.

Named Parameters avec un seul paramètre.

class Customer {
    constructor(args) {
        this.firstName = args.firstName;
        this.lastName = args.lastName;
        this.email = args.email;
        this.phoneNumber = args.phoneNumber;
    }
}

new Customer({
    firstName: 'Foo',
    phoneNumber: '123'
});

... mais cette approche n'est pas très IDE-friendly. L'utilisateur de la classe ne verra pas clairement les paramètres attendus.

Destructuring

class Customer {
    constructor(args = {}) {
    
        const {firstName, lastName, email, phoneNumber = null} = args;
    
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.phoneNumber = phoneNumber;
    }
}

Hop ! On gagne l'initialisation des valeurs par défaut.

Ou encore mieux :

class Customer {
    constructor({firstName, lastName, email, phoneNumber = null} = {}) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.phoneNumber = phoneNumber;
    }
}

Recyclage

Pour des objets peu complexes, ce constructeur nous évite d'implémenter des "factories".

const customer = new Customer({firstName: 'Foo'});

const customerFromJson = new Customer(JSON.parse(data));

const customerCopy = new Customer(customer);

Dernière mise à jour