Zobrazují se příspěvky se štítkemsyntax highlighting. Zobrazit všechny příspěvky
Zobrazují se příspěvky se štítkemsyntax highlighting. Zobrazit všechny příspěvky

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?

21. ledna 2011

Konečně kód!

Uf! Tak jsem se pěkně dlouho mordoval se syntax highlighting. Člověk by řekl, že když je Blogger od Googlu, že už by to mohl tak nějak defaultně umět. Nebo na to mít nějaký plugin. No, možná je to věc použité šablony - každopádně, skončil jsem její úpravou, kdy jsem do ní doplnil reference na SyntaxHighlighter, plus externí skript pro Clojure. Zkoušel jsem i google-code-prettify, ale nepodařilo se mi dosáhnout toho, aby to "prettyfájovalo".

Takže nějaký kód. Zatím jen trivialitky na okoštování a vyzkoušení highlightingu. Ale už se těším, až se ponořím do studia transakčních referencí, agentů a atomů :-)
(+ 1 2 3)
; 6
(defn hello [name] (println "Hello," name))
; #'user/hello
(hello "Guido")
; Hello, Guido
; nil
(map + [1 2 3] [4 5 6])
; (5 7 9)

Jen vysvětlení pro Javisty ;-) výše uvedený výstup je z prostředí REPL a pro pochopení lispovské syntaxe:

Java:
void processSomething(Type valueOne, Type valueTwo) {
        // some code
}

processSomething(valueOne, valueTwo);

Lisp/Clojure:
(defn process-something [valueOne valueTwo] ())

(process-something valueOne valueTwo)