📂8장 제어문

  • 조건에 따라 코드 블록을 실행(조건문)하거나 반복 실행(반복문)할 때 사용.
  • 코드의 실행 흐름을 인위적으로 제어할 수 있음.
  • forEach, map, filter, reduce같은 고차 함수를 사용한 함수형 프로그래밍 기법에선 제어문의 사용을 억제하여 복잡성을 해결하기 위해 사용

블록문

  • 0개 이상의 문을 중괄호로 묶은 것
  • 코드 블록 또는 블록이라고도 함
  • 하나의 실행 단위로 취급
  • 블록문 끝에는 세미콜론을 붙이지 않음.
    • why? 세미콜론은 문의 종료를 의미하는 자체 종결성을 갖기 때문
// 블록문
{
  var foo = 10;
} // 블록문 끝엔 세미콜론x

//제어문
{
  var x = 1;
  if(x<10) {
    x++;
  }
}
// 함수 선언문
function sum(a,b) {
  return a+b;
}

조건문

  • 조건식의 평가 결과에 따라 블록문의 실행을 결정.

if...else문

  • 논리적 참 또는 거짓에 따라 실행할 코드 블록을 결정.
  • 조건식은 불리언 값으로 평가될 수 있는 표현식.
    • 불리언 값으로 평가될 수 없으면? 자바스크립트 엔진에 의해 암묵적으로 불리언 값으로 강제 변환되어 실행할 코드 블록을 결정 => 9장 암묵적 타입 변환 참고.
if(조건문) {
  // 조건문이 true일때 이 부분에 적힌 코드 블록이 실행함.
} else {
  // 조건식이 false일때 이 부분에 적힌 코드 블록이 실행함.
}

// 조건이 여러개일때
if(조건문1) {
  // 조건문1이 true이면, 코드 블록 실행
} else if(조건문2) {
  // 조건문2가 true이면, 코드 블록 실행
} else {
  // 모든 조건문들이 false이면 , 코드 블록 실행
}
  • 예제(if...else문)
    /** num이 짝수이면 result 변수에 "짝수", num이 홀수이면 "홀수"를 할당한다. **/
    const num = 2;
    let result;
    // 0은 false이다. 그러므로 2로 나누어 떨어지면 짝수이고 false이다.
    if(num % 2) result = "홀수";
    else result = "짝수" ;
    console.log(result) // 짝수

- 클린코드에선 else를 지양하라고 함. 아래 게시글을 참고하세요

 

[cleanCode] else을 왜 지양할까?

else if 피하기 const NUMBER = 5; if(NUMBER >= 0){ console.log("0보다 크거나 같다.") // "0보다 크거나 같다." } else if( NUMBER > 0){ consoel.log("0보다 크다.") } 콘솔창엔 "0보다 크거나 같다." 이 출력된다. 왜냐하면 el

menduck.tistory.com

삼항 연산자

  • 예제(삼항 연산자)
const num = 2;
let result = num%2 ? "홀수":"짝수";
console.log(result)
  • 경우의 수가 3가지라면? 짝수 홀수 영
    const num = 2;
    let result = num ? (num%2 ? "홀수":"짝수") : "영";
    console.log(result)
    • num ? (num%2 ? "홀수":"짝수") : "영"
      밑줄 그인 부분부터 실행, 만약 num이 0이면 false임으로 result에 "영"을 할당함.
      하지만 위 조건에서 num은 2임으로 true임.
    • num%2 ? "홀수":"짝수"
      num이 2로 나눌때 나머지가 0이면 false임으로 짝수를 할당하고 나머지가 0이 아니면 true임으로 "홀수"를 할당함.

삼항 연산자를 잘 활용하는 방법

2022.12.10 - [분류 전체보기] - [CleanCode] 삼항연산자를 어떻게 다룰까?

 

[CleanCode] 삼항연산자를 어떻게 다룰까?

함수 매개변수로 if문,for문,swich문을 받을 수 있을까? 없다 . 그 이유는? 값이 들어가야지 식이 들어가면 안된다. 그럼 삼항연산자는 들어가도 되낭? 된다. 그 이유는? 조건문이 있으나 값으로 귀

menduck.tistory.com

if...else문과 삼항연산자 어떤 상황에 사용할까?

  • 단순히 값을 결정하여 변수에 할당하는 경우는 삼항 조건 연산자
  • 실행해야 할 내용이 복잡하여 여러 줄의 문이 필요하다면 if...else문

switch문

  • 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 갖는 case 문으로 실행 흐름을 옮김.
  • switch 문의 문자열이나 숫자 값인 경우가 많음
    • cf) if문은 논리적 참,거짓 (불리언 값)
  • case 문은 표현식을 지정하고 콜론(:)으로 마침.
  • default 문은 초기값, case문과 일치하는 표현식이 없으면 defalut 문으로 이동. (선택사항)
