31. března 2012

Změna syntax highlightingu a konvence kódu


Změna syntax highlightingu
Když jsem začínal psát tenhle blog, řešil jsem, jak prezentovat ukázky kódu, tedy syntax highlighting. Tehdy jsem zvolil řešení, které jsem dost často vídal na jiných blozích - SyntaxHighlighter. Řešení je to sice pěkné, ale bohužel pro Clojure neobsahuje oficiální brush a ten který byl k dispozici neoficiálně, nepokrýval plně syntaxi Clojure.

Shodou okolností, tento rok mám takové malé jubileum - už deset let jsem uživatelem Linuxu a protože hned na počátku jsem řešil klasické linuxové dilema, jestli programovat v Vi(m)u nebo v Emacsu a tehdy jsem zvolil Vim (a dodones nelituju); můžu zároveň říct, že jsem i desetiletý uživatel Vimu.

No, zpátky k syntaxi.Vim obsahuje funkci na převod kódu do HTML:
  • v textové verzi se zadá příkaz :TOhtml,
  • v GUI verzi je to v menu Syntax -> Convert to HTML.
Pro úplnost bych ještě doplnil, že Vim neumí syntaxi Clojure sám od sebe, ale je potřeba "doinstalovat" plugin VimClojure.
Změna code convention
Když už jsem řešil změnu syntax highlightingu (protože jsem to musel ručně poměnit u všech publikovaných postů), rozhodl jsem se změnit i code convention - to, jak budu zapisovat ukázky kódu. Sympatická mi přijde konvence použitá v knize The Joy of Clojure, která spočívá v tom, že se:
  • píše čistý Clojure kód,
  • nepíše se výzva REPLu, nebo příkazového řádku a
  • výpisy na standard output se vypisují za příkaz jako komentáře.
Výhodou téhle konvence je, že kód lze rovnou bez úprav zkopírovat a spustit ho v REPLu nebo vložit do skriptu a zároveň je vidět, co kód dělá (jeho výstup).

Takže místo:
user=> (def my-ref (ref "immutable data"))
#'user/my-ref
user=> my-ref
#<Ref@467d8ddd: "immutable data">
user=> @my-ref
"immutable data"
user=> (deref my-ref)
"immutable data"

vypadá kód takto:
(def my-ref (ref "immutable data"))
; #'user/my-ref
my-ref
; #<ref@18352d8: "immutable data">
@my-ref
; "immutable data"
(deref my-ref)
; "immutable data"
To je celkem přehledný, ne?

Žádné komentáře:

Okomentovat