https://clojure.org/news/2022/03/22/clojure-1-11-0


3일 전에 나온 따끈따근한 버전


눈에 띄는 피처들을 정리해 보았다



1. 키워드 인자를 받는 함수는 map도 받을 수 있게 변경

몇몇 언어들은 f(a=1, b=2, **kwargs)로 선언하고 

f(a=10, b=30, c='a', d='e') 이런 식으로 호출하는 함수를 정의할 수 있다


근로저에도 비슷한게 있다

(defn destr [& {:keys [a b] :as opts}] [a b opts])


그러면 이렇게 호출할 수 있다.

(destr :a 1) => [1 nil {:a 1}] (destr :a 1 :b 2) => [1 2 {:b 2, :a 1}](destr :a 1 :b 2 :c 3 :d 4) => [1 2 {:c 3, :b 2, :d 4, :a 1}]


다만 키워드 인자니까, 반드시 짝수 개의 인자를 받아야 했다.

user=> (destr {:a 1 :b 2}) Execution error (IllegalArgumentException) at user/destr (REPL:1). No value supplied for key: {:a 1, :b 2}user=> (destr :a) Execution error (IllegalArgumentException) at user/destr (REPL:1). No value supplied for key: :a


그런데 이번 버전에서는 단 하나의 인자를 받는 것은 허용했으며

(destr :a) => [nil nil :a] (destr 1) => [nil nil 1] (destr [1 2 3 4 {1 3}]) => [nil nil [1 2 3 4 {1 3}]]


그 하나의 인자가 map일 경우 짝수개로 인자를 넣는 것처럼 맵핑도 해준다.

(destr :a 1 :b 2) => [1 2 {:a 1, :b 2}] (destr {:a 1 :b 2}) => [1 2 {:a 1, :b 2}]


이걸로 얻을 수 있는 장점은 인자를 받는 함수를 programatic하게 갖고 놀기 편해졌다는 점이다.

원래는 map을 seq로 편 다음 함수에 apply를 박고 똥꼬쇼를 해야 했다.


2. 이거 왜 이제 나옴? 함수들 나옴


Additionally, a number of functions have been added to clojure.core: 

abs NaN? infinite?  왜 이제 나옴?

parse-double parse-long parse-boolean 대충 문자열을 파싱하는 함수, 원래 호스트 언어(갓바, 갓바스크립트) interop으로 날먹했음

parse-uuid random-uuid 왜 이제 나옴? 2

update-keys update-vals map 자료구조에 대해서 map(f, seq) 함수처럼 맵핑하는 함수. 왜 이제? 

and iteration


이 친구들은 유저들이 넣어달라고 울부짖으면 보통 지라 티켓 하나 던져줌

거기 보면 뭐 이유가 구구절절 이걸 고려하고 저걸 고려하고,,, 그래서 늦었다는데

방망이 깎는 노인네들이 따로 없다


암튼 잘 됬음



3. 네임스페이스 로드 없이 네임스페이스 alias 사용 가능

Spec (and other libs) rely on qualified keywords as spec names. Namespace aliasing in ns makes long names shorter but required namespaces to exist and be loaded. In Clojure 1.11, require adds a new option :as-alias, which is like :as but does not require the namespace to exist or load.

나는 사실 이게 정말 정말로 너무 마음에 드는 피처인데

이건 근로저맨들 중에서도 혼모노들... spec이나 qualified keyword 많이 써 본 사람들이나 와 닿는 거라

설명할 게 너무 많고 이해하기도 어렵기 때문에 자세한 설명은 생략


아무튼 나는 보자마자 지렸다는 것만 밝혀 둠




그 외에도 호스트 interop에 의존하던 수학 관련 함수들을 clojure.math로 추상화했다는 것도 있고 기타 등등


여러분도 한번 잡숴 보세요 => https://clojure.org/



근로저 조아