ToDo
Done
Weekly goal
람다 사용
run 사용
- run은 매개변수로 받은 람다를 실행 시키는 함수
람다에서 마지막 람다는 괄호 밖으로 뺄 수 있다
- 람다를 인자로 받는 함수일 경우 마지막 람다는 밖으로 뺄 수 있다
람다에서의 it
- 람다의 파라미터가 하나뿐이고 타입을 컴파일러가 추론가능하면 it사용가능
람다가 포획한 변수
- forEach 람다 내붕서 clientError와 serverError를 사용한다
- java와 달리 외부의 final이 아닌 변수도 접근을 하며 값을 변경시키는데 이를 람다가 포획한 변수라 그런다
- 만약 포획한 변수가 있는 람다가 나중에 반환되어 다른 곳에서 사용되어도 여전히 포획한 변수를 읽거나 쓸 수 있다
- 이를 가능하게 하는 이유는 코틀린이 컴파일시 final이 아닌 변수는 Ref클래스로 감싸고 해당 class를 final로 가지기 때문이다. 내부는 final이 아니기에 변경이 가능하고
flat는 collection을 하나로 합친다
- 여러개의 collection을 하나의 collection으로 합친다
flat는 언제 사용되는가
- 리스트의 리스트가 있을 경우 사용가능
- 중복제거는 flatMap을 떠올릴 수 있다
시퀀스 사용하기
- map과 filter등은 매번 컬렉션을 생성함
- 시퀀스를 사용하면 하나의 컬렉션을 사용함
- 원소가 많을 경우 매번 재배열을 하므로서 비용이 커진다
시퀀스의 특징
- 시퀀스는 하나 하나 넘기면서 넘어간다
- 예로 1을 계산하고 find 검사하고 다음 2를 계산하고 find 검사하고 이런식
- 시퀀스가 아닌 것은 map 검사하고 filter 검사하고 한단계 한단계씩 함
- 이로 인해 성능이 변할 수 있음
- 시퀀스는 자바의 스트림과 동일함 -> 안드로이드를 위해 만들어짐 -> 스트림은 병렬 스트림이 있어 더 좋음
시퀀스 만들기
- 컬렉션의 시퀀스만이 아닌 직접 generateSequence를 통해 직접 생성 가능
람다를 매개변수로
- 람다를 매개변수로 사용할 경우 해당 프로그램 내에서는 해당 람다가 하나만 생선되고 재활용된다
- 단 변수를 포획하면 매번 생성된다
with 수신 객체 람다
- with 함수는 객체의 이름을 반복하지 않고 객체에 대해 다양한 연산을 수행할 수 있다. 결과는 실행 결과가 나간다
- with문은 파라미터가 2개인 함수. 두번째는 람다라 괄호 밖으로 뺄 수 있다
apply 함수
- with과 동일하지만 수신객체를 반환한다
- apply는 객체의 인스턴스를 만들면서 즉시 프로퍼티 중 일부를 초기화 해야하는 경우 유용함. builder와 비슷함
- buildString 도 함수, 매개변수는 수신 객체 지정 람다
as? 연산자 사용
- 타입 캐스팅 시 해당 타입이 아닐 경우 엘빈스 연산자를 통해 값 반환