switch(표현식) {
  case 표현식1 :
    switch 문과 표현식1이 일치하면 실행함
    break ;
  case 표현식2 :
    switch 문과 표현식2이 일치하면 실행함
    break ;
  default :
    switch 문과 일치하는 case문이 없으면 실행함.
}
  • 폴스루(fall through)
    const number5 = "five";
    let numberName;
    switch(number5) {
    case 1 : numberName = "one";
    case 2 : numberName = "two";
    case 3 : numberName = "three";
    case 4 : numberName = "four";
    case 5 : numberName = "five";
    default: numberName = "nothing";
    }
    console.log(numberName) // nothing
  • - five가 출력되지 않고 nothing이 출력되는 이유는?
      - switch 문과 일차하는 case문으로 실행 흐름이 이동되어 문이 실행되었음.
      - 하지만 일치한 case문에서 탈출하지 못하고 계속 이동하게되어 default문까지 이동하게 됨.
      - 이러한 것을 폴스루하고 함.
  • 해결 코드
const number5 = "five";
let numberName;

switch(number5) {
  case 1 : numberName = "one";
    break;
  case 2 : numberName = "two";
    break;
  case 3 : numberName = "three";
    break;
  case 4 : numberName = "four";
    break;
  case 5 : numberName = "five";
    break;
  default: numberName = "nothing";
}
console.log(numberName) // five

반복문

  • 평가 결과가 참인 경우 코드 블록을 실행for문
  • 조건식이 거짓으로 평가될 때까지 코드 블록을 반복 실행.
    for (변수 선언문 또는 할당문 ; 조건식 ; 증감문) {
    조건식이 참인 경우 반복 실행될 문;
    }
  • 조건문 흐름 파악하기.
    for (let i = 0; i<2 ; i++) {
    console.log(i) // 0 1
    }
  1. let i = 0 변수 선언문은 단 한번 실행됨. 현재 i = 0
  2. i<2 현재 i는 0이니깐 true, 코드 블록 실행 // console.log(0)
  3. i++ 로 인해 i는 +1을 해주어 현재 i = 1
  4. 변수 선언문은 단 한번 실행 됨으로 조건문으로 넘어감.
  5. i<2 현재 i는 1이니깐 true, 코드 블록 실행 // console.log(1)
  6. i++ 로 인해 i는 +1을 해주어 현재 i = 2
  7. i<2 현재 i는 2이니깐 false 반복 종료.
  • 이중 for문을 더 알고 싶으면 아래의 게시글을 참고해주세요

2022.12.10 - [개발언어] - 이중 for문 흐름 이해하기

 

이중 for문 흐름 이해하기

- 코드가 복잡해질수록 이중 for문의 개념이 헷갈려 다시 한번 정리하였습니다. - 종이에 써가며 차근차근 i와 j를 증감해보시면 더 빨리 이해 할 수 있습니다 for(let i = 1;i

menduck.tistory.com

while문

  • 조건식의 평가 결과가 참이면 코드 블록을 계속 반복 실행함.
  • 반복 횟수가 불명확할 때 사용
    • cf) for문은 반복 횟수가 명확할 때 사용
  • 조건식이 불리언 값이 아니면 불리언 값으로 강제 변환함.
