Lokutus
Ego sum Lokutus flagellum dei

Šířka zdrojáku
23.10.2007
Development

Jak píšete své zdrojové kódy? Jako prasátko, nebo jako slušňák?

Než se někdo začne cítit uražený, tak předesílám, že jde jen o mé soukromé hodnocení, které je zase – jako vždy – subjektivní. ;-)

Každý je zvyklý na něco jiného a každému vyhovuje něco. Někomu vyhovuje skrolovat ve zdrojáku jak vertikálně, tak i horizontálně. Mně ne. A proto jsem kdysi dávno začal psát své zdrojáky hezky úhledně zarovnané maximálně na 80 znaků.

Než budu pokračovat, zde je můj názor na šířku 80 znaků, kterou považuji za typografický standard. Jedna věc je, co mi umožňuje technologie – a že toho umožňuje více, než obyčejný papír – ale druhá věc je, co nám umožňuje náš mozek. Kdyby se nám pohodlněji četly široké traktáty, nedělaly by se v historii úzké svitky a knihy, ale třeba dva metry široké. Nakladatel by po vás nechtěl normostrany a noviny by se netiskly do sloupců. Prostě úzký viewport je základ přehlednosti textu, ať se to někomu líbí, nebo ne.

To byl subjektivní názor a teď to objektivní zdůvodnění, proč psát zdrojový kód raději 80 znaků široký, přestože je s tím zalamováním (obzvláště v LS) leckdy strašně jebání.

  1. I technologie je omezena svou fyzickou podstatou, takže většina monitorů není dostatečně široká, aby zobrazila zdrojový kód maniaka, který je několik metrů dlouhý. Zobrazí se tedy horizontální skrolbar a je nutno skrolovat ve dvou směrech místo v jednom. Návaznost se tedy snadno ztratí, ještě než dojedete na konec řádku. Prostě co nevidíte najednou v nějakém rozumném bloku, jako by v tu chvíli pro mozek neexistovalo. Je potřeba se soustředit na to, aby se neztratila nit, což vyžaduje zbytečnou energii navíc, která by se mohla lépe využít při samotné analýze kódu. Už mnohokrát se mi stalo, že jsem snadno objevil chybu, nebo možnost optimalizace, když jsem viděl zdroják, jako ucelený blok.
  2. Zde si vystačím s lakonickým – zkuste si široký zdroják vytisknout na tiskárně, nebo vložit do nějakého dokumentového formátu, třeba PDF. ;-)

Prostě 80 znaků má svůj smysl. Věděli to již staří typografové a já bych je nepodceňoval.

Pro začátečníky – Jak psát zdrojový kód v Lotus Scriptu

1. Je potřeba se vyvarovat zbytečného zanořování. Mám takové pravidlo – pět zanoření a dost. Funkce, která používá více více než 5 zanoření je špatně napsaná. Buď se dá rozdělit, anebo upravit. Např. funkce:

   Public Sub XY
   If Me.IsOpen Then
    If Me.TDateTime.IsValidDate Then
      If tmp < 0 Then
      If something >= somethingElse Then
      Select Case X
      Case 1 : '... do st
      Case 2 : '... do st
       Case Else :
        For i = 1 To 100
'... do st
Next
End Select
End If
End If
End If
End If
End Sub

Co si o tom myslíte? Já myslím, že by se dala slušně upravit. Začal bych tím, že podmínku If Me.IsOpen then... bych dal zvlášť a znegoval bych jí.

   Public Sub XY
     If Not Me.IsOpen Then Exit Sub
     If Me.TDateTime.IsValidDate Then
       If tmp < 0 Then
         If something >= somethingElse Then
           Select Case X
           Case 1 : '... do st
           Case 2 : '... do st
           Case Else :
             For i = 1 To 100
               '... do st
             Next
           End Select
         End If
       End If
     End If
   End Sub

To už vypadá lépe, ne? Co dál? Třeba ten cyklus by se jistě dal vložit do samostatné funkce a ty dvě podmínky před Selectem by se daly spojit pomocí logického operátoru AND.

2. Zkracovat dlouhé řádky, a pokud není zbytí, tak zalamovat. Třeba pokud se funkci posílá více parametrů.

Zalamování zdrojového kódu se provede snadno. Na konec nějakého logického celku přidat mezeru a podtržítko a pokračovat na novém řádku. Například hlavička funkce s mnoha parametry se dá napsat otrocky:

  Public Function GetTemplateByCode(DBType As String, Temlist As String, Code As String, pattern As Variant) As Boolean

