클로저는 리스프와 같은 구조로 괄호를 사용한다. 소괄호의 향연이다.
(+ 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
댓글 없음:
댓글 쓰기