|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#41 | |
|
Messaggi: n/a
|
Quote:
innanzitutto non voglio certo commentare qualcosa che si commenta da se. mettere commenti e crearsi sopratutto una documentazione serve alla manutenzione di grandi applicazioni, serve a te e serve ai colleghi. naturalmente deve essere sempre consistente con la realtà, univoca e precisa. è una cosa che al momento della creazione ti potrebbe stressare ma farla ma credimi e molto probabile che in fututro sia un ottimo incentivo a risparmiare tempo e nervi |
|
|
|
|
#42 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Si', posso dimostrarti quello che dico Versione numero 1: [C++] Codice:
// ...
// Send all directional lights to the GPU
for (s32 i = 0; i < ret_num_directional_lights; ++i)
{
// Get Directional light from the lighting manager and cast it
const CLightingManager::CDirectionalLight* p_directional_light = STATIC_CAST(const CLightingManager::CDirectionalLight*,light_list[ i ]);
// Get direction from the light
CVector3 direction = p_directional_light->GetDirection();
// Get light colour
CRGBFloatColour colour = p_directional_light->GetColour();
// Send direction constant to the GPU
CShaderManager::SetPSConstantElement(BIND_PS_CONSTANT(g_DirectionalLightDirection), element, direction);
// Send colour to the GPU
CShaderManager::SetPSConstantElement(BIND_PS_CONSTANT(g_DirectionalLightColor), element, CVector3(colour.R, colour.G, colour.B));
// next element
element++;
}
// ...
Guarda questa versione: [C++] Codice:
// ...
SendDirectionalLightsToTheGPU();
E poi l'implementazione: Codice:
for (s32 i = 0; i < ret_num_directional_lights; ++i)
{
const CLightingManager::CDirectionalLight* light = GetDirectionaLight(i);
light.SendDirectionToTheGPU();
light.SendColourToTheGPU();
light.NextElement();
}
Regola generale: Non si commenta mai cio' che puo' essere espresso in codice, si commenta solo cio' che non puo' essere espresso in codice. Quello che il codice fa puo' essere espresso dal codice stesso, che e' la migliore e piu' aggiornata documentazione di se' stesso. Bisogna commentare ad esempio assunzioni che si fanno su un algoritmo ("Questo codice funziona se l'input e' di questo tipo"), oppure post e pre condizioni che non possono essere espresse da assert o da test (rarissimo). Sostanzilamente, se il codice e' chiaro e ben scritto non c'e' quasi mai necessita' di commentare. Se il codice e' scritto male, la soluzione non e' commentarlo (il deodorante), ma riscriverlo in maniera comprensibile (eliminare la puzza). "An heuristic we follow is that whenever we feel the need to comment something, we write a method instead" - Martin Fowler Non commentare, riscrivi il codice, il tuo programma e i tuoi colleghi ti ringrazieranno e tu risparmierai un sacco di tempo E per chi e' curioso, Martin aggiunge: "Don't worry, we aren't saying that people shouldn't write comments. In our olfactory analogy,comments aren't a bad smell; indeed they are a sweet smell.The reason we mention comments here is that comments often are used as a deodorant. It's surprising how often you look at thickly commented code and notice that the comments are there because the code is bad. ......Our first action is to remove the bad smells by refactoring. When we're finished, we often find that the comments are superfluous."
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA Ultima modifica di fek : 08-11-2005 alle 16:48. |
|
|
|
|
|
|
#43 | ||
|
Messaggi: n/a
|
Quote:
Quote:
|
||
|
|
|
#44 | ||
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
No, non funziona cosi'. Il codice un po' debole non va commentato, va riscritto e reso chiaro, perche' tutto il codice deve autocommentarsi. Le eccezioni non devono esserci. E' la sindrome della "broken window". Quote:
Ron Jeffries descrive questo concetto con una metafora divertente: chiama il codice scritto male "coding debt", un debito che si accumula ogni volta che un pezzo di codice e' lasciato li', anche se dovrebbe essere rifattorizzato, e il debito prima o poi viene ripagato in termini di tempo e soldi, fino a che non si accumulano talmente tanti debiti che si va in banca rotta e il progetto non puo' piu' essere concluso. Si puo' accumulare qualche debito per un breve periodo (magari vicini ad una milestone), ma poi il debito va ripagato subito, e il codice rifattorizzato, riscritto, corretto, semplificato. Le puzzette nella code base devono sparire non appena possibile, non e' una perdita di tempo, e' un guadagno di tempo enorme nel lungo periodo. Non per altro svariati studi mettono in evidenza come un buon programmatore costi molto meno all'azienda di un programmatore scarso.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
||
|
|
|
|
|
#45 |
|
Messaggi: n/a
|
aiaiaiaiaiaiaiaaiaiaia vabene scomunichiamo il "//" usato ogni tanto ma non mi dirai che HALFLIFE2 si auto commenta da solo appena guardi un metodo!!!!!
|
|
|
|
#46 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#47 | |
|
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Quote:
Leggo solo ora questo post in quanto ci si stava rispondendo contemporaneamente, comunque ottimo consiglio! oltre ai commenti (senza ripetermi!) userò nomi di metodi altamente significativi che indichino l'ordine di chiamata. Thnks! |
|
|
|
|
|
|
#48 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#49 |
|
Messaggi: n/a
|
non hai risposto alla mia domanda, hl2 ha 7 mila file di semplice codice che non si autocommenta affatto senza un minimo supporto di documentazione. tu mi puoi anche dire che si capisce cosa fa un metodo localmente i una classe ma non puoi pretendere che uno nuovo del progetto capisca subito tutto-e-cosa quel pezzo di codice comporta globalmente nel sistema...
|
|
|
|
#50 | ||
|
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Quote:
Quote:
E qui cerco di fare da mediatore: i commenti li metterò sempre perchè ci sarà sempre il programmatore inesperto che ha bisogno di farsi le ossa e che per iniziare a lavorare e a capire il mio codice ha bisogno di commenti. Hai mai lavorato a un progetto scientifico di ricerca in cui si implementano algoritmi di difficile comprensione?* *non immediati e che implichino una conoscenza approfondita di una materia (che sia riguardo la fisica, la biologia, la chimica, l'economica ..) Be ti assicuro che in questi casi se il programmatore che ha scritto il codice su cui devi lavorare ha aggiunto qualche commento si capisce ben prima la logica del programma senza rompere e far perdere tempo ai Biologi, Economi o chi altri con cui lavori per capire il codice. Quindi la mia teoria è: un codice va ben commentato, troppi commenti vanno evitati se si può fare codice autoesplicativo (con nomi significativo), ma un minimo di commenti (ben ordinati e spiegati) ci vuole. PS: si lavora in team! mai da soli! E un team non può essere composto da super-programmatori sempre esperti - in un team ci può essere sempre chi ha bisogno di farsi le ossa. Altrimenti come fai ad imparare? Ultima modifica di shang84 : 08-11-2005 alle 19:02. |
||
|
|
|
|
|
#51 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Se qualcosa ancora non e' chiaro, diccelo che semplifichiamo e chiariamo il codice. Se il codice di HL2 non si auto commenta non e' un problema mio ma di chi lo ha scritto e lo deve mantenere.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#52 | |||
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Quando hai di fronte un metodo da 1.500 righe, non c'e' commento che tenga. Non si capisce comunque nulla. Quote:
Quote:
I programmatori inesperti imparano leggendo codice ben scritto, programmando con chi e' piu' esperto. Tutto possiamo dire di Diamonds ma non che e' composto da super programmatori sempre esperti, anzi, la maggior parte neppure aveva mai visto Java prima (me compreso). Eppure non abbiamo bisogno di commenti, scriviamo codice pulito ed il tempo di ingresso nel progetto e' praticamente nullo.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA Ultima modifica di fek : 08-11-2005 alle 19:08. |
|||
|
|
|
|
|
#53 |
|
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Ma dei commenti sull'utilizzo delle classi all'interno di un programma ci vogliono.
O di che cosa fa un certo metodo. Non puoi scrivere metodochecalcolaloscorediunospettrodopoaverfattoildenoisingdeisegnali() cmq sono d'accordo sulla autoesplicazione del codice (quando possiblie) ma non voglio ora farne una questione "politica".. ora devo andare. Ciao |
|
|
|
|
|
#54 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Un test ti documenta in maniera inequivocabile il significato e l'uso di un metodo in una classe, oppure la relazione di una classe con un altra. E non solo lo documenta, controlla anche attivamente che i contratti che tu stabilisci e documenti siano effettivamente rispettati dal codice. E lo fa decine di volta al giorno ed e' sempre in sincronia col codice per definizione. La documentazione e i commenti non sono sempre in sincronia col codice, non controllano attivamente che quello che e' scritto nel commento sia effettivamente vero, non documentano in maniera inequivocabile. Sono una duplicazione di concetti gia' espressi, duplicazione che va mantenuta a costo di tempo e denaro. Non c'e' nulla di peggio di un commento sbagliato, non in sincronia col codice.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#55 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Ripeto, guardate il codice di Diamonds, e' disponibile a tutti e non c'e' un commento che sia uno
E poi ditemi se non e' piu' che chiaro.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#56 | |||
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
Quote:
ma una domanda: se anche progettassi la tua soluzione informatica tramite UML, modelleresti le strutture dati sul problema concreto, o, avresti un approccio generale al problema, introducendo classi astratte, implemetandone estensivamente i metodi per farle apparire "complete" e "general purpose", anche se non utili e propedeutici ad un problema, che avrebbe magari preferito una classe meno general purpose e più efficiente? voglio dire, UML non vuol dire strutturare le classi in modo non mirato... Quote:
Quote:
) comunque è vero, l' optimum a cui si deve tendere è programmare "in inglese", facendo in modo che gli statement sembrino frasi di senso compiuto
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 08-11-2005 alle 21:54. |
|||
|
|
|
|
|
#57 | |
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
Quote:
ad esempio, qualora esaminando una funzione e notando che questa va a leggere da una tabella di valori o faccia somme e shift a sinistra (CORDIC), non avessi modo di rendermi conto che si sta calcolando un sin()... ma qui siamo nel regno delle ottimizzazioni
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 08-11-2005 alle 21:16. |
|
|
|
|
|
|
#58 | |
|
Senior Member
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
|
Quote:
, ma lì è perchè non conosco le librerie), e conoscenza generale nella programmazione non dico sia pari a nulla, ma comunque oltre ai semplici programmini (calcolatrice in vb, notepad e altre cose simili) non ha mai fatto. Però già il fatto di esser riuscito a fare un task del progetto con relativi test e implementazione scritti da 0 mi soddisfa ^^Fek, penso che il tuo esempio dei commenti lo farò leggere a qualcuno che conosco (stai pensando a qualche mio prof? ma...come hai fatto? Ehi fek, a quando il tuo libro in tutte le migliori biblioteche?
|
|
|
|
|
|
|
#59 | |
|
Messaggi: n/a
|
Quote:
|
|
|
|
|
#60 | |
|
Messaggi: n/a
|
Quote:
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:07.











)
, ma lì è perchè non conosco le librerie), e conoscenza generale nella programmazione non dico sia pari a nulla, ma comunque oltre ai semplici programmini (calcolatrice in vb, notepad e altre cose simili) non ha mai fatto. Però già il fatto di esser riuscito a fare un task del progetto con relativi test e implementazione scritti da 0 mi soddisfa ^^








