≡ Menu

clojure.repl: Baca Dokumentasi di REPL

clojure.repl

Pernah gak sih saat ngoding ngeblank, tau mau ngapain pake suatu method atau function, tapi lupa nama function-nya?? Atau parameternya yang bener itu kayak gimana? Saya mah sering kayak gitu.

So, Programing gak akan pernah lepas dari dokumentasi. Programer yang baik tahu bagaimana caranya membaca dokumentasi, google-fu atau stackoverflow.com kelamaan.

Semua bahasa pemrograman yang baik punya senjata ini, mereka menyediakan dokumentasinya. Bahkan saat ngoding sekalipun bisa langsung lihat dokumentasi.

Di Clojure, dokumentasi bisa dilihat di clojuredocs.org atau Clojure Cheatsheet.

clojure.repl

Meskipun memungkinkan buka browser barengan dengan IDE bersamaan, tetapi itu ribet. Nah untuk itu, Clojure mempunyai namsespace clojure.repl. Dengan clojure.repl, kita bisa melihat dokumentasi langsung di repl-nya.

Hal pertama untuk memakai namespace ini, yaitu dengan memakai fungsi use. Fungsi use akan mengaktifkan (side-effect) namespace yang di pilih.

(use 'clojure.repl) 
;; => nil

Nah untuk melihat fungsi apa saja yang ada di clojure.repl atau namespace lainnya, kita memakai fungsi dir.

apropos
demunge
dir
dir-fn
doc
find-doc
pst
root-cause
set-break-handler!
source
source-fn
stack-element-str
thread-stopper
=> nil

Ok, kita telah aktivasi namespace clojure.repl. Selanjutnya kita bisa memakai fungsi doc. Fungsi doc ini akan menampilkan cara penggunaan fungsi yang di-argumenkan. Contoh kita ingin tahu untuk apa itu fungsi apropos.

(doc apropos)
-------------------------
clojure.repl/apropos
([str-or-pattern])
  Given a regular expression or stringable thing, return a seq of all
public definitions in all currently-loaded namespaces that match the
str-or-pattern.
=> nil

Di repl, fungsi paling sering saya gunakan di clojure.repl adalah apropos, source, dan .

Oh ya! Clojure memiliki lazy function (saya lebih suka menyebutnya evaluation on-demand). Seperti fungsi range, tanpa argumen fungsi itu akan me-return integer 0 sampai integer tak hingga. Untuk mencegah infinite evaluation, saya selalu memakai fungsi *print-length*.

(set! *print-length* 10)
=> 10

Sehingga ketika kita memakai fungsi lazy seperti range kita tidak perlu khawatir lagi tentang infinite evaluation.

(range)
=> (0 1 2 3 4 5 6 7 8 9 ...)

Semoga membantu! Happy coding!

{ 0 comments… add one }

Leave a Comment