โœŠ ํ•„์˜ค์˜ ๊ฐœ๋ฐœ์ผ์ง€
Back to Posts
2019๋…„ 2์›” 3์ผ

CodeSpitz77 2ํšŒ_Flow control statement (2)

CodeSpitz77 2ํšŒ_Flow control statement (2)

๐ŸŒ•๐ŸŒ‘๐ŸŒ‘

TL;DR

optional flow control์—์„œ๋Š” if๋ฌธ์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃฌ๋‹ค. if๋ฌธ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ชจ๋“  ์ƒํ™ฉ์— ๋Œ€ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ์ด๋ฉฐ, ํŠนํžˆ if..else์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ else๋ฌธ ๋’ค์—๋Š” mandatory ์ƒํƒœ์˜ ๋ฌธ์ด ์™€์•ผํ•œ๋‹ค. ํ›„๋ฐฉ๊ฒฐํ•ฉ์ด๋ผ๋Š” ํŠน์ง•๋•Œ๋ฌธ์— else if ์‚ฌ์šฉ์„ ์กฐ์‹ฌํ•ด์•ผํ•œ๋‹ค. ๋ณ‘ํ–‰์กฐ๊ฑด์ผ๋•Œ๋Š” switch๋ฌธ์„ ์“ฐ๊ณ  ๋ถ€๋ถ„์ง‘ํ•ฉ์—์„œ์˜ ์กฐ๊ฑด๋ฌธ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ์—๋Š” if..else๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. if๋ฌธ์˜ ์—ฌ๋Ÿฌ ์ค‘์ฒฉ์„ else if๋ฌธ์œผ๋กœ ์“ฐ๊ณคํ–ˆ๋Š”๋ฐ, ๋งŽ์€ ์ƒํ™ฉ์„ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•œ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•ด ํ•ญ์ƒ ์˜๋ฌธ์ด ๋“ค๊ณคํ–ˆ์—ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์„ ํ†ตํ•ด์„œ else if๋ฌธ์€ ์ง€์–‘ํ•˜๊ธฐ๋กœ ํ•˜๊ณ , else๋ฌธ ๋’ค์— ์กฐ๊ฑด๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ์ค‘๊ด„ํ˜ธ ์ดํ›„์— if else๋ฌธ์„ ์จ์„œ, else๋’ค์—๋Š” mandatoryํ•œ ์ƒํ™ฉ์„ ๋งŒ๋“ค๊ฒŒ๋” ์Šต๊ด€์„ ๋“ค์ด๊ธฐ๋กœ ํ–ˆ๋‹ค. Iterate Flow Control์—์„œ๋Š” For๋ฌธ๊ณผ While, do..while๋ฌธ์„ ๋‹ค๋ฃฌ๋‹ค. For๋ฌธ์€ 3๊ฐ€์ง€ ์‹์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ฒซ๋ฒˆ์งธ๋Š” ์‹๊ณผ ๋ฌธ ์ค‘์—๋Š” ์„ ์–ธ๋ฌธ๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๊ณ , ๋‘๋ฒˆ์งธ๋Š” boolean์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์กฐ๊ฑด์‹์ด ์˜ค๋ฉฐ, ๋นˆ๊ฐ’์ผ ๊ฒฝ์šฐ ๋ฌด์กฐ๊ฑด truthy๋ผ๋Š” ํŠน์ง•์ด ์žˆ์œผ๋ฏ€๋กœ ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ง€์ง€ ์•Š๊ฒŒ ์กฐ์‹ฌํ•ด์•ผํ•œ๋‹ค. ์„ธ๋ฒˆ์งธ๋Š” ์‹์ด ์˜ค๋Š”๋ฐ, statement์˜ ๋งˆ์ง€๋ง‰์— ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ statement ๋งˆ์ง€๋ง‰์— ๋‘์–ด๋„๋œ๋‹ค. while๋ฌธ์€ ์กฐ๊ฑด์‹์ด ํ•„์ˆ˜์ด๋ฉฐ, ์กฐ๊ฑด์‹๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ๊ฐ€ body์— ์•ˆ๋‚˜์˜ฌ ๊ฒฝ์šฐ ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ง€๊ฒŒ๋œ๋‹ค. do..while๋ฌธ์€ while ์กฐ๊ฑด๋ฌธ ๋’ค์— ;์„ ๋ถ™์—ฌ์•ผํ•œ๋‹ค.

์ฝ”๋“œ์Šคํ”ผ์ธ  ๊ฐ•์˜ ์ •๋ฆฌ๋ก 77 ๋™์˜์ƒ ์Œ์›๋ฌธ์ œ๋กœ 77๊ต์•ˆ์„ ํ† ๋Œ€๋กœ 73๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉฐ ์ž‘์„ฑ


2. Optional flow control

conditional Statement: ์กฐ๊ฑด๋ฌธ

2.1 if, if else if (condition) statement1 [else statement2]

if (c > 5) { } else switch (c) { }
if (c > 5) { } else for (;;) {}

