Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Clojure course assignments
Clojure
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
challenges
tasks
README.markdown

README.markdown

Домашни от курса по 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, може да го направите дори без да дърпате кода локално при вас.

Something went wrong with that request. Please try again.