목록언어 (18)
Simple&Natural
for(i in 1..100) { … } → 100까지 포함 for(i in 1 until 100) { … } → 100은 포함하지 않음 for(x in 2..10 step 2) { … } → 2씩 증가 for(x in 10 downTo 1) { … } → 숫자 감소
let (it/lambda) : 지정된 값이 null이 아닌 경우에 코드를 실행해야하는 경우 with/run (this/lambda) : 여러 줄의 코드 처리, 객체 초기화 후 결과값 계산 apply (this/object) : 수신 객체 람다 내부에서 수신 객체의 함수를 사용하지 않고(프로퍼티만 변경) 수신 객체 자신을 다시 반환하려는 경우에 apply를 사용 (객체 초기화 등) also (it/object) : 수신 객체 람다가 전달된 수신 객체를 전혀 사용하지 않거나 수신 객체의 속성을 변경하지 않고 사용 하는 경우 also를 사용 (객체를 활용한 추가적인 작업, 디버깅, 로깅 등...)
피보나치 수열이나 팩토리얼을 구현하다보면 가장 많이 쓰이는 것이 재귀함수이다. 그러나 재귀함수의 경우 필연적으로 메모리 스택을 많이 잡아먹기 때문에 재귀함수를 잘못 쓰다보면 스택오버플로우와 인사하게 된다. 이문제를 해결하기 위해서는 Tail Recursion이라는 꼬리재귀 함수를 사용하면 된다. 재귀함수 경우 마지막 함수가 모두 실행되기 전까지 이전의 함수들이 계속 메모리 스택을 차지하고 있게 되는데 원래 함수로 다시 돌아올 필요가 없는 경우 꼬리재귀 함수를 쓰면 값만 반환한 후 스택에서 사라진다.
대표적인 for문 이외에도 자주 쓰이는 반복문이 있어서 정리한다. // 예제 배열 let arr = ['a', 'b', 'c', 'd', 'e']; 1. for in => 객체의 property에 루프를 실행한다 (배열에서는 index) // 실행 for(let index in arr) console.log(index); // 결과 0 1 2 3 4 2. for of => 컬렉션의 요소(즉, 배열에서는 값)에 루프를 실행한다. // 실행 for(let value of arr) console.log(value); // 결과 a b c d e 3. forEach => 함수의 Parameter 는 1) (value) 2) (value, Index) 3) (value, index, array) 이 가능, 혹은 ..