while(조건식) {
  // 조건과 일치하면 코드 블록 실행
}
  • 무한 루프와 무한 루프 탈출법
    while(true){
    // 코드 블록 실행=> 멈추지 않고 계속 실행 => 무한 루프
    }
    
    while(true){
    // 코드 블록 실행
    if(조건) break; // if문의 조건문이 일치하면 break문으로 이동하여 탈출함.
    }

do...while문

- 코드 블록을 먼저 실행하고 조건식을 평가.
- 무조건 코드 블록이 1번 이상 실행함.

let count = 0;

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

더 공부해야 할 부분

  • 배열을 순회할때 사용하는 forEach
  • 객체의 프로퍼티를 열거할때 사용하는 for...in
  • ES6 이터러블을 순회할 수 있는 for...of

break문

  • 레이블 문, 반복문(for, for...in, for...of, while, do...while), switch문의 코드 블록을 탈출함.
    • 만약 if문에 break을 쓰면 문법 에러(SyntaxError) 발생.

🔎 용어 정리

레이블 문 : 식별자가 붙은 문

  label :
       statement
  • statement : 구문. break는 모든 레이블 구문에서 사용될 수 있음.
  • strict mode에서 "let"을 레이블 이름으로 사용 할 수 없음.
  • 프로그램 실행 순서을 제어하는 데 사용
  • 중첩된 for문 외부로 탈출할 때 유용하지만 그 밖의 경우 권장하지 않음.
    • 흐름이 복잡해져서 가독성이 나빠지고 오류를 발생할 가능성이 높음.
var i, j;

loop1:
for (i = 0; i < 3; i++) {      //첫번째 for문은 "loop1" 레이블을 붙였다.
   loop2:
   for (j = 0; j < 3; j++) {   //두번째 for문은 "loop2" 레이블을 붙였다.
      if (i === 1 && j === 1) {
         continue loop1; // i = 1, j =1 이면 콘솔하지 않고 바로 증감식으로 넘어감.
      }
      console.log('i = ' + i + ', j = ' + j);
   }
}

// 출력 결과:
//   "i = 0, j = 0"
//   "i = 0, j = 1"
//   "i = 0, j = 2"
//   "i = 1, j = 0"
//   "i = 2, j = 0"
//   "i = 2, j = 1"
//   "i = 2, j = 2"

continue문

  • 반복문의 코드 블록 실행을 현 지점에서 중단, 반복문의 증감식으로 실행 흐름을 이동시킴.
const str = "Hello World";
const search = "l"
let count = 0;

for(let i =0 ; i<str.length;i++) {
  // 'l'이 아니면 continue문 실행(현 지점에서 중단, i는 증감식으로 이동하여 +1)
  if(str[i] !== search) continue;
  count++ // str[i] === search이면 count++ 실행함./ continue가 실행되면 이 문은 실행X
}
console.log(count) //3
  • continue를 쓰면 if문 밖에서 코드를 실행 할 수 있음.
  • if문 내에서 실행해야 할 코드가 길어진다면 continue를 사용하는 편이 가독성이 더 높음.

[모던 자바스크립트 Deep Dive, ⌜이웅모 ⌟, 위키북스, 20210103]를 읽고 정리한 글입니다.

'개발언어 > [JS] deep-dive 정리' 카테고리의 다른 글

[9장] 단축 평가 - 논리 연산자를 사용한 단축 평가  (0) 2022.12.12
[9장] 타입 변환  (0) 2022.12.12
6장 데이터 타입  (0) 2022.12.07
5장 표현식과 문  (0) 2022.12.03
4장 변수  (0) 2022.12.02

댓글