Originariamente inviato da American
uhm.. però mi pare di capire che prendi in considerazione una struttura ad oggetti.. Prendiamo invece un software semplice scritto in maniera procedurale.. C'è da considerare che la chiamata alle funzioni non avviene sempre in maniera continua, quindi se inizializzo una variabile nella funzione A, come faccio a ritrovarmela nella funzione Z considerando che tra A e Z, anche considerando le chiamate intermedie, non c'è una relazione?
Se vuoi che la variabile arrivi alla funzione Z in qualche maniera la devi far passare, il che significa che tutte le chiamate fino ad arrivare a Z si devono tirare dietro il dato in questione come argomento.
Cmq se tu dici che questa cosa non c'entra nulla con l'ottimizzazione, ma serve unicamente per creare codici più leggibili e intuitivi, allora il problema non si pone (la mia paura è sempre quella che, a causa della mia niubbaggine, crea algoritmi troppo "pacchiani" e che seppur funzionanti, funzionano male)..
Dal punto di vista dell'efficienza, queste sono micro-ottimizzazioni, da considerare solo se le cose vanno davvero male e se effettivamente si vede tramite profiling che c'è un guadagno di qualche genere a cambiare un approccio con l'altro, piuttosto è importante (1) scrivere un programma che funzioni correttamente (anche nei "casi limite") e (2) partire usando gli algoritmi corretti e più adatti (macro-ottimizzazione). L'uso o meno di variabili globali e compagnia è invece fondamentale dal punto di vista della mantenibilità del codice.
D'altra parte se un codice lo scrivo io e si suppone che nessun altro debba averci a che fare, che senso ha renderlo intuitivo?
1. Se riprendi in mano il tuo codice tra tre (o peggio ancora, sei o dodici) mesi e nel frattempo hai fatto altro, stai tranquillo che non ti ricordi più perfettamente come è fatto, e se l'hai scritto in maniera incasinata c'è da ridere.
2. Non è questione di scrivere codice "intuitivo", ma mantenibile, ovvero che in caso di bachi è facile rintracciare dove possa esserci il problema, se voglio aggiungere una funzione non devo stravolgere tutta la struttura del programma, modificare un certo parametro non richieda di dover cambiare qualcosa in centomila punti diversi, eccetera. È per questo motivo che, anche in un progetto in cui si lavora da soli, è fondamentale essere "disciplinati" e costruire una struttura ordinata, ben comprensibile (ricordarsi i commenti!), in cui i compiti del codice sono ben suddivisi e i vari moduli interagiscono in maniera chiara esattamente nei modi previsti.