Sve su firme šampionske, razlika je samo u kompenzaciji.
 

  Site o šampionizmu i šampionskim firmama na hrvatskoj informatičkoj sceni.            ->Engleski site
  O šampionima i šampionizmu | Novosti i obavijesti | Šampionski manifest | Legenda o šampionima | Vaše priče | Pošaljite svoju priču | Ogledi o šampionizmu | Forum (engl.) | Ankete | Pitanje tjedna | Šampionski biseri
  Šampionski biseri
  Nastavak (Next)
  Primjeri kodiranja
 
 

Sadržaj:

Stinkyeva for-petljica
Maddogov Update podataka u bazi
Šampion nikad ne kaže NOT! (by Stinky)
Točka, točka, točkica (by svi šampioni)
Usporedba logičke varijable s True ili False (Stinky)
Zanimljivo izračunavanje broja elemenata polja (Nepoznati autor)
Šampionski efikasno brisanje svih zapisa u tablici (by Pridruženi šampion)

Stinkyeva for-petljica

Priča o Stinkyevoj for-petljici već je ispričana u poglavlju o ovom programerskom gigantu ali nije zgorega malo ponoviti. Dakle, Stinky je dobio hitan zahtjev za izmjenom jednog modula u DAMP web aplikaciji. Inače je cijeli kod te web aplikacije pisao i održavao Bojan, ali je tada dotični bio u Dembeliji na drugom projektu. Budući da nitko drugi u firmi nije znao ASP, Stinky je bio jedini logičan izbor za taj task.
Nije potrebno ni reći da se Bojan po povratku iz Dembelije užasnuo kad je vidio kako je Stinky izmasakrirao njegov kod, ali naročito mu je upala u oko sljedeća konstrukcija:
 
for
x = -1 to c
  if trs.EOF = true or x > 100 then
    exit for
  end if
c = c + 1
(neka business akcija)
next

Kada je malo bolje pogledao kod oko tog mjesta, shvatio je da je Stinky prolazio kroz recordset (koji je on po svojoj konvenciji imenovao trs) i radio istu akciju za svaki record u tom recordsetu. Kada ga je pitao zašto umjesto ove lobotomične konstrukcije nije napisao, onako štreberski i predvidljivo npr.
 
do until
trs.EOF
  (neka business akcija)
  trs.moveNext
loop
 
, Stinky je samo odgovorio: "Pa for petljica mi se u tom trenutku učinila zgodnijom. Htio sam malo eksperimentirati". Tada je Bojan shvatio koliko je Stinkyu stalo do timskog rada, konvencija kodiranja i obzira prema drugim developerima.

Maddogov Update podataka u bazi

Jednog dana u šampionima Maddog je bjesnio više nego inače i psovao nešto što mu ne radi. Već su se ostali navikli da ga ignoriraju i pojačaju zvuk na slušalicama, ali bio je stvarno naporan pa se Bartol odlučio da ipak vidi što muči velikog šampiona. Maddog je objasnio da mu stalno puca snimanje u bazu a kod je tako jednostavan i mora raditi. Bartol ga je zamolio da mu pokaže kako sprema u bazu tj. gdje je ta stored procedura. Na spomen stored procedura obrijana veličina ga je samo pogledao i rekao: "Ma ne, ne koristim procedure, već to radim iz koda u VB-u. Evo vidi:"
 
RSTemp.MoveFirst
WHILE NOT RsTemp.EOF DO
  RStemp.nesto = nesto
  RSTemp.UPDATE
  RSTemp.MoveNext
WEND

Nakon prvog prolaska kroz petlju, update operacija je pucala. "A da li si siguran da i nakon update možeš sigurno ići dalje kroz recordset, možda ostane u nekom nedefiniranom stanju?", pitao je Bartol. "Ne, ne, tako sigurno može, ovaj kod sam iskopirao iz DAMP-a", nije sumnjao u svoje rješenje Maddog. "To ti je vrlo tricky operacija, ići kroz recordset i usput ga stalno mijenjati. Ali dobro, ako ti kažeš. Nego, daj da vidim tablicu koju hoćeš ažurirati", nastavio je Bartol. Nato je Maddog u SQL Enterprise manageru otvorio definiciju tablice i Bartol je kao iz topa izvalio jedno nevino pitanje: "A gdje ti je PRIMARY key u tablici?" "Kakav primary key, zar to treba?", čudio se Maddog, "pa MS Project tablice isto nemaju primary key!" "Pa, ne znam, ja sam možda glup ali su mene učili da bi svaka tablica trebala imati primarni ključ. Mislim da to muči i tvoj svemoćni ADO koji pokušava nakon update doći do novog recorda a nema se za što uhvatiti", jedva susprežući smijeh je procijedio Bartol, "ajde, probaj kreirati primarni ključ u toj tablici." Uskoro je Maddog veselo uskliknuo: "Pa to radi, jebi ga, ko bi rekao da treba napraviti taj primary key. Pa ni oni ga nisu imali!" i sasuvši još par psovki na račun projektanata MS projecta Maddog je nastavio otkrivati čarobni svijet programiranja.

Šampion nikad ne kaže NOT! (by Stinky)

