/clojure-homework

Clojure course assignments

Primary LanguageClojure

Домашни от курса по Clojure

Това хранилище съдържа домашните от курса по Clojure. Те са разпределени в директориите tasks/ (за задачи) и challenges/ (за предизвикателства). Всяко е в собствена директория (например 01), и във всяка има следните файлове:

  • README.markdown - условие
  • sample_test.clj - примерен тест
  • test.clj - теста, с който проверяваме
  • solution.clj - нашето решение

Очевидно, test.clj и solution.clj няма да бъдат публикувани преди крайния срок.

Пускане на примерни тестове

Ако искате да пуснете примерния тест, просто добавете файл solution.clj в директорията на домашното, влезте в нея и изпълнете:

$ clj sample_test.clj

...където clj е изпълнимото име на Clojure на вашата машина. Обърнете внимание, че в текущата директория трябва да има sample_test.clj и solution.clj.

Интерактивна разработка

Да изпълняваме clj sample_test.clj след всяка промяна по solution.clj е дървен начин да работим с Clojure. Едно от най-яките неща в езика е начина, по-който програмираме. Това е един интерактивен процес, в който пишем нещо изпълняваме го веднага и виждаме резултатите в реално време, без да е нужно да рестартираме приложението или въобще да напускаме текстовия редактор. Предимствата от този начин за разработка са много.

За детайли как работи това, разгледайте nREPL.

Какво ни е нужно?

  • leiningen
  • редактор с nREPL интеграция

LightTable

LightTable е редактора, който ви препоръчваме, ако нямате вече утвърден фаворит. За разлика от другите варианти, LightTable е създаден специално за Clojure и интеграцията с езика е вградена.

LigthTable е създаден с амбициозната цел да пребори част от глобалните проблеми, в програмирането и за това тук имаме иновативни инструмени, които няма никъде другаде.

Повече информация можете да намерите на:

Workflow-а, който ви предлагаме

Подгответе средата си

  1. Отворете файла с решението
  2. Направете текущия редактор instarepl Instarepl: Make current editor an instarepl
  3. Отворте конзолата в нов таб Console: Open console in a tab
  4. Създайте нов tabset Tabset: Add a tabset
  5. Преместете с мишката таба с конзолатa в новия tabset

Направтете следната структура на файла с решението

;; -----------------------------------------------------------------------------
;; Solution

(defn from-digits [digits]
  ;; TODO:
  )

;; -----------------------------------------------------------------------------
;; Playground
;;
;; Instarepl показва резултатите само на кода, който се изпълнява, за товa
;; трябва да извикаме функцията си. Удобно е в началото да ползваме този вариант
;; вместо да изпълняваме директно тестовете. В един по-късен момент ще изтрием
;; playground секцията и ще пуснем тестовете.

(form-digits [1 2 3 4])

;; -----------------------------------------------------------------------------
;; Tests
;;
;; Тук копирайте примерните тестове. След като изтриете playground секцията,
;; махнете `#_` и тестовете ще започнат да се изпълняват.

#_(do
  (use 'clojure.test)

  (deftest challenge-01-sample-test
    (is (= (from-digits [4 2]) 42)))

  (run-tests)
)

Разработка

  • Виждаме незабавно резултата от всяка промяна по-кода
  • Често се налага да чистим конзолата Console: Clear console
  • Често е удобно да спираме / пускаме live mode-а Instarepl: Toggle live mode

Клавишни комбинации

Основна част от това да сме продуктивни в текстовия си редактор е да имаме удобни клавишни комбинации за всички често използвани команди. Можете да реазгледате една примерна конфигурация тук.

Добра идея е да си сложите Paredit добавката и да я ползвате постоянно.

Emacs

Emacs е най-предпочитаният редактор от Clojure хакерите в момента. За да започнете с Clojure и Emacs, следвайте инструкците тук.

Vim

Vim също е добър избор за Clojure. За да започнете с Clojure и Vim, следвайте инструкците тук.

Изпращане на промени

Има грешка в условието и искате да изпратите корекция? Просто отворете pull request! Ако сте логнати в GitHub, може да го направите дори без да дърпате кода локално при вас.