Oppure

Loading
08/01/10 18:20
riccardobucco
premessa non so se questa sia la sezione più adatta dove postare, ma a mio parere lo era, quindi scusate in anticipo se ho sbagliato...

in generale, secondo voi, nella stesura di un programma è meglio privilegiare la struttura formalmente corretta (teoricamente, almeno nel mio semplice caso, più lenta e che rende il programma più pesante) o una scrittura più banale, se così la vogliamo definire (più leggera e veloce, sempre teoricamente, nel mio caso)?

Faccio subito un esempio pratico (banalissimo) perché credo di essermi espresso male :)
(ah scrivo il codice in pascal, perché è il linguaggio in cui programmo, sono agli inizi)

Siamo durante la fase di lettura di una matrice 10x10 (mat), X e X1 sono i contatori (tipo intero).
Struttura formalmente corretta (credo sia errato chiamarla così, ma vabbé, cercate di capirmi):
...
for  X:=1 to 10 do
  for X1:=1 to 10 do
    readln(mat[X,X1]);
...


struttura banale (stesso discorso di prima):
...
readln(mat[1,1], mat[1,2], mat[1,3], mat[1,4], mat[1,5]........, mat[10,10]);
...


Ora: le mie conoscenze sono pochissime quindi scusate in anticipo se dico banalità.
Allora nel primo caso il codice (credo si possa dire all'unanimità;) è più leggibile, comprensibile, meno soggetto a errori (in fase di stesura del programma) mentre il secondo caso risulta esattamente l'opposto.
Però è anche vero che nel primo caso vi sono due variabili in più (quindi maggior spazio occupato dal programma) e presumo (intuitivamente, non in base a conoscenze specifiche) che sia anche più lento in quanto le variabili X e X1 devono essere mano a mano aumentate.
Questi ovviamente sono casi banali, ma se le dimensioni del programma fossero notevoli, se il numero di processi eseguiti dallo stesso fosse tale da influenzare la velocità o meno del programma, voi quale dei due metodi utilizzereste? Corretto e più pesante e lento o più banale ma leggero e veloce?

Scusate ancora nel caso abbia detto assurdità :) Solo che ho sempre usato il primo metodo, ma stamattina mi è venuto il dubbio, e non ero più tanto sicuro, quindi volevo domandare il vostro parere :)
Ultima modifica effettuata da riccardobucco 08/01/10 18:29
aaa
08/01/10 18:43
giovannibart91
Penso che oramai questa questione sia opinabile ed obsoleta, dal momento che non esistono più computers con 1Mb di ram e 20 di disco fisso XDD

Va bene che ci si può porre un problema per programmi enormi, e che richiedono un ristretto e preciso tempo di esecuzione (con uno scarto di al massimo qualche manciata di millisecondi), ma direi che nel nostro caso ci riguardi poco XD

Se dovessi scegliere opterei per la prima opzione, però ottimizzata al massimo
Anche perchè l'accatastare centinaia di istruzioni alla rinfusa non è una vera e propria programmazione, è più una lista della spesa xD
Inoltre cercherei di mantenere il più chiaro possibile il codice da eseguire, perchè capiterà sicuramente di doverci tornare a mettere le mani, ed è meglio che mi torni subito in mente quello che c'è scritto nel codice, altrimenti ci metto una vita a capire tutte le righe della "lista della spesa" una per una (anzi non sarebbe nemmeno sicuro che ci riuscirei :))

Sì, nella programmazione vera e propria l'ordine e la tecnica non si sacrificano mai
preferirei di gran lunga cercare di ottimizzare il codice, usando meno variabili possibile e meno cicli possibile, ma li userei comunque...
(soprattutto perchè ormai in fase di compilazione i cicli vengono eseguiti in modo nativo dal processore usando meno istruzioni macchina possibile, e non è assolutamente detto che eseguire una istruzione singola alla volta renda più fluida e veloce l'esecuzione)
aaa
08/01/10 18:45
gio97
Io credo, viste le performance dei computer attuali, sia meglio creare un codice veloce da scrivere e facilmente comprensibile.
aaa
08/01/10 18:52
TheKaneB
In genere si cerca di scrivere sempre nel modo più pulito, elegante e professionale possibile. Poi si effettuano dei test con degli strumenti chiamati "profilers", si identificano quei punti del codice che sono troppo lenti e "SE" necessario, si ritoccano "solo" quei pochi pezzi di codice che veramente vale la pena di ottimizzare.
Questo è quanto avviene nel mondo della programmazione professionale. ;)
aaa
08/01/10 19:14
Anonymous
facciamo una matrice 1000 X 1000 anziché 10 X 10...

direi che diventi scemo se applichi il secondo metodo O_O


io consiglio di gran lunga il metodo con i cicli, anche perché il codice è molto più pulito e sicuramente eviti anche una marea di errori imprevisti e impossibili da ritrovare...
Ultima modifica effettuata da Anonymous 08/01/10 19:16
aaa
08/01/10 22:20
riccardobucco
grazie mille a tutti per le risposte :) e scusate ancora l'ignoranza :)
aaa
22/05/10 16:27
BlueWay
Partiamo da un presupposto: se tu vuoi scrivere un programma che in seguito modificherai o di cui pubblicherai i sorgenti, la cosa piu importante è la forma del codice: deve essere chiaro e comprensibile. In questo caso risulterebbe migliore la prima alternativa (dovresti comunque cambiare i nomi delle variabili: x e x1 si confondono facilmente....). Se invece vuoi scrivere programmi che non modificherai e di cui non pubblicherai i sorgenti, allora qualsiasi metodo va bene. Certo, il secondo risulterebbe migliore in tal caso, poichè (come anche tu fai notare) è più efficiente, ma acquisire una tecnica chiara di programmazione è un ottimo metodo per prepararsi a portare avanti, in futuro, progetti importanti, che richiedono sempre un lavoro di gruppo.
aaa
20/06/10 9:59
eddiewrc
beh ti hanno già detto tutto..
chiudo con una citazione da Djikstra:
"two or more, use a for!"
aaa