anebo čistě:

  Public Function GetTemplateByCode( _
DBType As String, _              ' Nejaky komentar
Temlist As String, _              ' Dalsi komentar
Code As String, _                 ' A jeste jeden komentar
pattern As Variant _              ' Posledni komentar
) As Boolean

Zalamování stringu je ještě snažší. Stačí string uzavřít do složených závorek, místo uvozovek:

  txt = {Toto je velmi dlouhý, předlouhý text, 
který by se nám normálně nevešel na jeden řádek a tak jsme ho
dvakrát zalomili. Teď je mnohem lépe čitelnější :-)
}

Eh píšu kraviny při večeru. Takhle se samozřejmě dá string napsat, ale zůstanou nám tam znaky pro tvrdé zalomení. Je to vhodné třeba pro MsgBox, když ten text chceme opravdu zalomit. Takže klasicky, pokud nechceme dlouhý text, musí se rozdělit navíc kusů, uzavřených v uvozovkách, nebo pajpách a pomocí oprátoru & rozdělit s podtržítkem:

  txt = "Toto je velmi dlouhý, předlouhý text," _
& "který by se nám normálně nevešel na jeden řádek a tak jsme ho " _
& "dvakrát zalomili. Teď je mnohem lépe čitelnější :-)"

3. Používat kratší názvy proměnných. Někdo s oblibou používá proměnné jako CurrentDB, DocColl, CurrentUIDoc, nebo Workspace. Spolu s vlastnostmi a metodami jednotlivých tříd je to pak strašně ukecané (CurrentDB.IsCurrentAccessPublicReader). Já používám cDb, cCol, uDoc, popř. Ws. Používám to tak léta a vyznám se v tom velmi dobře.

Nakonec řešení malého problému, který nám při vývoji v Lotus Notes nastává, pokud nepoužíváte nějaký externí editor, jako třeba plugin pro Lotus Script do Eclipsu. V editoru Lotus Notes Designera neexistuje žádné pravítko, ani hraniční čára, která by vám řekla, kde končí osmdesátý znak. Jeden můj bývalý kolega to vyřešil Šalamounsky a mně se to řešení tak zalíbilo, že jsem ho bezezbytku přejal. Když není ruler, je potřeba si ho sám vytvořit. Používám to i jako oddělovač funkcí a kód je díky tomu o dost přehlednější. :-)

'---+----+10--+----+20--+----+30--+----+40--+----+50--+----+60--+----+70--+----+

linkuj.cz vybrali.sme.sk

Komentáře

Eh... (Q, 23.10.2007, 20:38:48)
Lumpe jeden! Poznavam ozveny nasi posledni debaty :-)

Ad nazvy promennych - pokud jsou lokalni ve funkcich, je dobre je zkracovat (typicky pro promenne cyklu i,a,b,c (pak se ve vnorenych cyklech rady promichavaji, btw)). Pokud jsou globalni (fujtajxl - i kdyz v LS to muze vylepit performance - typicky Dim s as new NotesSession v kazde funkci) nebo jsou to metody objektu, pak neni nic lepsiho, nez mit v globalnim LS

Dim db1,db2,db3,db4 as NotesDatabase

k tomu mit asi tak 15 funkcni v jednom bloku, kde to vsechny pouzivaji a po roce chtit dekodovat co se zrovna ve ktere promenne v tom danem case nachazi. Stejnetak neni nic lepsiho nez si udelat knihovnu a pojmenovat funkce
getString1()
getString2()
misto napr.
getString() a getStringNotTrim()

Moje odpoved jakoobvykle zni: Je treba pouzit to, co je na danou aplikaci vhodne ;-)

PS: Co to je porad za obscesi s tim, ze "muj nazor je subjektivni, proto se opovazte mi rict, ze je blbej, protoze ja vam reknu ze je sice blbej, ale muj a vy si muzete tahnout". Prijde mi to jako nejaka berlicka, jak rict, ze diskuze neni zadouci a negativni komentare uz vubec (alespon nekde existuji weby, kde to tak funguje). Muze vubec existovat nejaky objektivni nazor? Pokud nejaky nazor vytvori clovek a ne nejake vyssi vedomi vesmiru, pak se jedna o nazor _VZDY_ subjektivni (jak to bylo? Neni na svete clovek ten, jenz se zavdeci lidem vsem?) a ten dodatek k tomu v tech uvozovkach je tak nejak automaticky a uz z toho plyne. Kde delam ve sve uvaze chybu?

(Lokutus - WWW, 23.10.2007, 20:58:43)
Hehe, no jo, no. :-) Nějak mi to zůstalo v hlavě.

