Mine sisu juurde

Arutelu:Visual Basic 2005/Väldi

Lehekülje sisu ei toetata teistes keeltes.
Lisa teema
Allikas: Vikiõpikud

Loogilised operatsioonid

[muuda]

Lahendusi on alati palju, kuid optimaalseid on 1. Tihti ei ole aega kõiki valemeid läbi proovida, seega tasuks oma stiilipõhiline koodiülesehitus optimeerida.

Ma ei saa sellega kuidagi nõus olla. Optimaalseid lahendusi võib probleemile vabalt olla mitmeid. Tihtipeale on üksnes stiili või maitse küsimus, millist neist kasutada.

Eriti ohtlik tee on aga proovida koodi koheselt võimalikult palju optimeerida. Ehk siis tsiteerides klassikuid:

Premature optimization is the root of all evil.

Loogikatehete optimeerimine näib mulle aga eriti asjatu vaev - praktiliselt olematud on olukorrad, kus loogikatehete kiirus hakkab oluliselt mõjutama programmi kiirust.

See, et algajad kirjutavad

x = not x

asemel

if x = true then x = false else x = true

tuleneb kogenematusest. Põhjendusest, et esimene variant on lihtsamini loetav/kirjutatav, peaks täiesti piisama. Kiirus on siin täiesti ebaoluline.

Teine viga mis tehakse just näilise kiirusega seoses, on keerukate tehete paigutamine ühele reale. A'la:

if (isMan or isWoman) and (hasAxe or hasKnife or hasGun) then
    runAwayFrom(x)
end if

Märksa parem on grupeerida sellised pikad ja lohisevad loogikatehted arusaadavamateks alamosadeks, nagu siin:

isHuman = isMan or isWoman
hasWeapon = hasAxe or hasKnife or hasGun
if ( isHuman and hasWeapon ) then
    runAwayFromHim()
end if

Nene 16. oktoober 2006, kell 22:05 (UTC)

Re:

[muuda]

"Loogikatehete optimeerimine näib mulle aga eriti asjatu vaev". Näiline ≠ Tõeline, püüan seleteada: Loogikapõhised tehted on tingimuste ja korduste alused, millest sõltub kogu kood. Kuid ma ei rääkinud loogikatehete endi optimeerimisest, vaid nn. korduva uurimise vähendamisest.

Selle asemel, et kirjutada kood:

Private Sub Timer1_Tick() Handles Timer1.Tick
   if checkbox=true then render=true:exit for
   ...jne
End Sub

hoopis

Private Sub CheckBox1_CheckedChanged() Handles CheckBox1.CheckedChanged
   bool1=not bool1
End Sub
Private Sub Timer1_Tick() Handles Timer1.Tick
   if bool1=true then render=true:exit for
   ...jne
End Sub

See näide demonstreerib, et objekti uurimine võtab kauem aega. Samal põhjusel on Css'is mitme faili avamine aeganõudvam kui ühe, kuigi sisu on neil kokku sama. Ning koodi saab optimeerida kui, taoline objekti poole pöördimine ära jätta.

Boolean väärtus on kui elementaarlüliti, millel on väga palju kasutusalasid. Oleks äärmiselt töömahukas projekt seletada ära põhivormidki. Kirja sai pandud punktid, mis kajastavad 1 realisi boolean käsitusviise üldisel tasemel, ja näitlustatud kuidas oleks võimalik võrrelda mis on parim.

Aga üldistadesi taolise koodijupi elementaarlülitini, ununes kuskil selle käigus, et kõik inimesed ei oma sama hoomatavust koodile mida kirja panen. --M2s17 18. oktoober 2006, kell 17:43 (UTC)