Učeći programiranje šampionskom metodom pikanja, isprobavanja i kopiranja tuđeg koda, Stinky je propustio naučiti jedan logički operator. Možda zato što riječ NE nije u šampionskom vokabularu? Evo kako je Stinkyev kod rješavao problem negiranja logičke vrijednosti, u ovom slučaju Visible propertya njemu omiljene ActiveBar kontrole.

MDImain.ab.Bands("frmButtonBar").Visible = IIf(MDImain.ab.Bands("frmButtonBar").Visible, False, True)

Točka, točka, točkica (by svi šampioni)

U gornjem primjeru jedne programske linije vidi se još jedan detalj na koji šampioni nisu obraćali pažnju, a to je keširanje objektnih propertya u lokalnim varijablama. Svatko tko je ikad čitao neke priručnike ili knjige o programiranju zna da je višestruko uzastopno pozivanje istih propertya i metoda objekata rasipanje vremena. Često se iza propertya ne krije trivijalan podatak već se možda radi neki time-consuming proces. Razumno je tada vrijednost propertya dohvatiti samo jednom, pohraniti ih u lokalnim varijablama, a onda se kasnije referencirati na te varijable. Takva navika može u nekim scenarijima znatno povećati performanse programa, a programski kod ne postaje znatno kompleksniji, dapače čak može biti jednostavniji i logičniji za onog tko ga naknadno čita.

Keširanje se ne mora raditi samo kod pristupa objektima, već i kod poziva obične funkcije koja radi neku transformaciju. Koliko je šampionska ignorancija takvog pristupa bila velika, najbolje pokazuje sljedeći nakaradni primjer:
 
If
UBound(Split(strRecepientList, ";")) > -1 Then
For cnt = 0 To UBound(Split(strRecepientList, ";"))
  If Len(Split(strRecepientList, ";")(cnt)) > 0 Then oMail.Recipients.Add     Split(strRecepientList, ";")(cnt)
  Next cnt
End If

Umjesto da lijepo jednom napravi Split stringa u array i to pohrani u varijablu na koju će se kasnije stalno referencirati, šampionski autor je uporno, copy-paste metodom, "cepao" string svaki put kad mu je zatrebao neki element polja. Možda je mislio da kad jednom spremi rezultat u varijablu to više neće biti isto.

Usporedba logičke varijable s True ili False (Stinky)

Ovo je bio Stinkyev specijalitet za koji nismo sigurni da ćete svi shvatiti kao grešku. Čuli smo od još nekih samozvanih VB gurua da je to normalna stvar. Hebi ga, mi valjda nismo normalni ali to nam je smetalo jer je očito otkrivalo da Stinky ne kuži da u logičkim izrazima ne mora uvijek stajati relacijski operator (=, < ili >). O čemu se radi? Dakle, Stinky je običavao pisati npr.:

If FormLoaded("frmODBCOpen") = True Then Unload frmODBCOpen

Ako funkcija FormLoaded vraća boolean vrijednost, onda je suvišno uspoređivati to s konstantom True, već se taj dio može izostaviti. Dakle:

If FormLoaded("frmODBCOpen") Then Unload frmODBCOpen

I tako pišu svi koji se ne smatraju šampionima, bar iz našeg iskustva. Griješimo li?

Zanimljivo izračunavanje broja elemenata polja (by Nepoznati autor)

Ovu cvebu ne možemo nažalost pripisati niti jednom od poznatih šampiona ali vrijedi je zabilježiti. Dakle, autor je očito htio izračunati koliko dobiveni array ima elemenata. S obzirom da su svi šampioni tvrdili da su više nego iskusni u VB-u i VBScriptu, ostaje pitanje zašto umjesto petlje nije jednostavno iskoristio UBound funkciju. Možda se bojao upotrijebiti je? Ili, ne daj bože, nije znao za nju?

 
aOrder = Split(strOrder, ",", -1, 1)
alen = 0
For Each a In aOrder
  alen = alen + 1
Next
 

Šampionski efikasno brisanje svih zapisa u tablici (by Pridruženi šampion)

Sljedeći "coding pearl" je jednom od autora sitea ostao u sjećanju iz vremena prije nego je došao u šampione ali se po ideji definitivno zaslužuje uvrstiti među šampionske bisere. Autor bisera je inače jedan stopostotni šampion iz vremena dok se još bavio programiranjem što je na sreću prestao činiti. Da je upoznao Maddoga, vjerojatno bi se lijepo slagali jer ovaj odsječak jako podsjeća na Maddogov stil kodiranja i shvaćanja baza. Eh da, ne smijemo zaboraviti reći da dotični autor nije imao pojma o SQL-u i da je tvrdio "Što će mi to, kad u Accessu lijepo vizualno možeš složiti bilo kakav query?" Kod je inače izvađen iz Access modula.

 
rstNesto = db.OpenRecordset("Neka_Tablica_u_Access_bazi")
rstNesto.moveFirst
Do until rstNesto.EOF
  rstNesto.Delete
  rstNesto.MoveNext
Loop
 

Dakle, jasno vam je da je šampion htio obrisati sve zapise u nekoj tablici. Da ga parafraziramo "Što će mi SQL i Delete query kad mogu lijepo ići u petlji i brisati zapise?" Inače, priča se da je dotični svojevremeno razmišljao da otvori školu za programere. :((


  Nastavak (Next)