Myllaume

Espace numérique de Guillaume Brioudes

JavaScript

Généralités

var form = {
    utils: {
        form: document.querySelector('.form'),
        btnSubmit: document.querySelector('.form__submit'),
        callback: document.querySelector('.form__callback')
    },
    input: {
        name: document.querySelector('#input-name'),
        email: document.querySelector('#input-email')
    },
    parms: {
        width: '200px'
    }
};

// Avec ce code, on accédera à l'élément HTML du formulaire avec 'form.utils.form'
var html = `
    <h2>Titre</h2>
    <div>
        <p>Insertion simple et lisible</p>
        <p>Avec les back-quotes</p>
    </div>
`;

Commentaires

Les commentaire sur une ligne et sur plusieurs lignes doivent être adaptés pour les différents contextes de commentaires. Les fonctions doivent être commentés selon la spécification JSdoc avec des précisions pour les opérations les moins explicites : les termes ou opérations ne semblent pas intuitives.

/**
 * Send custom request using fetch api
 * @param { String } name
 * @param { Object } historique
 * @param { Number } [id = sessionStorage id] Identifiant de l'item
 * @return { Object }
 */

function changeItem(name, historique, id = sessionStorage.getItem('idItem')) {
    // aucune modification n'est signalée dans le session
    if (sessionStorage.getItem('inEdition') == 'true') { return; }

    sessionStorage.setItem('items', id);
    var historique = historique.actualiser();

    return historique;
}

Optimisation

Indentation

Pour augmenter la lisibilité du code, éviter la sur-indentation.

// À éviter

if (array.length !== 0) {
    for (let i = 0; i < array.length; i++) {
        // traitement...
    }
}

// Écrire

if (array.length === 0) {
    return;
}

for (let i = 0; i < array.length; i++) {
    // traitement...
}

Court-circuiter

Pour éviter l'exécution inutile de boucles, conditionnelles, mieux vaut régulièrement court-circuiter les fonctions avec return, break ou continue.

function checkArrayNames(arrayNames) {

if (arrayNames.length === 0) {
    // si 'arrayNames' vide : arrêt de la fonction
    return;
}

var validNames = [];

for (let i = 0; i < arrayNames.length; i++) {
    // pour chaque nom du tableau...
    if (arrayNames[i].length > 5) {
        // ne pas traiter si + long que 5 caractères
        continue;
    }
    // l'enregistrer dans 'validNames'
    validNames.push(arrayNames[i]);
}

    // renvoyer 'validNames'
    return validNames;
}

Mise en cache

La sélection des éléments au sein du DOM est un processus lourd. Il faut veiller à limiter ces opérations et à sémantiser, regrouper les éléments du DOM.

var elts = {
    form: {
        this: document.querySelector('#form-user'),
        btnSend: document.querySelector('#btn-send-user')
    },
    content: document.querySelector('#content'),
    txts: document.querySelectorAll('#content p'),
    titles: document.querySelectorAll('.title')
}

elts.form.btnSend.addEventListener('click', () => {
    sendForm(elts.form.this);
})

Évènements

Lorsque l'on veut animer la page, il faut toujours préférer manipuler des classes CSS avec le JavaScript. On va distinguer plusieurs animations explicités par des noms de classe type modificateur (selon la convention BEM) :