Io programma in uno stile che tutto è costoso o odio davvero ripetere qualcosa, principalmente perché sviluppo per sistemi embedded. Quindi mi arrabbio molto quando devo fare qualcosa che causa ripetizione.
Un esempio potrebbe essere che nel mio progetto attuale sto creando un gestore di layout. Ho avuto questa enorme funzione che ha fatto tutto il lavoro di mettere tutto, che non mi dispiace finché commento bene. Qualche punto in più mi rendo conto che qualcosa che faccio in quella lunga funzione devo fare di nuovo da qualche altra parte, come aggiustare qualcosa che è più grande della corrente. Ma ciò che mi ha veramente infastidito (e perché sto postando) è che la funzione necessaria richiede tre variabili. Per me queste tre variabili sono costose e dovrebbero essere calcolate una sola volta per chiamata. Ma per rifattorizzare il codice nel modo in cui ho bisogno, devo inserire le variabili nella funzione necessaria. Ora le variabili vengono valutate tre volte.
Questo è solo un esempio, e cose del genere spuntano molte altre in cui, quindi oltre a dirmi quelle valutazioni non sono costose, a quel punto dirò, "Lo sto ancora ripetendo però", che cosa si può fare su questo genere di cose, o, con mio grande fastidio, è inevitabile?
Aggiornamento: uno dei suggerimenti principali forniti è memorizzare il valore. Usando di nuovo l'esempio sopra, la memorizzazione del valore non sembra praticabile. Principalmente perché la funzione necessaria richiede due valori necessari che vengono utilizzati per calcolare le tre variabili. Significherebbe che dovrei creare un oggetto e sentirmi libero di correggermi se ho torto, memorizzare i valori e le variabili nell'oggetto e poi testarli se fossero cambiati.
In breve, a meno che non ci siano altre idee là fuori, sembra inevitabile. L'unica cosa reale che puoi fare è ridurre al minimo fino a un limite. In che misura posso creare oggetti a costo di ricerche di proprietà? Quante volte devo creare ripetutamente queste tre variabili? Spero che ti venga l'idea.
C'è anche il fatto che forse potrei meglio refactoring il mio codice. Tendo a scrivere in enormi funzioni e tiro fuori solo ciò di cui ho bisogno, il che probabilmente è colpa di KISS. Penso che sia necessario un altro acronimo per bilanciare le cose: P.