Operators,Loops


OperatorとLoopsに移動する前に、vairableを説明してから入ってみましょう。


  • Variable read/write
    メモリで読み取りと書き込みができます.たとえばlet name=karenといえば、Variableがメモリで読み書きできるため、karenをbillyに変換できます.

  • Constant Readのみサポート
  • 逆にconstは読み取り専用です.したがって、constと割り当て値を宣言すると、読み取り専用のロックが表示され、別の値に書き込むことはできません.したがって、変数の値が変更を続ける理由がない場合は、constキーワードを使用してconstanceを記述することが望ましい.
    まだあります.
    メモリに値を格納する方法は2つあります.primitive typeおよびObject typeobject타입は大きすぎて、メモリが一度も上がらない.だからconst karenと宣言して、“object”を割り当てた後に、karenの指す地方は引用があります.referenceは実際にobjectを指します.したがって,referenceによりobjectを含むメモリを実際に指す.したがって、const karenと宣言すると、karenが指すポインタがロックされるため、karenは他のオブジェクトに変更できませんが、karenの名前と年齢は変更できます.これも原因の1つです.1つのプロジェクトを한 단위로, 한박스に集中的に管理できます.
    Data Typeには2種類あります.Immutable data types : primitive types, frozen objects(i.e object.freeze())
    データ自体は絶対に変更できません.たとえば、「karen」という文字列自体を変更できますが、文字列内のkまたはaの同じ文字列のデータは変更できません.Mutable data types : all objects by default are mutable in JS
    objectは、変更可能/続行可能なJavaScriptですべてのオブジェクトを変更できます.たとえばJavaScriptでは、ArrayはMutable date typeであり、他の言語では、ArrayはMutable arrayとImmutable arrayに分けられ、データ型は独立して存在する場合がある.

    < Operator >


    1. String concatenation

    console.log('my' + 'cat'); // my cat
    // + 기호를 이용해 문자열 과 문자열을 합할 수 있음
    console.log('1' + 2); // 12
    // 숫자가 문자열로 변환되어 합쳐질 수 있다.
    console.log(`string literals: 1 + 2 = ${1 + 2}`);
    // ``백틱을 이용해서 string literals를 만들 수 도 있다. 
    // ${} 처럼 달러기호를 사용하면 변수값을 계산해서 string에 포함해서 만들 수 있다. 
    // string literals 는 중간에 줄바꿈을 하거나 중간에 특수기호를 적어도 
    // 그대로 문자열로 변환되서 나온다.      
    console.log('karen's book'); 
    // 싱글quate로 문자열을 만들게 되면 중간에 single quote나 기호가 인식이 되지 않는다. 
    // 그경우 \를 이용해서 기호앞에 붙여주어야 변환된다. 줄바꿈을 할 때에는 \n을 붙여준다.
    // 특수문자열은 찾아서 적용하자!

    2. Numberic opertaors

    console.log(1 + 1); // add
    +(add)、-(substract)、/(divide)、*(multiply)、%(残り)、**(指数)など

    3. Increment and Decrement operators

    let counter = 2; 
    const preIncrement = ++counter; 
    counterという変数がある場合は、preIncrementと呼ばれる変数の前に++記号を付けます.
    let counter = 2; 
    const preIncrement = ++counter;
    counter = counter + 1; 
    // ++counter; 와 counter = counter + 1; 은 동일하다. 
    // counter에 1을 더해서 다시 counter에 값을 다시 할당한 다음에  
    // 즉, counter의 값이 2에 1 이 증가되어서 3이 된 다음에 
    preIncrement = counter; 
    // preIncrement라는 변수에 counter의 값을 할당하는 것
    逆にpostIncrement
    let counter = 2; 
    const postIncrement = counter++;
    //counter変数の後に++記号を付ける場合は、まずcounter変数値を
    //postIncrementに割り当てた後(1)
    //つまりcounterは2から1が増えた3になります.
    PostIncrementに//3を割り当て、3を割り当てます(1)
    postIncrement = counter;
    counter = counter + 1;
    //そしてcounterの値を1(2)増やします
    //つまり、3を割り当てるとcounterの値が1増加するので、4を割り当てる!
    >
    
    --기호도 똑같다 post 랑 preDecrement도 값을 하나씩 감소하는 것이다. 앞에 붙으면 바로 업데이트되서 할당이 되고, 뒤에 기호가 붙으면 할당을 해놓고 업데이트는 그 뒤에 되는 것.
       
       
       ***
        
    #### 4. Assignment operators
      
        
     `할당하는 operator`
      
    >
    ```js
        let x = 3;
        let y = 4;
        x += y; // x = x + y; 반복되는 x를 생략해서 코드작성이 가능

    5.Comparison演算子(比較演算子)

      conole.log(10 < 6); // less than
      conole.log(10 <= 6); // les than or equal
      conole.log(10 > 6); // greater than
      conole.log(10 >= 6); // greater than or equal

    ***6. Logical operator : ||(or), &&(and,) !(not)

     const value1 = false;
     const value2 = 4 < 2;
    1. ||(or) : finds the first truty value
    console.log(`pr: ${value1 || value2 || check()}`);
    function check(){
      for(let i = 0; i < 10; i++){
        //wasting time
        console.log(':(');
      }
      return true;
    } 
    value1 || value2 || check()
    上のvalueとexpressionのいずれかがtrueの場合、trueの演算子として演算されます.
    value 1はfalseとして宣言され、value 2は4が2未満と宣言されるため、false、check関数は最終的にtrueを返し、check()は戻ります.
    **重要点はor演算子がtrueが最初に発生したときに停止することです.たとえば、value 1にtrueが現れたら、「value 1の後ろに何が現れても構わない.最初にtrueが現れたからだ!」こうなると運転が止まる.演算量の大きい関数を呼び出したり、式のような子供を一番前に置いたりするのは、Junior開発者がよく非難される部分です.だから前から簡単なvalueを置いて、後ろに関数などを置いたほうがいいです!
    2. && (and), finds the first falsy value
        console.log(`pr: ${value1 || value2 || check()}`); 
          function check(){
        for(let i = 0; i < 10; i++){
          //wasting time
          console.log(':(');
        }
        return true;
      } 
    和演算子もor演算子と同じです.ただし、and演算子は、value 1、value 2、check()がtrueの場合にのみtrueを返します.and演算子も最初のvalue 1にfalseが現れると終わります「後ろを気にしない」のように、関数や式は後ろに置くべきです.
    3. && operator often used to compress long if-statement
    nullableObject && nullableObject.something
    andは、nullがnullである場合、その後ろのnullabeObjectがfalseであるため、簡単なnullabeObjectです.あることはできない.nullabeObjectがnullでない場合のみ、Objectです.何かの価値を得ることができます.
    コードで表すと、
    if(nullableObject != null){
      nullableObject.something;
    }

    6. ! (not) not operator

    console.log(!value1);
    // not 연산자는 값을 반대로 바꾸어 준다. value1이 true이기 때문에 false로 바꿔서 변경

    < Equality>

    const stringFive = '5';
    const numberFive = 5;
       `'== loose equality'` with type conversion 
       // type를 변경해서 검사하기 때문에 loose equality.
       const stringFive = '5';
       const numberFive = 5;
       console.log(stringFive == numberFive); // true
       console.log(stringFive != numberFive); // false   
    stringfiveはstringですがstringの中の数字は5と同じですこんなもの.
     === strict equality, no type conversion
     // type을 신경써서 type이 다르면 다르다.
     const stringFive = '5';
     const numberFive = 5;
     console.log(stringFive === numberFive); // false  타입이 달라서 false
     console.log(stringFive !== numberFive); // true  
    常に厳格な平等を使用したほうがいい.

    //object equality by reference


    objectの勉強に注意してください.objectはメモリに格納するグループリファレンス形式で格納されます.
    billy1 ->(X) ref1
    - name - ellie
    - age - 23
    billy3 ->(X) ref1
    billy2 ->(X) ref2
    - name - ellie
    - age - 22
    const billy1 = {name: 'billy'}; 
    // billy1과 billy2는 똑같은 데이터가 들어있지만, 실제로 메모리에는 각각 다른 reference가 들어있고, 그 reference들은 서로 다른 object를 가리키고 있다. billy3은 billy1이 똑같은 reference를 가지고 있으니까 billy1가 같은 reference를 가지고 있다.
    const billy2 = {name: 'billy'};
    const billy3 = billy1;
    console.log(billy1 == billy2); // false 각각 다른 reference가 저장되어있어서 false
    console.log(billy1 === billy2); // false 똑같든 아니들 둘다 reference가 달라서 false
    console.log(billy1 === billy3); // true ellie1이 가지고 있는 reference를 3으로 할당했기 때문에 true이다

    //equality-困惑テキスト

    console.log(0 == false); // true 0,null,undefined,''는 false값 이므로 true
    console.log(0 === false); // false  0은 Boolean타입이 아니므로 type이 맞지 않아서 false
    console.log('' == false); // true
    console.log('' === false); // false empty string은 Boolean타입이 아니어서 
    console.log(null == undefined); // true  null과 undefined가 같은것으로 간주되지만
    console.log(null === undefined); // false null과 undefined는 타입이 서로 다르므로 false
    ``` >

    8.従来のオペレータ:if文


    if, else if, else
    const name = 'ellen';
    if(name === 'ellen'){ 
    // if의 statement가 true이면 그 밑에 있는 
    //console.log가 실행된다.
      console.log('Welcome, Ellen!');
    } else if(name === 'coder'){ 
      //name이 ellen이 아니고 coder라면 
      //if를 넘어와서 else if안에 있는 {}이 실행된다.
      // 즉 'You are amazing coder'가 실행되는 것
      console.log('You are amazing coder');
    } else {
      // name이 랜덤한 이름이 들어가게 되면, if문도 패스,
      //else if (name === 'coder')도 패스하고 
      //else로 넘어와서 else가 실행된다.
      console.log('unknown');
    }

    9. Ternary operator: ?


    Ternary演算子はifをもっと簡単に書くことができます.
    //condition ? value1 : value2;
    console.log(name === 'ellie' ? 'yes' : 'no'); // statement 즉 'name === 'ellie'에 ?를 붙이면
    // statement가 true니? true면 'yes'를 실행하고
    // 아니면 : 다음에 오는 것을 실행하는 것. 즉 'no'를 실행
    // Ternary operator는 값을 할당하거나 간단하게 출력할때
    // 사용하는 것이 좋다. 
    // 계속 묶어서 쓰면 가독성이 낮아지기 때문에 간단할때만 사용

    10. Switch statement

    use for multiple if checks use for enum-like vlaue check use for multiple type checks in TS
    const browser = 'IE';
    switch(browser){ 
    // switch 안에 있는 값 즉,browser가 IE이면, 
      case 'IE':  // 'go away'를 실행하게 된 후,
        console.log('go away!');
        break;  // 멈춘다.
      case 'Chrome': 
      // chrome과 firefox가 출력하는 값이 같으므로
      // case 'Chrome': 밑에 연달아서 
      // case 'Firefow':를 붙여도 된다.
        console.log('love you!');
        break;
      case 'Firefox':
        console.log('love you!');
        break;
      default:
        console.log('same all!');
        break;
    }
    ifで複数繰り返し実行する場合は、switchを使用することを考慮したほうがよい.タイプスクリプトで、指定したタイプまたはenumのような子供をチェックする場合は、switchを使用することが望ましい.

    11. Loops


    1. while loop

    while loop, while the condition is truthy, body code is executed.
    let i = 3;
    while(i > 0){ 
    // while 같은 경우는 statement인 i > 0 이 
    // false로 나오기 전까지는 무한대로 console을 출력한다.
      console.log(`while: ${i}`);
      i--;
    }

    2. do-while loop

    do while loop, body code is executed first, then check the condition
    let i = 3;
    while(i > 0){ 
      console.log(`while: ${i}`);
      i--;
    }
    do{  
    // do의 {}을 먼저 실행한 다음에
    // while의 조건이 맞는지 아닌지를 검사한다.
    // while을 실해하고 난 후, i = 0 이어도,
    // {}안의 내용을 먼저 실행해서, 
    // do while: 0을 먼저 출력이 되고 나서
    // i 가 0보다 큰지 검사하고 멈추게 되는것.
      console.log(`do while: ${i}`);
      i--;
    } while (i > 0);
    blockを先に実行するにはdo while文が必要です.条件文が正しいときにblockを実行したい場合はwhile文を使用します.

    3. for loop, for(begin; condition; step)

    for(i = 3; i > 0; i--){ 
    // begin부분은 딱 한번만 작동이 된다.
    // 그다음 {}을 실행하기 전에 condition이 맞는지 아닌지 
    // 검사한 후에 {}이 다 실행되면 step을 실행하게 된다.
    // 그래서 condition과 step이 condition의 조건이
    // 틀릴 때까지 계속 돌게된다.
      console.log(`for: ${i}`);
    }  
    for(let i = 3; i > 0; i = i - 2){ 
    // for문 안에서 let이라는 지역변수를 선언해서
    // inline declaration을 하기도 한다.
    // inline variable declaration
      console.log(`inline variable for: ${i}`);
    }

    4.ネストされたループ//for文にfor文を作成する


    whileやforなどは互いにネストすることができます.ただしネストで記述する場合は,0がnの2勝であることを避けることが望ましい.
    for(let i = 0; i < 10; i++){ // 먼저 i가 0일때
      for(let j = 0; j < 10; j++){ // j를 0-9까지 삥삥돌리고 그다음 i = 1 일때 j를 0-9까지 돌리고는 반복해서 i가 9일때 까지 반복한다. 그렇지만 자주 쓰는 것은 권하지 않는다.
        console.log(`i: ${1}, j:${j}`);
      }
    }

    12. break, continue

    01. iterate from 0 to 10 and print only even numbers(use continue)
    for(i = 0; i < 11; i++){
      if(i % 2 !== 0){
        continue;
      }
      console.log(`q1. ${1}`);
    }
    02. iterate from 0 to 10 and print numbers until reaching 8 (use break)
    for(i = 0; i > 11; i++){
     if(i > 8){
        break;
     }
      console.log(`q1. ${1}`);   
    }
    重複文では、breakキーまたはcontinueキーを使用して重複文を終了できます.breakは完全に終了する繰り返し文で、continueは今までジャンプして次の文にジャンプすればいいです.