2016년 10월 4일 화요일

[누구나 쉽게 배우는 클로저] 스터디 1


클로저는 리스프와 같은 구조로 괄호를 사용한다. 소괄호의 향연이다.

(+ 1 2 3)
;= 6
(str "I am" " Younghwan" " " "Nam")
;="I am Younghwan Nam"

이제 단순한 코드를 작성해 보자.

if문
(if true
  "always here"
  "never get here")
;=>"always here"
(if false
  "여긴 올리가 없지"
  "이 문장은 항상 false라 여기를 오지")
;=>"이 문장은 항상 false라 여기를 오지"

보면 알겠지만 if문은 참이면 처음 거짓이면 뒤의 내용을 반환한다. 아주 단순하다. 그런데 만약 if문에서 참일 때 두 가지의 일을 시키려면??

do
(if (= 1 1)
  (do (println "하나")
        "안녕?")
  (do (println "둘")
        "안녕."))
;=>하나
;=>"안녕?"

위에 있는 하나와 "안녕?"의 차이는 무엇일까? 하나는 콘솔에 값을 string값을 출력한 것이며 "안녕?"은 string값을 반.환. 한것이다.

when : when은 else문이 없고 조건이 참일 때 무언가를 하는 것이다. (여러개도 상관 없음)
(when true
  (println "이것도 하고")
  (println "저것도 하고")
  "이걸 반환해")
;=이것도 하고
;=저것도 하고
;="이걸 반환해"

if문 when문을 사용할 때, clojure가 참 거짓을 표현하는데 알아둬야 할 점이 있다.
(nil? 1)
;=false
(nil? nil)
;=true

nil과 false는 모두 거짓을 뜻하며 그 외는 모두 참이다.
(if "거짓!!"
  "true가 아니라도 값이 있으면 참이란다."
  "그럴리 없어!!"
)
;="true가 아니라도 값이 있으면 참이란다."
(if nil
  "nil은 참이 될 수 없습니다."
  "nil은 항상 거짓이 됩니다.")
;="nil은 항상 거짓이 됩니다."

등위 연산자 =
(= 1 1)
;=true
(= nil nil)
;=true
(= 1 2)
;=false

연산자 or , and
or 연산자는 참이 되는 값이 나오는 즉시 계속을 계산을 하
지 않고 그 값을 반환한다. 아니면 마지막 값을 반환한다. (and는 그 반대)
(or false nil :첫번째참이되는놈 :왜나도참인데반환하지않는것이냐)
;=:첫번째참이되는놈
(or false nil nil false nil)
;=nil

댓글 없음:

댓글 쓰기