Programmikood, mis tekitas iivelduse…

Olen vist alates Delphi 1.0 alates igasugu teist koode parandanud ja täiustanud; nüüd on tulnud selliseid pirne, et pidin sellest lausa kirjutama. Öeldakse, inimene kas on programmeerija või ei ole, teisel juhul lihtsalt firma raha raiskaja.

Pirn nr 1: muutuja, mis on kõikjal.
– Globaalsed muutujad on saatanast, nende kasutamine peab olema eriti teadlik tegevus.
Enamasti on globaalsed muutujad eraldi unitis ala teed myglobals uniti;

Parameetrite edastamine ühest protseduurist teise globaalsete muutujate kaudu nimetatakse lausa halvima stiili musternäide.

unit1


var
dataindx : integer = 10;

unit2


var
dataindx: integer = 15;

ja siis unit3

implementation
uses unit1,unit2;


procedure dosomething;
begin
palju arvutusi ja dataindx…
end;

Juhul, kui üldse globaalset muutujat oleks vaja kasutada, mis sama nimega, siis ÄÄRMISEL juhul kasutada nii

procedure dosomething;
begin
palju arvutusi ja unit2.dataindx…
end;

Pärast leidsin ka protseduure, kus sisemiselt oli sama nimega muutuja defineeritud. Siis imestati, miks kusagil mingi array index üle piiride lendab.

Pirn nr 2: loodud globaalne massiiv A : Array[1..20000] of shortstring;

Selline praktika täiesti mõeldamatu, et nii andmeid hoida, seal oleks täiesti sobilik olnud TStringlist

või äärmisel juhul.

type
TStrArr = Array of string;
var
B : TStrArr;
….

setlength(b,512);

Pirn nr 3 Visuaalses pooles täielik käkerdamine.
Kui objektidel on property Enabled, siis kasutati hoopis võrdlemisel Color property’d ala objekt keelatud color=btnFace.

Pirn nr 4 Sul on ekraanil 95 visuaalset objekti ja tahad need korraga, kas enableda või disableda. Sa ei hakka ju tegema (aga reaalsuses tehti):
label1.enabled:=false;
label2.enabled:=false;
edit1.enabled:=false;

Teed omale utilities moodulisse funktsioonis, mis käib vormi komponendid üle ja vaatab, kas on enabled property olemas ning vastavalt soovile see kas true / false.

Pirn nr 5 Juhul, kui vaja andmebaasi mingid väärtused salvestada ning sa ei saa TDbComboboxi kasutada ning kasutad tavalist comboboxi, aga kuidas hoida indekseid ja valikuid jälgida.

Kood, mille mina leidsin sealt – Query abil loetakse andmed combosse;

Siis, kui tuli salvestamine kood: HARDCODED nimed;
if mycombo.text=’Goods’ then value:=1
else
if mycombo.text=’Cars’ then value:=2

Täielik katastroof, tootesse ei tohi kunagi midagi niimoodi hardcoded stiilis kirjutada.

Juhul, kui tavaline combo, siis tuleks ka nimetusega siduda väärtus, mis baasist tuli.

select id,name from …

while ….
if fieldbyname(’id’).asInteger>0 then
cmb.addobject(fieldbyname(‘name’).asString,TObject(Cardinal(fieldbyname(’id’).asInteger)));

end

Hiljem, kui väärtus valitud saab teha
id:= …Cardinal(objects[i]);

Täiesti lubatud lahendus, kui id väärtus jääb Cardinali väärtuse vahemikku. Pointer objektile ei pea olema objekt. Lihtsalt, kui addobject(…,TMyData.create(id)) teha, siis on oht, et hiljem unustatakse see abistav klass vabastada ! Seda viga esineb liiga palju.

Ka oli lahedust kasutatud, kus combo element oli stiilis

Car[ja mingi 1000 tühikut] :5

Pirn nr 6

Iga andmebaasi tegevuse jaoks oli tehtud oma query, datamodule oli nii kirju, et mul lõi endal pildi virvendama. Ntx kontrollpäringuid oleks saanud vabalt teha läbi ühe query.

Pirn nr 7

Jube palju kasutati andmebaasi puhul variante.
fieldbyname(‘somevalue’).value:=’A’;
fieldbyname(‘somevalue’).value:=123;

Seetõttu leidsin ikka X vigu, kus tuli invalid conversion. Üldiselt variant ka muutuja, mida tohib kasutada ainult teadlikult. Suurem rakendus neil pigem ActiveX juures, muidu kui on võimalik neid vältida, vältige

Pirn nr 8
Muutujate nimed ka täiesti kaootilised. Ühe protseduuri all võis olla kuni 40 muutujat stiilis aaaa,b1,c3,kkk,da,pbb ……

…nii side lõpp…üritan midagi ilusat mõeldaselle leitud kaose kõrvale.

Advertisements

Lisa kommentaar

Täida nõutavad väljad või kliki ikoonile, et sisse logida:

WordPress.com Logo

Sa kommenteerid kasutades oma WordPress.com kontot. Logi välja /  Muuda )

Google+ photo

Sa kommenteerid kasutades oma Google+ kontot. Logi välja /  Muuda )

Twitter picture

Sa kommenteerid kasutades oma Twitter kontot. Logi välja /  Muuda )

Facebook photo

Sa kommenteerid kasutades oma Facebook kontot. Logi välja /  Muuda )

Connecting to %s


%d bloggers like this: