Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

Nedělní WTF: Základy programování v jazyce Boo

17.16 - 8. března 2009 | Jen tak

Při pravidelném proklikávání se službou Devlogy.cz jsem zaznamenal výskyt dalšího dílu seriálu Základy programování v jazyce Boo na serveru programujte.com. Vzpomněl jsem si na první díl seriálu, který jsem četl před časem, a opět se mi naježila srst. Šel jsem se tedy podívat, jak s tím autor vládne dál.

No děs a bída. Jestli se takhle někde programuje a ještě k tomu v Boo, tak to je mi moc líto. Boo vzniklo jako agilní jazyk inspirovaný jednoduchostí Pythonu a silou dotnetu. Sice je silně typový, ale nenutí nás typy explicitně vyjadřovat. V podstatě nás nenutí k žádným zbytečnostem. Jeho filosofii lze ukázat na následujících ukázkách výpisu Hello World na konzolu:

class Program {
  public static void Main() {
    System.Console.Write("Hello Wold");
  }
}

Začal jsem nejjednodušším programem v C#, který vypíše na konzolu Hello World. Teď to samé v Boo:

print 'Hello World'

Ano, to je vše.

Když se vrátím k článkům na programujte.com, je vidět, že autor netuší, která bije, když píše:

„Každý kód v Boo musí začínat jmenými prostory.“

A skutečně ukázku s Hello World okořenil krásně zbytečným importem jmenného prostoru System. Není nad to mást začátečníky spoustou zbytečností, protože pak mají pocit, že se toho naučili hodně. :) Bohužel praxe ukazuje, že méně je mnohdy více a tak se posuneme o kousek dál. Tedy spíš zpátky na začátek, kde autor popisuje instalaci IDE. Už tohle je pěkná blbost, protože k vyzkoušení Boo žádné IDE nepotřebujete. Boo je totiž vybaveno interaktivní konzolou booish, která je podobná těm, které můžete znát z dynamických jazyků Python, Ruby nebo třeba z mona – pro C#. Prostě konzola, kde píšete kód a rovnou se vám pod rukama vykonává. Pro začátečnické pokusy ideální.

Další skvělé expresivní zážitky najdeme v druhém a třetím díle v odstavcích věnovaných proměnným. Autor se zapomněl zmínit, že máme k dispozici celý typový systém dotnetu.

„Typů proměnných je více a my si probereme jen ty základní.“

A už začíná deklarovat jednu proměnnou za druhou.

celeCislo as int  //definice, aktuální hodnota 0
celeCislo = 200  //inicializace proměnné
celeCislo as int = 5

Fakt krásné. Všimněte si prvního komentáře. To je stavební kámen další ukázky:

//příklad cyklu while
import System
i as int
while(i < 5):
   print i
   i++

Za takový kód bych si dobrovolně zakázal oběd, abych dostal trochu krve do mozku. Ukázka je bezesporu funkční, ale obsahuje zbytečný import, spoléhá se na implicitní inicializaci hodnotové proměnné, navíc zanáší šum v podobě zbytečných závorek. Takže jak se tedy Boo píše? Ukázka s proměnnými:

integer = 5
realNumber = 5.0
text = 'some text'

Jednoduše přiřadíme hodnotu a kompilátor už ví jakého je typu – a není to object ani variant. ;)

i = 0

while i < 5:
  print i++

A tady je celá myšlenka ukázky cyklu while. Proč je lepší?

  1. Používat komentáře je krásná věc, ale většinou je lepší psát tak, aby se komentáře používat vůbec nemusely. Většinou stačí slušně pojmenovat proměnné (nejlépe celým jménem). Tam, kde chcete napsat komentář, raději zvažte, zda není lepší vytvořit novou metodu s dostatečně popisným názvem.
  2. Zbytečným importem nic nezkazíme, ale zvýšíme šum. Někdo by dokonce mohl přemýšlet nad tím, proč tam ten import vlastně je.
  3. Používat neinicializované proměnné je už na výprask. Než uvádět explicitně typ, to tam radši napište tu implicitní hodnotu, ten kód je pak mnohem srozumitelnější.
  4. No a závorka. Pokud na ní jste z Cčkových jazyků zvyklí, prosím, ale je to další zbytečné zašumění kódu.
  5. Hodit postfixovou inkrementaci na jeden řádek s printem už je jen taková třešnička na dortu.

