Loading...
Loading...
2018.10.22
test
함수의 내부를 보면, mood
를 출력전에 I am happy
라고 재정의한 격리된 스코프가 있고, 이는 완전히 격리된 run
스코프입니다.show()
를 사용할 수 있습니다.with
와 T.run
를 보면, 두 함수 모두 실제로 꽤 비슷합니다. 아래의 예제도 같습니다.with
는 일반 함수고, T.run
은 확장 함수입니다.webview.settings
가 null이 될 수 있다고 생각해보면, 아래와 같이 보일겁니다.T.run
확장 함수가 사용하기 전에 null 체크를 적용할 수 있어 더 낫습니다.this
vs it
T.run
과 T.let
을 본다면, 두 함수 모두 매개 변수를 받는 것을 제외하고 닮았습니다.
아래의 예제는 두 함수 모두 같은 로직입니다.T.run
함수의 기호를 확인해보면, T.run
은 block: T.()
으로 보이는 확장함수로 만들어진 것을 알 수 있습니다. 그런 까닭에 스코프 내의 모든 곳에서 T
는 this
로 부를 수 있습니다. 프로그래밍에서, this
는 대부분에서 생략될 수 있습니다. 그러므로 위의 예제에서, println
에서 ${this.length}
대신, length
로 사용할 수 있습니다. 저는 이를 this를 매개변수로 보낸다고 부릅니다.T.let
함수의 기호에서, T.let
은 자기자신을 block: (T)
인 함수로 보낸다는걸 알 수 있습니다. 그런 까닭에 이는 람다 매개변수로 보내는 것 같습니다. 스코프 내에서는 it
으로 불릴 수 있습니다. 따라서 저는 it을 매개변수로 보낸다 부릅니다.T.run
이 T.let
보다 함축적으로 더 유용한 것으로 보입니다만, T.let
함수에는 아래와 같이 눈에 띄지않는 장점들이 있습니다.T.let
은 넘겨진 함수/멤버 변수인지, 외부 클래스의 함수/멤버 변수인지 명확하게 구분됩니다.this
가 생략되지 않는 상황에서, 예를들어 함수의 파라미터로 넘겨졌을 때, it
은 this
보다 짧게 쓸 수 있고, 보다 깔끔합니다.T.let
은 변수를 보다 나은 이름으로 바꿀 수 있습니다. 즉, it
을 다른 이름으로 변환할 수 있습니다.this
vs 다른 타입 반환T.let
과 T.also
를 살펴보면, 함수 내부의 스코프를 본다면, 둘다 똑같습니다.T.let
은 다른 타입의 값을 반환하지만, T.also
는 T
자기 자신 즉, this
를 반환합니다.T.let
은 조작을 진화시켜주고, T.also
는 같은 변수 즉, this
를 사용하게 해줍니다.T.also
는 의미 없어 보이며, 쉽게 함수의 한개의 블럭으로 합칠 수 있습니다. 잘 생각해보면, 약간의 장점이 있습니다.T.apply
위에서 말한것과 다르게, 함수를 설명해 봅시다. 아래에 T.apply
의 3가지 속성이 있습니다.this
를 매개변수로 보냅니다.this
(즉, 자기자신)을 반환합니다.comments loading...