# Day 1 – Syntax
While knowing the history of a new language and especially its structure is important (and sometimes boring), having an overview of how things work in practice and writing some code is always more fun.
# Environment
The first important step in learning a new language is to have your initial environment set up before you get started (opens new window).
# Getting Started
After following the necessary installation steps, run to your terminal and type clj to get started:
Clojure 1.10.1
user=> 
# The classic "Hello, world!"
(println "Hello, world!")
# Math operations
(+ 4 3)
(+ 14 7)
(- 49 21)
(- 2 14)
(* 3 7)
(* 7 21)
(/ 70 7)
(/ 21 3)
(* (+ 3 4) 7)
(+ (- 2 1) 28)
(- (* 21 3) 7)
(/ (+ 4 3) 21)
# Flux control
(if true
  :truthy
  :falsey)
(if (= (+ 1 1) 2)
  "Then true"
  "Opitional else value")
(let [x 7]
  (cond
    (< x 2) "x is less than 2"
    (< x 10) "x is less than 10"))
(let [x 14]
  (cond
    (< x 2)  "x is less than 2"
    (< x 10) "x is less than 10"
    :else  "x is greater than or equal to 14"))
(when true
  (println "Success!")
  "Awesome too!")
(defn foo
  [c]
    (case c
      5 "c is 5"
      10 "c is 10"))
;; user=> (foo 5)
(defn foo
  [c]
    (case c
      5 "c is 5"
      10 "c is 10"
      "c isn't 5 or 10"))
;; user=> (foo 14)
# Iteration for Side Effects
(dotimes [i 7]
         (println i))
(doseq [n (range 3)]
         (println n))
(for [letter [:a :b]
             number (range 3)]
         [letter number])
(loop [i 0]
  (if (< i 10)
    (recur (inc i))
    i))
# Exceptions
(try
  (/ 2 1)
  (catch ArithmeticException e
    "divide by zero")
  (finally
    (println "cleanup")))
(try
  (throw (ex-info "There was a problem" {:detail 42}))
  (catch Exception e
    (prn (:detail (ex-data e)))))
# Day 2 - Structures
# License
This project is licensed under the MIT License.