‹ paviānu štelles

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?