Smalkais stils
Jun 12, 2005
Sendienās, kad rakstīju paskālā, manām funkcijām arvien bija tieši viens izejas punkts - funkcijas beigās. Dažādie iespējamie izpildes ceļi tika būvēti ar if-then konstrukcijām lielā dziļumā, boolean tipa karodziņiem (bija standarta nosaukumi continue, changes_done
utml.). Lai vai kā, katra funkcija tomēr tika izpildīta no sākuma līdz beigām, ar lielākiem vai mazākiem lēcieniem pāri izlaižamajiem koda gabaliem.
Function saknes(a,b,c:integer); Var res: string; d: integer; Begin If (a = 0) Then res := 'nav kvadrātvienādojums' Else Begin d := b*b - 4*a*c; If (d < 0) Then res := 'sakņu nav'; If (d = 0) Then res := '1 sakne'; If (d > 0) Then res := '2 saknes'; End; saknes := res; End;
Citādi jau nevarēja - nebija tāda return
operatora.
Tagad apmēram vienādi daudz lietoju Python, PHP un Javascript. Ievēroju, ka manas funkcijas vairs nav tādas, kā agrāk, - tagad funkcijām ir apmēram tikpat izejas punktu, cik ir būtiski atšķirīgu izpildes ceļu. Apmēram šādi:
function saknes(a,b,c): if (a == 0) return 'nav kvadrātvienādojums' d = b*b - 4*a*c if (d < 0) return 'sakņu nav' if (d == 0) return '1 sakne' if (d > 0) return '2 saknes'
Manuprāt, šādi ir lasāmāk - ja, piemēram, funkcijas sākumā ir 7 ievaddatu korektuma pārbaudes, nav jātaisa if-then
konstrukcijas 7 līmeņu dziļumā un/vai jālieto karodziņi.
Vienu brīdi, kad šīs stila, piegājiena un metodes izmaiņas ievēroju, palika bailīgi - vai otrais paraugs - ar daudzām izejām no funkcijas - nav slikts (līdzīgi, kā goto, break
utml.) Pagudroju, nekādi sliktumi nenāca prātā. Visā visumā, tas atgādina tādu elastīgāku switch
operatoru.
Man gadās visādas muļķības izdomāt - varbūt otrajam variantam tomēr ir kāds ievērojams trūkums?