30 Mar 2019

ECMAScript6) 제어구문

제어 구문

목차

조건문
반복문
점프문

  • 순차적 실행흐름을 변화시키는 문장을 제어 구문이라고 함.
분류 제어구문 설명
조건문 if/else, switch, try/catch/finally 조건에 따라 분기 처리
반복문 while, do/while, for, for/in, for/of 조건을 만족하면 반복 실행
점프문 break, continue, return, throw 프로그램의 다른 위치로 이동

조건문

1. if/else

  • 문법

      if (조건식) {문장}
      if (조건식) {문장1} else {문장 2}
    
  • 예시

      if(!name) {
          name = "";
          console.prompt("이름을 입력하세요");
      } else {
          console.log(`${name}`);
      }
    
  • 예시 2

      if(a > b) {
          if(a > c) {
              console.log("a가 가장크다");
          } else {
              console.log("a는 b이하");
          }
      }
    

2. switch

  • switch문의 경우 case 라벨은 분기의 시작을 명시할 뿐, 분기의 끝을 명시하지는 않으므로 case 라벨 이후 break문 필수
  • default 라벨은 어떠한 case라벨과도 일치하지 않은 경우에 실행되는 문장
  • C나 Java 의 경우 case 라벨의 값은 항상 상수여야 하는데, Javascript 는 표현식!
  • 예시

      function sayIt(n) {
          switch(n) {
              case 1:
                  console.log("1");
                  break;
              case 2:
                  console.log("2");
                  break;
              case "상수" + "아님":
                  console.log("case에 표현식도 가능");
                  break;
              default:
                  console.log("기본");
          }
      }
      sayIt(1);  // -> "1"
      sayIt(2);  // -> "2"
      sayIt("상수아님");  // -> "2"
      sayIt("디폴트는");  // -> "기본"
    

반복문

1. while

  • 문법

      while (조건식) {문장}
    
  • continue, break 사용 가능
  • 조건식을 평가한 결과가 true라면 반복, false라면 while문을 빠져나옴
  • 선형 검색 예제 (O(n)의 시간복잡도)

      function linearSearch(x, a) {
          var i = 0;
          var n - a.length;
          while(i < n && x > a[i]) i++;
          if(x ==a[i]) return i;
          return null
      }
      var a = [2, 4, 7, 12, 15, 21, 34, 35, 46, 57, 70, 82, 86, 92, 99];
      console.log(linearSearch(35, a));
    
  • 이진 검색 예제 ( log2(n) )

      function binarySearch(x, a) {
          var n = a.length;
          var left = 0, right = n-1;
          while(left < right) {
              var middle = Math.floor((left + right) / 2);
              if(x <= a[middle]) {
                  right = middle;
              } else {
                  left = middle;
              }
          }
          if(x == a[right]) return right;
          return null
      }
      var a = [2, 4, 7, 12, 15, 21, 34, 35, 46, 57, 70, 82, 86, 92, 99];
      console.log(binarySearch(35, a));  // -> 7
    

2. do/while

  • 표현식의 판단을 마지막 부분에서 판단

      do 문장 while(조건식);
    
  • 팩토리얼 예제

      function fact(n) {
          var k = 1, i = n;
          do {
              k *= i--;
          } while (i>0);
          return k;
      }
    

3. for

  • break, continue 사용가능
  • 문법

      for (초기화 ; 조건식; 반복식) { 문장 }
    
  • 초기화 식은 최초 단 한번 실행
  • 이후 조건식을 평가 -> true 라면 반복식 실행, false라면 다음 코드로
  • 초기화식, 조건식, 반복식은 모두 생략이 가능하다. (조건식을 생략하는 경우 끝없이 반복한다는 뜻)
  • 예시

      for(var i=0, sum=0, j=10;i<10;i++,j--){
          sum += i;
          console.log(i, sum, j);  //j는 감소, i는 증가
      }
    
  • 중첩 반복문 예시 - 원의 n분점을 연결하는 직선 그리기

      <head>
          <meta charset="UTF-8">
          <title>example</title>
          <script>
              function diamond(c, n, x, y, r, color) {
                  c.strokeStyle = color;
                  c.beginPath();
                  for(var i=0; i<n; i++) {
                      var t = i * 2 * Math.PI /n;
                      for(var j=i+1; j<n; j++) {
                          var s = j * 2 * Math.PI / n;
                          c.moveTo(x + r * Math.cos(t), y + r * Math.sin(t));
                          c.lineTo(x + r *Math.cos(s), y + r * Math.sin(s));
                      }
                  }
                  c.stroke();
              }
              window.onload = function() {
                  var canvas = document.getElementById("mycanvas");
                  var ctx = canvas.getContext("2d");
                  diamond(ctx, 18, 170, 170, 150, 'darkblue');
              }
          </script>
      </head>
      <body>
          <canvas id="mycanvas" width=350 height=400></canvas>
      </body>
    
  • 결과 circle

4. for/in

  • 객체안의 프로퍼티를 순환하는 반복문

      for (변수 in 객체 표현식) {문장}
    
  • 첫째로, 객체 표현식을 평가
  • 객체 표현식이 null 또는 undefined 일 경우 for/in문을 빠져나옴
  • 이외의 경우에는, 객체의 프로퍼티 이름이 차례대로 변수에 할당되고, 각각의 프로퍼티에 대해 문장이 한번 씩 실행됨.

      var obj = {a:1, b:2, c:3};
      for(var p in obj) {
          console.log(`property ${p} 의 값은 ${obj[p]}`);
      }  // obj.p 로는 해당 프로퍼티에 접근이 불가능하다.
      // -> property a 의 값은 1
      // -> property b 의 값은 2
      // -> property x 의 값은 3
    
  • 주의할 점은 . 연산자를 통해 프로퍼티에 접근할 수 없다는 것!
  • []연산자를 통해 프로퍼티에 접근해야 한다.

점프문

  • 프로그램의 다른 위치로 이동하는 제어 구문
  • 자바스크립트에서는 모든 문장에 라벨을 붙일 수 있다.
  • 라벨문 예시

      loop1: while(true) {
          if("종료") break loop1;
      }
    
  • 라벨문은 이중for문에서 한번에 모든 for문을 빠져나오는 상황에서 쓰일 수 있다.

      loop: for(var i=0; i<10; i++) {
          for(var j=1;j<10;j++){
              console.log("something");
              if(i == j) break loop; // 전체 반복문에서 빠져나옴
          }
      }
    
  • continue의 경우에도 똑같이 사용할 수 있다.

Tags: