• [^] # Re: Opinion personnelle

    Posté par . En réponse au journal Et si JavaScript allait droit dans le mur ?. Évalué à 2.

    Mais lisible et maintenables, pas forcément.

    Oui on est d'accord, on peut écrire du code illisible et in maintenable dans n'importe quel langage. Mais en JavaScript a la possibilité de faire du code "propre" même sur des applications techniquement complexe. Ce qui n'est pas toujours possible dans tous les langages.

    Un exemple tout bête, si une connexion est cassée, et qu'elle faisait partie d'un pool qui a été utilisé par plusieurs scopes qui sont en attente de réponse. Il faut donc prévenir tous les scopes concernées qu'il faut réessayer, certains vont répondre que c'est possible, d'autres que ce n'est pas possible. Une fois que toutes les fonctions auront répondus, ou après un temps d'attente maximum, il faudra filer une nouvelle connexion à celle qui peuvent réessayer et nettoyer celles qui ne peuvent pas - puis nettoyer proprement la socket pour libérer les descripteurs.

    C'est le genre de truc qui rend fou à écrire dans la majorité des langages. Et je ne parle pas de le maintenir.

    En JavaScript ça va donner un truc du genre :

    var myPool {
    ...
    mySocket.on('RST','DESTROY','CLOSE') {
    var curSocket = this;
    Promise.allSettled(curSocket.Clients.map(raiseRetryEvent)) //Send an event "retry" to all client of this socket
    .timeout(15000) //wait 15 sec max before resolution
    .then(function(results) {
    results.forEach(function (result, index) {
    if(typeof result === 'function') // callback sent from client
    {result(myPool.allocateConnection);}
    else
    {curSocket.Clients[index].cleanup();} //client did not answer with a callback
    curSocket.cleanup(); //We do not need to keep the socket alive any longer.
    });
    })
    }
    }
    11 lignes niveau débutant plus à intermédiaire. Lisible même par des gens qui n'ont jamais fait de javascript de leur vie mais qui connaissent des langages avec une syntaxe similaire. Il n'y a guere que le Promise.allSettled qui peut faire se gratter la tête 30 secondes.

    P.S le code est présenté de façon très moche, mais j'arrive pas à faire mieux...