Ho una funzione per mostrare o nascondere un determinato controllo dell'interfaccia utente. Nel mio esempio qui di seguito, il framework è jQuery che sto usando per un evento per mostrare un suggerimento che può sparare un LOT (basato sui movimenti del mouse) - ma il problema sottostante è più generale e può anche presentarsi in modo simile in molti altri framework UI. In effetti, il problema potrebbe essere ancora più generalizzato a qualsiasi tipo di componente con due stati da cambiare spesso, non solo i componenti dell'interfaccia utente.
Si consideri:
Codice A:
$(this).plothover(function(item) {
if(item&&item!="undefined"){
show tooltip
}
else
remove tooltip
});
Codice B:
$(this).plothover(function(item) {
if(item&&item!="undefined"){
show tooltip
}
else {
if(tool tip is shown){
remove tooltip
}
}
});
item
esisterà in punti cartesiani definiti dove esistono punti dati (cioè, coordinate grafiche su una tela). In altre parole, le probabilità sono ~ 10000: 1 nel favore della condizione else che spara su una base DPI
.
Mentre il mouse si muove,
Il codice A lo rimuove senza tenere conto di alcuna condizione Il codice B lo rimuove solo se era già stato creato, ma deve prima verificare la creazione
Quindi, che è considerato 'giusto'? Blind nasconde il controllo se è visibile o no, o lo nasconde solo se è visibile?
L'ho analizzato con jsperf e le differenze sono insignificanti per quanto riguarda le prestazioni, ma tendono a distruggere i ciechi. Ma se è "sbagliato" dalla teoria farlo, preferirei scegliere la via migliore.
--- MODIFICA --- Per chiarire, l'effettiva chiamata non è importante (cioè, come viene rimossa). Né sto cercando una revisione del codice. L'esempio sopra riportato è una delle molte volte in cui mi sono imbattuto in questo caso.
Piuttosto, desidero discutere la teoria implicata in "Distruggi ciò che può esistere" o "cerca e distruggi se esiste".