2.1.1 Truthy, Falsy mdnย  - falsy๋Š”

0, false, null, undefined,"", NaN์ด ์žˆ๋‹ค. - ๋‚˜๋จธ์ง€๋Š” truthy์ด๋‹ค.


2.1.2 Optional, Mandatory ํŠน์ • ์ƒํ™ฉ์— ๋”ฐ๋ผ optionalํ•œ์ง€ mandatoyํ•œ์ง€ ๋‹ค๋ฅด๋‹ค. - if์ ˆ์€ optional,

if (expression) //optional if (expression) statement1 else statement2 // Mandatory

์•”๋ฌต์ ์ธ ์˜ค๋ฅ˜(context error) ์˜ˆ1)

if (a) // mandatory else if (b && a) else

์œ„์˜ ์ฝ”๋“ ์—์„œ ์ฒซ๋ฒˆ์งธ else๋’ค์—๋Š” mandatory๋˜์–ด์•ผํ•˜์ง€๋งŒ, optionalํ•˜๋‹ค.

if (a) else { if (b && a) else { if (!b && a) else { if(b && !a) else { if(!b &&!a) } } } }

์—2)

if (c === 1) { } else { if (c === 2) { } }

else ๋‹ค์Œ์— ์˜ต์…”๋„ํ•œ if๋งŒ ๋†“์—ฌ์žˆ๋‹ค. else ์•ˆ์—๋Š” mandatoryํ•ด์•ผํ•œ๋‹ค.

if (c === 1) { } else { if (c === 2) { } else { } }

2.1.3 RL Parsing - arrow function๊ณผ if else ๊ตฌ๋ฌธ๋งŒ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ํ›„๋ฐฉ ๊ฒฐํ•ฉํ•œ๋‹ค. -

๋Œ€๋ถ€๋ถ„์˜ ๋ฒ„๊ทธ๋Š” ํ›„๋ฐฉ ๊ฒฐํ•ฉ์—์„œ ์ผ์–ด๋‚œ๋‹ค. - else if๋ฌธ ์“ฐ๋Š” ์Šต๊ด€์„ ๋ฒ„๋ฆฌ์ž. - else ๋‹ค์Œ์— ์กฐ๊ฑด๋ฌธ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ, ์ค‘๊ด„ํ˜ธ ์ดํ›„์— if-else๋ฌธ ์‚ฌ์šฉํ•˜๊ธฐ - ํ›„๋ฐฉ๊ฒฐํ•ฉ์˜ ์‹ค์ˆ˜๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ค‘๊ด„ํ˜ธ์™€ ๊ด„ํ˜ธ๋ฅผ ๋ถ™์—ฌ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

if (c === 1) { } else { if (c === 2) { } else { } }

๋ณ‘๋ ฌ์กฐ๊ฑด์„ ์„ ํƒํ•  ๋•Œ ์ ˆ๋Œ€๋กœ else if๋ฅผ ์“ฐ๋ฉด ์•ˆ๋˜๋Š” ์ด์œ ์ด๋‹ค.


2.1.4 Nested, Parallel ์ด๋ ‡๊ฒŒ if else๋ฅผ ๋ดค๋”๋‹ˆ.. - 1์ฐจ ์กฐ๊ฑด์ด ๋ถ„๊ธฐํ•œ ์ดํ›„์— ๋ถ€๋ถ„์ง‘ํ•ฉ์—์„œ๋งŒ

์“ฐ์ธ๋‹ค. - ๋ณ‘ํ–‰์กฐ๊ฑด์ผ ๋•Œ ์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๋‹ค์‹œ ๋ถ„๊ธฐํ• ๋•Œ.. - nested๋˜์–ด์žˆ๋Š” sub์ง‘ํ•ฉ์— ๋Œ€ํ•œ ์กฐ๊ฑด์ผ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. - else if๋Š” ๋ณ‘ํ–‰์กฐ๊ฑด์ผ ๋•Œ ์“ฐ๋ฉด ์›๋ž˜ ์•ˆ๋˜๋Š” ๊ฒƒ.

๋ณ‘ํ–‰์กฐ๊ฑด(Parallel)์ผ๋•Œ๋Š” ๋ฌด์กฐ๊ฑด! => switch
if else ์•ˆ์— switch๋ฌธ์€ ๊ดœ์ฐฎ์„๊นŒ?

mandatory๋กœ ์‹œ์ž‘ํ–ˆ์œผ๋ฉด mandatory๋กœ ๋๋‚ด์•ผํ•˜๊ณ  optional๋กœ ์‹œ์ž‘ํ–ˆ์œผ๋ฉด optional๋กœ ๋๋‚ด์•ผํ•˜๊ณ  optional๊ณผ mandatory๋ฅผ ์„ž์–ด ์จ์•ผํ•œ๋‹ค๋ฉด

