Come rimuovere il codice ridondante che abilita il pulsante. O dichiarazione "se"

0

Ho probabilmente un problema di "micro-ottimizzazione".

Ho ottenuto "Numero storico" , "Numero successivo" , "Reimposta" , nonché "etichetta" per il testo.

Ogni volta che faccio clic sul pulsante "Numero successivo" vorrei mostrare un numero casuale nell'etichetta e aggiungere questo numero alla serie storica dove tengo traccia del numero passato.

Ogni volta che clicco su "Numero cronologia" , viene mostrato a caso uno dei numeri casuali da array cronologico .

Ogni volta che clicco su "Ripristina" , si limita a array della cronologia .

E puoi vedere che, facendo clic sul "numero di cronologia ha senso solo se la serie storica NON è vuota.

E mi chiedo come farlo, senza il ridondante "se" istruzione al "numero di storia" callback.

o

Disattivazione del pulsante "numero cronologia" all'inizio del programma. Quindi attivando OGNI volta in cui il "numero successivo" viene cliccato (che è uuugly). E disattivando nuovamente questo pulsante su "Ripristina" .

Questo schema sulla lavagna dimostra cosa intendo:

EhoilcodiceJavaScriptdovehoimplementatounadellebruttesoluzioni(quest'ultima,conladisattivazioneel'attivazionesuicallbackappropriati).

link

PS: mi sono imbattuto in questo problema nella scrittura in Objective-C, ma ho pensato che sarebbe stato stupido pubblicare il repository con il codice iOS Objective-C, mentre non tutti devono avere Xcode. Così ho fatto l'esempio di Javascript. Quindi non limitare le tue risposte solo alla lingua.

PS2: ho pensato di avere due "numero successivo" .

1) Uno che avrebbe la linea di codice che abilita il "numero di storia" e

2) secondo senza.

All'inizio la funzione 1) sarebbe gestita. E alla fine di questa 1) funzione, il gestore si sostituirebbe alla funzione 2).

Anche il gestore "reset" metterà di nuovo il gestore sulla funzione 1).

PS3: lo so, questo potrebbe essere eccessivo. Ma ho solo più volte faticato con questo tipo di situazione. E mi chiedo se ci sia una soluzione migliore.

Grazie mille in anticipo.

    
posta Paul Brewczynski 23.01.2014 - 16:52
fonte

2 risposte

1

L'impostazione di un valore su true ogni volta che si preme "Next number" non è molto costoso. Decisamente non abbastanza costoso da giustificare ancora più codice. Anche se la commutazione del gestore di eventi funzionasse, renderebbe il codice inutilmente complesso.

È davvero questione di prestazioni rispetto alla manutenibilità, due aspetti di qualità che spesso sono in conflitto.

Potresti avvolgere la tua matrice della cronologia in un oggetto e fare in modo che generi un evento come "cambia". Per disaccoppiare l'attivazione del pulsante dal gestore 'Numero successivo'.

Quindi, comunque, cosa succede all'etichetta quando fai clic su "Ripristina"? : -)

    
risposta data 23.01.2014 - 17:12
fonte
0

Dal punto di vista delle prestazioni, la ramificazione tramite un'istruzione if non è molto diversa dalla ramificazione tramite un gestore di eventi mutevole, quindi non vedo la differenza.

Tuttavia, preferirei la dichiarazione esplicita se la maggior parte delle volte. Il gestore di eventi è nascosto, lo stato implicito e penso che sia più facile leggere il codice se li imposto all'inizio e poi non li cambi più. (Preferisco che il gestore di eventi venga inviato a una variabile mutabile che contiene la richiamata piuttosto che a mutare il gestore stesso)

// I enable this button again, EVERY TIME - it is ugly and inefficient

Penso che sia esattamente l'opposto. È il modo più pulito per dire che vuoi che il pulsante sia abilitato, indipendentemente dal fatto che sia abilitato o meno. E probabilmente non è inefficiente, dal momento che non lo fai all'interno di un ciclo.

    
risposta data 23.01.2014 - 17:47
fonte