Výborná je taky ukázka s for cyklem nebo proměnné typu char

Psát texty pro začátečníky je těžké, proto se o ně ani nepokouším, ale neměl by je psát začátečník. Protože chyby, které se v „mládí“ naučíte a zažijete si je, budete pak opakovat a opakovat, než se z nich poučíte. A to stojí čas a ten jsou peníze…

Poučení z dnešního WTF: „Čím méně kódu napíšete dnes, o to se vám bude lépe spravovat zítra.“ :)

Komentáře RSS

  1.  

    thingie

    17.52 - 8. března 2009 | #

    I ta „správná“ varianta je ale zvěrstvo které se dá nakonec dostopovat v C.

    Neznám boo, jenom trochu python, ale když už, tak nejbližší rozumný způsob jak to napsat vidím následovně.

    for i in range (5): print i

  2.  

    Aleš Roubíček

    18.07 - 8. března 2009 | #

    [1] thingie: To byla ukázka cyklu while. Její vhodnost jsem nerozebíral. :) Taky by šel použít generátor print join(i for i in range(5)), ale o tom to není. V první řadě jde o to, odhalit, co daný kus kódu dělá, a nepřidávat k němu zbytečnou omáčku.

  3.  

    Dundee

    20.12 - 8. března 2009 | #

    Koukám, že Boo je opravdu Python jak přes kopírák. Kdybych používal Windows, Boo bych určitě zkusil…

  4.  

    Aleš Roubíček

    20.50 - 8. března 2009 | #

    [3] Dundee: Ne tak docela, chybí magic methods, je to staticky typovaný, podporuje konstrukce které jsou potřebné pro CLR atd. Ale základní syntaxe je stejná. Každopádně ho můžeš zkusit na jakým systému chceš.

  5.  

    thingie

    05.42 - 9. března 2009 | #

    [2] Aleš Roubíček: Mi to přijde hloupé, čílit se, že v kódu je něco málo navíc, nějaké drobné Céčkové idiomy a tak, ale naprosto ignorovat, že ten kód sám o sobě je jen tupý přepis odpovídajícího kódu z Céčka. O tom by to mělo být v prvé řadě, ne o rozčilování se nad jedním zbytečným importem.

  6.  

    Aleš Roubíček

    06.43 - 9. března 2009 | #

    [5] thingie: Zbytečným importem to jen začíná. Neinicializovanou proměnnou pokračuje. Zdrojový kód je výstupním dokumentem programátora. Pokud je špatný, ztěžuje to jeho pozdější čitelnost a spravovatelnost – ať už samotným autorem nebo někým jiným.

  7.  

    strook

    00.38 - 10. března 2009 | #

    S většinou příspěvku souhlasím, snad jen připomínka, že čitelnost a přehlednost subjektivní záležitost. A také otázka zkušeností – osobně považuji variantu:

    while(i < 5):
       print i
       i++

    za mnohem čitelnější a přehlednější než tuto:

    while i < 5:
      print i++

    i když uznávám že jsou nutné 3 klepnutí navíc do klávesnice :-D Ale podle mě to není jen o tom napsat kód co nejstručněji, pak totiž pro leckoho ztrácí tu čitelnost ;-)

    Jinak to samozřejmě nic nemění na faktu, že podobné „tutorialy“ nepatří na server typu programujte, ale spíše na osobní blog ;-)

Místo pro tvůj názor

Povinné je jméno a komentář, z e-mailu se rozpoznají Gravatary.
Komentář je formátován pomocí Texy! syntaxu.
Například: **tučný text**, *kurzíva*, "text odkazu":adresa.
Internetové adresy jsou převáděny na odkazy.
Na komentáře se můžete odkazovat pomocí [číslo komentáře].

Nový komentář