์ž๊ธฐ ์ฝ”๋“œ์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ด์„œ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚  ๋•Œ ์–ด๋””๊นŒ์ง€๋งŒ ์ˆ˜์ •ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์—ฌํŒŒ๊ฐ€ ์—†๊ฒŒ๋” ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ตํž ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์งค๋•Œ ์–ด๋–ป๊ฒŒ ์„ฌ์„ธํ•˜๊ฒŒ ์งค ๊ฒƒ์ธ๊ฐ€.



3. Iterate Flow Control

๋ฐ˜๋ณต๋ฌธ

3.1 For for๋ฌธ์˜ 3๊ฐœ์˜ ์„ ํƒ์‹์— ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์•ผํ• ์ง€ ๋ฐ˜๋“œ์‹œ ์ดํ•ดํ•ด์•ผํ•œ๋‹ค.

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

  1. Initialization Limited Statement

์„ ์–ธ๋ฌธ ๋˜๋Š” ์‹์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ํ˜น์€ ๊ณต๋ฌธ๋„ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์‹ ๋˜๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ. ์ฃผ๋กœ ์นด์šดํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. 2. condition (:์กฐ๊ฑด) ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค ํ‰๊ฐ€ํ•  ์‹. ํ‰๊ฐ€ ๊ฒฐ๊ณผ๊ฐ€ ์ฐธ์ด๋ผ๋ฉด statement๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์ด ์‹์„ ๋„ฃ์ง€ ์•Š์„ ๋•Œ(๊ณต๋ฌธ) ๊ฒฐ๊ณผ๋Š” ์–ธ์ œ๋‚˜ ์ฐธ์ด๋‹ค. (Empty Truthy) - ๋ฌดํ•œ๋ฃจํ”„

๊ฒฐ๊ณผ๊ฐ€ ๊ฑฐ์ง“์ด๋ผ๋ฉด for๋ฌธ์˜ ๋ฐ”๋กœ ๋‹ค์Œ ์‹์œผ๋กœ ๊ฑด๋„ˆ ๋›ด๋‹ค. 3. final-expression ๋งค ๋ฐ˜๋ณต ํ›„ ํ‰๊ฐ€ํ•  ์‹. ๋‹ค์Œ๋ฒˆ condition ํ‰๊ฐ€ ์ด์ „์— ๋ฐœ์ƒํ•œ๋‹ค. statement ๋์— ์žˆ๋Š”๊ฒƒ๊ณผ ๊ฐ™๋Š” ์ƒํ™ฉ์ด๋‹ค. ์ฆ‰, statement ๋งˆ์ง€๋ง‰์— ์‹คํ–‰๋œ๋‹ค. (Last Execution) ๋ฐ˜๋ณตํ•ด์„œ ์“ฐ์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ 3๋ฒˆ์งธ ํ•ญ๋ชฉ์— ๋„ฃ๋Š”๊ฒƒ.

var a = 3; // declare statement. ๋ฌธ์ด๋‹ค. for (var i = 0; turthy; ex) {}

3.2 While, do while while (condition) statement - condition์ด ๊ณต๋ฌธ์ผ ๊ฒฝ์šฐ syntax error๋ฅผ

๋ฐ˜ํ™˜ํ•œ๋‹ค. - while๋ฌธ์€ ์ค‘๋ฌธ์ด ์˜ค๋Š” ๊ฒƒ์ด ์ •์ƒ. 2์ค„์ด ์˜ค๋Š” ๊ฒƒ์ด ์ •์ƒ์ด๋‹ค.

while (truthy) {} // while๋ฌธ ๋ณด๋‹ค 1๋ฒˆ์€ ๋จผ์ € ๋” ์‹คํ–‰ํ•˜๋Š” ๊ผด do {} while (truthy);

do statement while (condition);

3.2.1 Infinite Loop while๋ฌธ๊ณผ do..while๋ฌธ์€ ํ‰๊ฐ€์‹์— ๊ด€์—ฌ๋˜์–ด์žˆ๋Š” ์ƒํƒœ๊ฐ’์„ ๋ฐ”๊พธ์ง€ ์•Š์œผ๋ฉด

๋ฌดํ•œ๋ฃจํ”„์— ๋น ์งˆ ์œ„ํ—˜์ด ๋†’๋‹ค.

์‹๋ณ„์ž์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๊ฐ€ ์•ˆ๋‚˜์˜จ๋‹ค๋ฉด ๋ฌดํ•œ๋ฃจํ”„

var a = -1; while (a > 2) { a++; }

ํ˜„์‹ค์ฝ”๋“œ

while (act.method().c) { author.action(); }

??? ๋ญ”์ง€ ๋ชจ๋ฆ„.

var a = act.method().c; while (a) { author.action(); a = act.method().c; }

์ฐธ๊ณ ์ž๋ฃŒ https://mkki.github.io/code-spitz/2018/07/12/code-spitz-2.htmlย 

PreviousCodeSpitz77 2ํšŒ_Flow control statement (1)
Next์ฝ”๋“œ์Šคํ”ผ์ธ 77 ES6_3ํšŒ์ฐจ_Iteration & generator

Related

ยฉ 2025 Felix