Co se obecných knihoven týče, resp. tříd, používám i dlouhé názvy proměnných, protože tam si dávám velký záležet na zdrojáku a na tisících řádcích už je pak ta čitelnost znát. Ale v normálních frontend skriptech je to pojmenování jedno.

K tomu PS. No, nějak se rojí čtenáři, kteří mají potřebu se do krve hádat, jako bych svůj názor výdával za nějaký vesmírný axiom, nebo co. Nestačí jim, že je to blog a na blogu jsou jenom názory, které jsou vždy subjektivní a pokud je tam něco pro objektivní polemiku, bývá to explicitně označené.
Takže abych předešel těmto komentářům, označuji to rovnou jako "subjektivní názor". To už pochopí každý. IU když ne vždycky. Pod článkem o antiHulánovi se objevil také jeden jouda, který mi vyčetl, že svůj názor prezentuji jako jediný správný, přestože v tom článku bylo jasně uvedeno, že jde o "subjektivní názor".

(Q, 23.10.2007, 22:10:08)
Ad 2, odstavec - v podstate jinymi slovy receno to, co jsem rikal i ja - presneji. Abych jeste doplnil ten prvni prispevek, tak zopakuju to, co jsem rikal i predtim: pokud chce nekdo zdrojaky tisknout na tiskarne, nebo exportovat do nejakeho dokumentu, pak: dobre mu tak :-))) Stale jsem zastance toho, ze zdrojaky maji byt v archivech, na CVSkach a na papire nemaji co delat (nevidim ucel, krome analyz, kam se stejne vykonny zdrojak nedava).

Ad ty nazory: Naopak ja sem hrdej na to, ze SVOJE nazory prezentuju jako jedine spravne! Jsou moje, ja si je vytvoril nebo prejal a ne proto, ze si chci vytvorit nazory spatne, ale proto, ze si chci vytvorit nazory spravne. Jine, nez jedine spravne nemuzu a nechci prece sirit dalsim. Netvrdim ovsem, ze ty nazory mohou byt jedine spravne pro vsechny, pak je ale na tom druhem, aby mi vnutil svuj jediny spravny nazor a to podporil argumenty a ja mohl svuj pripadny spatny nazor opravit. Prece je blbost to davat do nejakeho disclaimeru, zvlast kdyz se jedna o blog, weblog, neboli osobni exhibicionisticky zapisnik jednoho konkretniho cloveka. To prece nema logiku, ne? Soplaky, ktery si pouze vylejvaj zlost je treba ignorovat (nebo se jich muzes ptat na konkretni otazky tak dlouho, dokud neodpovi (tedy vetsinou zkonci tak, ze zmizej z fora)) a dalsi soply, ktery zacinaj flame naprosto ignorovat, protoze neni vetsi ponizeni pro tapetovace, nez ze si ho nikdo nevsima. Pak ho to prestane bavit, protoze se ocekavana e-erekce nedostavila. Jak proste.

(Lokutus - WWW, 23.10.2007, 23:31:00)
No, tisknout, nebo exportovat - proč ne. Máš velký projekt a chceš k tomu udělat dokumentaci. Dokážu si představit spoustu možností.

Každopádně pořád platí, že kompaktní zdroják se čte lépe, než zdroják roztahaný. Prostě těch důvodů je víc.

A i v těch obecných knihovnách dodržuji pravidlo 80 znaků. Resp. tam hlavně.

Jak je to v SAP (Pavel Jaroš - Mail - WWW, 06.11.2007, 10:09:17)
My ABAPisti to máme jednoduché - délka řádku v editoru je omezena na cca 70 znaků (historický pozůstatek), takže nemůžeme psát nic jiného, než ukázkově čitelný kód (http://jaros.ezin.cz/media/imgs/prog/abap_edit.gif). Ovšem bývaly i doby, kde neexistovalo nic jiného, než rádkový editor, kde se dali editovat pouze jednotlivé řádky oddělene, ale to už je naštěstí "dávno" pryč.
Apropós to "pravítko" mi něco připomíná ;-)
http://jaros.ezin.cz/media/imgs/prog/pravitka.gif

(Lokutus - WWW, 07.11.2007, 18:36:14)
Zas ten tvůj editor umí kolaps bloků a počítadlo řádek.
Ten můj ne.

(Pavel Jaroš - Mail - WWW, 08.11.2007, 13:15:54)
To je ovšem horká novinka, není to tak dávno, co ABAP editor neuměl ani zvýrazňovat syntaxi. Enjoy SAP! :)



Přidání komentáře...


Vaše jméno:


Váš e-mail:


URL vašich stránek:


Nadpis:


Text: