[learning javascript] chapter 4. 제어문

제어문

제어문의 기초

while 루프

while(funds > 1 && funds < 100) { // 돈을 건다

// 주사위를 굴린다

// 그림을 맞추면 돈을 가져온다. } ```

블록 문

console.log(“statement 3”);


#### 공백
- 자바스크립트는 줄바꿈 문자를 포함해 추가 공백을 신경쓰지 않음
- 스페이스 1개나 10개나 마찬가지
- 가독성을 위해 적당한 공백이 필요

#### 보조 함수
- 여기서는 난수 발생시키는 함수와 여섯가지 도형 중 무작위 하나를 반환하는 함수가 필요
```javascript
// m이상 n이하의 무작위 정수를 반환
function rand(m, n) {
    return m + Math.floor((n - m + 1)*Math.random());
}

// 크라운 앤 앵커 게임의 여섯 가지 도형 중 하나를 무작위 반환
function randFace() {
    return ["crown", "anchor", "heart", "spade", "club", "diamond"][rand(0, 5)];
}

if … else문

do … while문

for 루프

if문

하나로 합치기

// m 이상 n 이하의 무작위 정수 반환
function rand(m, n) {
    return m + Math.floor((n - m + 1)*Math.random());
}

// 크라운 앤 앵커 게임의 여섯 그림 중 하나에 해당하는 문자열을 무작위 반환
function randFace() {
    return ["crown", "anchor", "heart", "spade", "club", "diamond"][rand(0, 5)];
}

let funds = 50;     // 시작 조건
let round = 0;

while(funds > 1 && funds < 100) {
    round++;
    console.log(`round ${round}:`);
    console.log(`\tstarting funds: ${funds}p`);
    
    // 돈을 건다
    let bets = { crown: 0, anchor: 0, heart: 0, spade: 0, club: 0, diamond: 0 };
    let totalBet = rand(1, funds);
    if(totalBet === 7) {
        totalBat = funds;
        bets.heart = totalBet;
    } else {
        // 판돈을 나눔
        let remaining = totalBet;
        do {
            let bet = rand(1, remaining);
            let face = randFace();
            bets[face] = bets[face] + bet;
            remaining = remaining - bet;
        } while(remaining > 0)
    }
    funds = funds - totalBet;
    console.log('\tbets: ' + 
        Object.keys(bets).map(face => `${face}: ${bets[face]} pence`).join(', ') + 
        `(total: ${totalBet} pence)`);

    // 주사위를 굴림
    const hand = [];
    for(let roll=0; roll<3; roll++) {
        hand.push(randface());
    }
    console.log(`\thand: ${hand.join(', ')}`);

    // 딴 돈을 가져온다.
    let winnings = 0;
    for(let die=0; die < hand.length; die++) {
        let face = hand[die];
        if(bets[face] > 0) winnings = winnings + bets[face];
    }
    funds = funds + winnings;
    console.log(`\twinnings: ${winnings}`);
}
console.log(`\tending funds: ${funds}`);

자바스크립트의 제어문

제어문의 예외

if…else문을 체인으로 연결하기

메타 문법

while문

while(condition)
    statement

if…else문

if(condition)
    statement1
[else
    statement2]

do…while문

do
    statement
while(condition);

for문

for([initialization]; [condition]; [final-expression])
    statement

for 루프의 다른 패턴

switch 문

for…in 루프

for…of 루프

유용한 제어문 패턴

continue 문을 사용하여 조건 중첩 줄이기

break나 return문을 써서 불필요한 연산 줄이기

let firstPrime = null;
for(let n of bigArrayOfNumbers) {
    firstPrime = n;
    break;
}

루프를 완료한 뒤 인덱스 값 사용하기

배열을 수정할 때 감소하는 인덱스 사용하기