jQuery - stile di programmazione: molti collegamenti rispetto a uno singolo condizionale

3

Vedo spesso un codice del genere:

$("#foo").live("mouseover mouseout", function(e) {
    if (e.type == "mouseover") {
        $("#foo").append("<div id='bar'>");
    } else {
        $("#bar").remove();
    }
});

invece di più autoesplicativo secondo me:

$("#foo").live("mouseover", function(e) {
    $("#foo").append("<div id='bar'>");
})
.live("mouseout", function(e) {
    $("#bar").remove();
});

lo stesso vale per

$('#contentPageID, #itemURL').change ( function () {
    if ( $(this).is('#contentPageID') )
        ...
    else
        ...
});

ha qualche scopo o è solo uno stile di codifica diverso (contro intuitivo dal mio punto di vista)?

    
posta Jacek Kaniuk 08.08.2011 - 00:07
fonte

3 risposte

8

Penso che tu abbia tipo risposto alla domanda da solo.

  • Il tuo primo esempio è un po ' less leggibile del tuo secondo.
  • Il tuo terzo esempio è orribile - mi ricorda if...elseif...elseif di istruzioni che è impossibile eseguire il debug perché le condizioni testate non sono completamente correlate.

Regola di leggibilità e manutenibilità. A meno che la performance insana sia la massima priorità; come dettato da te, dal tuo manager o da chiunque altro, vai con qualcosa che rende felici sia te che gli altri.

// this makes me happy
$("#foo").live({
     click: function() { ... },
     mouseover: function() { ... },
     mouseout: function() { ... }
});
    
risposta data 08.08.2011 - 00:33
fonte
1

Se hai un sacco di codice condiviso tra i due sapori e solo un piccolo codice diverso, allora può essere vantaggioso avere un solo blocco funzione e usare un'istruzione if nel singolo blocco. Se il codice è completamente diverso per i due casi, allora voterei sicuramente per l'utilizzo di due metodi jQuery separati perché mi sembra più pulito.

Alla fine è tutta una scelta personale nello stile. Non c'è argomentazione di correttezza in un modo o nell'altro. Si potrebbe obiettare che il singolo blocco ha una sola chiamata selettiva invece di due, ma questi vengono eseguiti solo una volta durante l'inizializzazione / configurazione, quindi è improbabile che faccia davvero molta differenza.

    
risposta data 08.08.2011 - 00:21
fonte
1

La tua intuizione è corretta. Le dichiarazioni condizionali dovrebbero essere evitate il più possibile. Ogni condizionale raddoppia il numero di percorsi attraverso una funzione e quasi raddoppia lo sforzo richiesto per comprendere la funzione. Le funzioni con i condizionali sono anche più complesse da documentare. Se una funzione è difficile da documentare, probabilmente è sbagliata.

    
risposta data 08.08.2011 - 08:31
fonte

Leggi altre domande sui tag