제어문

Noob·2022년 8월 23일

제어문(control flow statement)는 조건에따라 코드를 실행하거나 반복 실행할 때 사용한다.

블록문

블록문(block statement)는 0개나 그 이상의 문을 중괄호로 묶은것이다. 자바스크립트는 블록문을 하나의 실행 단위로 취급한다.

{
	let a = 1	// 블록문
}

조건문

조건문(conditional statement)는 조건식의 평가 결과에 따라 블록문의 실행을 결정한다.
자바스크립트는 if...else와 switch문을 제공한다.

if...else 문

조건식의 평가 결과에 따라 실행한 블록문을 정하는것이다.

if(조건문 불린값으로 결정이 나야한다){
	// 조건문이 true일때 실행될 블록문
}else if(위에 조건문이 false일때 실행될 조건문){
	// 조건문이 true일때 실행될 블록문
}
else{
	// 조건문이 false일때 실행될 블록문
}

삼항 조건 연산자로 바꿔 쓸 수도 있다.

if(1 < 2){
	a = 2
}else{
	a = 1
}
// 위의 if문을 삼항으로 바꾸면
1 < 2 ? a = 2 : a = 1
// 이렇게 된다 추가로 조건문을 더 달고 싶다면
1 < 2 ? a = 2 : 1 < 2 ? a = 1 : a = 2
// 이렇게 추가로 조건문을 더 달 수 있습니다

추가로 if문은 변수에 할당이 안되지만 삼항 연산자는 값처럼 사용 가능하기에 변수에 할당할 수 있습니다.

switch 문

표현식을 평가하여 값이 일치하는 case문으로 실행 흐름을 바꾼다.

switch (표현식) {
    case 표현식 :
    	switch 표현식이 일치하면 실행될 문
    	break //요놈 빼먹으면 표현식 일치해도 default 까지 빠짐 폴스루 라 한다.
    default :
    표현식이 일치하는게 없을 시 실행될 문
}
예시
let a = 2
let b

switch (a) {
	case 0 : b = "0"	
        break;
    case 1 : b = "1"	
        break;
    case 2 : b = "2" 	
        break;
    default : b = "끝"
}

폴스루를 활용해 윤년 판별 예제를 만들어 본다.

let year = 2000	//	2000년 2월 29일 윤년이다
let month = 2
let day

switch (month) {	//case 뒤의 번호는 월을 뜻한다
	case 1: case 3: case 5: case 2:
    day = ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0) ? 29 : 28)
    break;
    default:
    day = 'hello err'
}
console.log(day)

반복문

반복문(loop statement)는 조건식의 평가가 참인 경우 코드 블록을 실행시킨다.
조건식이 거짓이 될때까지 반복한다. for문, while문, do...while문이 있다.

반복문을 대체하는 기능???
forEach메서드 : 배열을 순회할때 사용
for...in문 : 객체의 프로퍼티를 열거할때 사용
for...of문 : 이터러블을 순회할때 사용

for 문

조건식이 거짓으로 평가될 때까지 코드 블록을 실행한다.

//for(변수 선언 할당문 , 조건식 , 증감식)
for(let i = 0; i < 2; i++){	//	for문 보면 변수 i를 자주 쓰는데 interation의 i다.
	console.log(i)		// 0 1 증감식은 코드 블록 실행 후 평가된다.
}

for문의 실행 흐름

while문

조건식이 참이면 코드 블록을 반복 실행한다. 위의 for문과 차이점은 반복 횟수가 정해져 있지 않다는 점이다.

let count = 0
while(count < 2) {
	console.log(count)
    count++			// 0 1 count변수가 2가되면 거짓이기에 반복문을 벗어난다. break도 가능
}

do...while문

코드 블록을 먼저 실행하고 조건식을 평가한다. 조건식의 참과 거짓 상관없이 한번은 실행된다.

let count = 0
do {
	console.log(count)
    count++		// 0 1
}while(count < 2)

break문

위에서 한번씩 다뤘는데 break문은 레이블문과 반복문에서 탈출한다.
이중 for문중 내부 for문에 break문을 실행하면 외부 for문으로 진입한다. 아예 외부 for문에서 탈출하고 싶으면 레이블 문을 사용하면 된다.

foo: for(let i = 0; i < 2; i++){
	for(let j = 0; j < 2; j++){
    	console.log('infor')
        break foo
    }
    console.log('outfor')	// 'infor'	내부에서 break를 만났지만 외부 for문도 탈출했다.
}

레이블문??
레이블문(label statement)는 프로그램 실행 순서를 제어하는데 사용한다.

foo:{
	console.log(0)
    break foo
    console.log(1)	// 0 break문을 만나 레이블문을 탈출했다.
}

countinue문

반복문의 코드 블록 실행을 중단하고 증감식으로 이동한다.

for(let i = 0; i < 3; i++){
	if(i === 1) continue;
    console.log(i)	// 0 2	countinue를 활용해서 1을 표기하지 않았다.
}
profile
나의 기록

0개의 댓글