Skip to content

Latest commit

 

History

History
116 lines (98 loc) · 1.79 KB

10.7 제어 플래그를 탈출문으로 바꾸기.md

File metadata and controls

116 lines (98 loc) · 1.79 KB

10.7 제어 플래그를 탈출문으로 바꾸기


배경

for (const p of people){
	if(!found){
		if (p === '조커'){
			sendAlert();
			found = true;
		}
	}
}
for (const p of people){
	if (p === '조커'){
		sendAlert();
		break;
	}
}

절차

  1. 제어 플래그를 사용하는 코드를 함수로 추출할지 고려한다
  2. 제어 플래그를 갱신하는 코드 각각을 적절한 제어문으로 바꾼다.
  3. 모두 수정했다면 제어 플래그를 제거한다.

예시

let found = false;
for (const p of people){
	if(!found){
		if (p === '조커'){
			sendAlert();
			found = true;
		}
		if (p === '사루만'){
			sendAlert();
			found = true;
		}
	}
}
  1. 제어 플래그를 사용하는 코드를 함수로 추출한다.
function checkForMiscreants(people){
	let found = false;
	for (const p of people){
		if(!found){
			if (p === '조커'){
				sendAlert();
				found = true;
			}
			if (p === '사루만'){
				sendAlert();
				found = true;
			}
		}
	}
}
  1. 제어 플래그가 참 일때는 반복문에서 더 이상 수행해야할 동작이 없기 때문에 break나 return을 사용해서 반복문을 벗어난다.
function checkForMiscreants(people){
	let found = false;
	for (const p of people){
		if(!found){
			if (p === '조커'){
				sendAlert();
				return;
			}
			if (p === '사루만'){
				sendAlert();
				return;
			}
		}
	}
}
  1. 제어 플래그 코드도 제거한다.
function checkForMiscreants(people){
	for (const p of people){
		if (p === '조커'){
			sendAlert();
			return;
		}
		if (p === '사루만'){
			sendAlert();
			return;
		}
	}
}

더 가다듬기

function checkForMiscreants(people){
	if (people.some(p=>["조커", "사루만"].includes(p))) sendAlert();
}