<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Bon dia,<br>
<br>
Al 04/10/2012 20:31, En/na Jordi Mas ha escrit:<br>
</div>
<blockquote cite="mid:506DD5F9.3010405@softcatala.org" type="cite">Bona
tarda,
<br>
<br>
<blockquote type="cite">Com que el projecte Catalanitzador ha
crescut molt, i per a posar-me a treballar m'agradaria coneixer
bé el codi d'en Jordi Mas he començat a preparar una llibreria
'libcatz' amb les classes originals convenientment modificades
en les seves entranyes de manera que el codi sigui el màxim
portable. A més, també he pogut veure que ha crescut molt </blockquote>
<br>
Quan et refereixes al màxim portable pots posar alguns exemples?
<br>
<br>
</blockquote>
Això és deformació professional. Intentar que el codi s'ajusti al
màxim a les llibreries ANSI C, ANSI C++, STL etc.. per si algun dia
volem que pugui compilar amb qualsevol compilador.<br>
<br>
Així, en el cas del fitxer de log proposo utilitzar _wfopen enlloc
de CreateFile, fclose enlloc de CloseHandle, etc...<br>
<br>
En el cas de les dates enlloc d'utilitzar el GetLocalTime proposo
utilitzar _ftime64 i _localtime64.<br>
<br>
Tots aquests canvis els he implementat i la generació del fitxer
queda exactament com en el cas del Catalanitzador actual.<br>
<br>
<br>
<blockquote cite="mid:506DD5F9.3010405@softcatala.org" type="cite">
<blockquote type="cite">ràpid i no se li ha pogut dedicar molt
temps a protegir el codi contra possibles errors del
programador. Així que proposo:
<br>
<br>
- Utilitzar els namespaces per a contenir al màxim el codi i no
equivocar-nos.
<br>
</blockquote>
<br>
El tema dels namespaces em sembla bé. La confusió potencial que
soluciona és bàsicament utilitzar una classe per altre.
<br>
</blockquote>
Una altra cosa que he vist en el codi és la utilització del '<i>using</i>'.<br>
<br>
using namespace std;<br>
<br>
A mi particularment no m'agrada donat que es perden les avantatges
dels namespaces. Prefereixo escriure més, però tenir més control del
que toco. Si cal escriure "std::cout << std::endl" el codi
queda una mica més comprensible i evitem errors.<br>
<br>
<blockquote cite="mid:506DD5F9.3010405@softcatala.org" type="cite">
<br>
<blockquote type="cite">- Utilitzar més herències per a reduir el
tamany dels fitxers.
<br>
</blockquote>
<br>
Tens alguns exemples de fitxers que voldries reduir amb herències?
<br>
</blockquote>
En treballar amb el fitxer LogFile, i per evitar tocar l'interface
que utilitzes he fet el següent:<br>
<br>
files::LogFile -> files::filebase<br>
files::ffile : accés al fitxer de log<br>
<br>
En la classe filebase tinc un punter a un fitxer ffile que és el que
realment accedeix al fitxer. ffile acaba estant com a private de
filebase, de manera que queda protegit i al mateix temps el FILE*
dins de ffile també és private protegint el seu valor i l'accés.<br>
La classe filebase únicament té sentit per a protegir la interface
que estàs utilitzant. He tret algunes rutines protegides de Logfile
per a posar-les dins de filebase.<br>
<blockquote cite="mid:506DD5F9.3010405@softcatala.org" type="cite">
<blockquote type="cite">- Protegir més les variables dins de les
classes.
<br>
</blockquote>
<br>
Pots posar alguns exemples?
<br>
</blockquote>
En el cas de 'HANDLE m_hLog' es pot escriure en ell des de diversos
punts dins de la classe mateixa i en cap d'ells es comprova si el
valor de la variable té un valor bo. De fet et disparará una
excepció l'aplicació si no crides CreateLog un cop has creat
l'objecte.<br>
Ja t'he comentat que estic molt pervertit pel meu món de
programació, i potser no fa falta controlar tant el codi, encara que
crec que pot ajudar.<br>
<br>
<blockquote cite="mid:506DD5F9.3010405@softcatala.org" type="cite">
<br>
<blockquote type="cite">Jordi, comprenc que a tot programador li
'fot' molt que toquin el propi codi. Què et sembla si t'envio
una petita mostra?
<br>
</blockquote>
<br>
No tinc vincles emocionals amb el codi. Qualsevol canvi em sembla
bé que sigui una millora.
<br>
<br>
</blockquote>
Caldria que les classes i el codi mantinguéssin un mateix Coding
Standard.<br>
<br>
- Una de les coses que m'agrada és el '_' que afegeixes davant de
les rutines protegides i que utilitzaré a partir d'ara en els meus
desenvolupaments futurs.<br>
<br>
- He vist també que en alguns casos utilitzes 'm_' davant de
variables de classe i en d'altres no. A mi m'agrada afegir '_' al
final de la variable per a protegides i '__' (2 _) per a les
privades.<br>
<br>
- Respecte als if (...) una cosa que podries fer i que el MISRA C
recomana és posar el valor de la constant abans per a que el
compilador t'avisi si t'equivoques: (0 != variable) enlloc de
(variable != 0). Això evitaria errors difícils de trobar com
if(variable = 0) // ==<br>
<br>
- A l'entrada de rutines caldria afegir comprovacions de validesa i
de rang utilitzant 'asserts' per a que al "debugar" cantin els
errors.<br>
<br>
- Utilitzar el modificador 'const' per a variables d'entrada i no
sortida.<br>
<br>
- A la classe LogFile he afegit una rutina writeLog(const wchar_t*
format, ...) similar al printf per a evitar la sobrecàrrega de
Log(wchar_t*), Log(wchar_t*,wchar_t*), etc... <br>
<br>
<br>
<blockquote cite="mid:506DD5F9.3010405@softcatala.org" type="cite">Atentament,
<br>
<br>
Jordi,
<br>
<br>
<br>
[1] <a class="moz-txt-link-freetext" href="http://en.wikipedia.org/wiki/You_ain't_gonna_need_it">http://en.wikipedia.org/wiki/You_ain't_gonna_need_it</a>
<br>
<br>
</blockquote>
La referència està força bé.<br>
<br>
Espero que les propostes t'agradin, no sóc ningú per a fer res sense
el teu consentiment. Això em pot donar molta feina i crec que pot
ajudar al manteniment i clarificació de tot el codi.<br>
<br>
Atentament,<br>
<br>
Jordi L.<br>
<br>
</body>
</html>