Doctor Ciomu
Posted in Codare cu premeditare, Slagare internationale on August 31st, 2010 by Mihnea
E vara, e soare, forumurile sint goale, daca-mi permiteti sa parafrazez un curent ideologic din perioada pre-gregoriana a unui mare cintaret, producator si faraon. Pentru a umple golul lasat de plecarea in vacanta a expertilor m-am gindit sa-i dau cuvintul unui fost coleg, actual pericol public.
Intii si-ntii Peter ne arata ca pentru a accede in sferele superioare ale programarii, trebuie sa te lepezi de ultima expresie din instructiunea for:
for( nFold = 0; nFold++ < nFolders; )
{
// ...
}
Dupa aceasta tura de incalzire, Peter ridica stacheta. Ca un adevarat Bryukhonenko, el decide sa amputeze si corpul for-ului. Fierastraul se prezinta sub forma operatorului virgula, acest luceafar calauzitor pentru programatorii ce se aventureaza pe drumul conciziei:
for(int x=0; s[x++]=c, Data>>c, !Data.eof() && x<100; ) ;
Scoala Ardeleana ne invata sa folosim virgula cit mai des, mai ales intre subiect si predicat. Peter e de acord. Cind nu putem elimina corpul unui for cu ea, putem macar sa scapam de acolade:
while( x < m_cGrid.GetCols() &&
nXoff + (nW=m_cGrid[x].Width()) < nCx-3 )
nXoff += nW,
iB++,
x++;
Nici subiectul std::map nu-i este strain lui Peter:
std::map<uint,identitylist_t>::iterator iT =
m_cStatic.m_cTemplate.find(Type);
identitylist_t& TypeList =
iT == m_cStatic.m_cTemplate.end() ?
m_cStatic.m_cTemplate[Type] : iT->second;
Mai departe eroul nostru transeaza o dilema cu care s-a confruntat mai demult si Ovidiu “MVP” Cucu:
int HandlerView::GetNodeIcon( TreeNode* pcNode ) const {
//! isequal returns 0; is 5, 1 is 2, 2 is 7
return "\5\2\7"[pcNode->IsEqual2Head()];
}
In urmatorul fragment se introduce un concept revolutionar: crapatul pentru pastrarea datelor:
CString cS;
cS.Format(
"Error in reading Directory <>,\n"
"Database may be corrupt.\n"
"Tide will now crash to preserve data.", GetName() );
AfxMessageBox( cS );
throw;
Peter poarta astazi titlul de “software architect” in firma in care lucreaza (care face soft pentru platforme petroliere). Se impune deci sa dam un exemplu de arhitectura conceputa de el, in care clasa de baza apeleaza explicit metode dintr-o clasa derivata:
class ResourceData_t {
// ...
static int GetBackupMode();
};
class SecureResource_t : public ResourceData_t{
// ...
static BackupMode_e GetBackupMode();
};
int ResourceData_t::GetBackupMode(){
return SecureResource_t::GetBackupMode();
}
Inchei acest necrolog cu goatse-ul for-urilor:
for( uchar*p = m_pData; !++*--p; );











