1. 함수 본문 안에서 변수 정의 가능
> 함수 본문 내부에서만 지역적으로 사용할 수 있으므로 지역 변수 local variable 라고 한다.
> 정의한 변수는 함수 안에서 자신이 정의된 줄 바로 다음 줄부터 사용할 수 있다.
> 함수 안에서 함수를 정의할 수 있다.
2. 정적 영역 규칙
지역변수나 지역 함수를 정의할 때는 자신보다 더 앞에 정의된 지역 변수의 값을 사용할 수 있다.
* 86페이지 예시 너무 어려웠다.... -> 다시 보기
- 영역 규칙 : 이름의 속성을 어디서 찾을 수 있느냐를 결정하는 규칙
- 프로그램의 영역 규칙 : 읽는 사람들에게 혼동을 일으키지 않고 프로그래머들이 쉽게 변수의 정의를 찾아낼 수 있는 방식이어야 한다.
❓구문적 영역 규칙 lexical scope rule
어떤 이름의 정의를 현재 영역에서 찾을 수 없을 때
부모 영역에서 찾아보고
다시 부모의 부모를 찾아보는 식
- 이름 가림 : 바깥쪽 블록에 정의된 이름을 안쪽 블록에서 재정의하면 바깥쪽 블록에서 정의한 내용을 가린다.
3. 익명 함수와 람다
> 함수와 비슷한 개념으로 익명 함수 anonymous function & 람다 lamda 가 있다.
> 함수 역할을 할 수 있는 값을 정의하는 리터럴
fun add21(x: Int, y: Int) = x + y //함수
val add22 = fun (x: Int, y: Int) = x + y //익명 함수
val add23 = { x: Int, y: Int -> x + y } //람다
✅ 익명 함수는 fun 다음에 함수 이름이 없다는 점을 제외하면 일반 함수와 동일
✅ 람다는 함수 본문 블록 안에 파라미터 -> 본문 식 ( 화살표는 arrow 라고 부름 )
* 람다는 항상 본문이 식인 형태로 정의해야 하므로 본문에서 return 을 쓸 수 없고 맨 마지막에 쓴 식의 값이 전체 값이 된다.
> 변수에 대입할 필요 없이 익명함수나 람다 리터럴을 그대로 쓰고 뒤에 인자를 넘겨도 잘 작동한다는 점을 유의해야 한다.
일급시민 1st class citizen 으로 취급된다.
-> 람다를 변수나 데이터 구조에 저장
-> 함수의 인자로 전달
-> 함수에서 생성해 반환
고차 함수 high order function : 람다를 파라미터로 받거나 람다를 반환하는 함수
4. 익명함수 / 람다 관련 구문
93 쪽 다시보기 .... 너무 어렵다 ....ㅎ
'스터디 > Kotlin' 카테고리의 다른 글
[ 스터디 ] 코틀린 : 함수 (0) | 2023.05.10 |
---|---|
[ 스터디 ] 코틀린 : 원시타입, 참조 타입 배열 (0) | 2023.05.09 |
[ 스터디 ] 코틀린 : 식과 연산자, 배열 (0) | 2023.05.09 |
[ 스터디 ] 코틀린 : for, while, do ... while (0) | 2023.05.09 |
[ 스터디 ] 코틀린 : if, when (0) | 2023.05.08 |