자바스크립트의 널리 쓰이는 패턴을 알아보기

continue 문을 사용하여 조건 중첩 줄이기

while(funds > 1 && funds < 100) {
	let totalBet = rand(1, funds);
	if(totalBet === 13) {
		console.log("Unlucky! Skip this round...");
	} else {
		//플레이..
	}
}

이런 경우를 제어문 중첩(nested control flow)이라 부릅니다. while 루프의 바디에서 할 일은 대부분 else 절에 들어있고, if 절이 하는 일은 console.log를 호출하는 것 뿐입니다. continue 문을 써서 이 구조를 간결하게 만들 수 있습니다.

while(funds > 1 && funds < 100) {
	let totalBet = rand(1, funds);
	if(totalBet === 13) {
		console.log("Unlucky! Skip this round...");
		continue;
	}
	//플레이..
}

break나 return 문을 써서 불필요한 연산 줄이기

let firstPrime = null;
for(let n of bigArrayOfNumbers) {
	if(isPrime(n) && firstPrime === null) firstPrime = n;
}

bigArrayOfNumbers에 들어 있는 숫자가 백만 개쯤 되고, 소수는 리스트의 마지막쯤에 있다면 이 방법을 써도 상관없지만, 첫 번째 숫자가 소수였으면 어떻게 될까? 불필요하게 모든 반복을 다 하게 된다.

let firstPrime = null;
for(let n of bigArrayOfNumbers) {
	if(isPrime(n)) {
		firstPrime = n;
		break;
	}
}

break 대신 return 문을 써도 됩니다.

루프를 완료한 뒤 인덱스 값 사용하기

break 문을 써서 루프를 일찍 종료했을 때 인덱스 변수의 값이 필요할 때가 있습니다. for 루프가 끝나도 인덱스 변수의 값은 그대로 유지된다는 점을 활용할 수 있습니다. 이 패턴은 break문을 써서 루프를 끝내도록 해야만 사용할 수 있습니다.

let i = 0;
for(; i < bigArrayOfNumbers.length; i++){
	if(isPrime(bigArrayOfNumbers[i])) break;
}
if(i === bigArrayOfNumbers.length) console.log('No prime numbers!');
else console.log('First prime number found at postion ${i}');

배열을 수정할 때 감소하는 인덱스 사용하기