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 else์ ์ mandatoryํ๋ค. - if else์ ์ ๋ชจ๋ ๊ตฌ๋ฌธ์ด mandatory์ฌ์ผํ๋ค. - optional ์ํ์ ๊ฒฝ์ฐ๋ ์์ธ์ฒ๋ฆฌ๊ฐ ์๋์ด์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
if (expression) //optional
if (expression) statement1 else statement2 // Mandatory์๋ฌต์ ์ธ ์ค๋ฅ(context error) ์1)
if (a) // mandatory
else if (b && a)
else์์ ์ฝ๋ ์์ ์ฒซ๋ฒ์งธ else๋ค์๋ mandatory๋์ด์ผํ์ง๋ง, optionalํ๋ค.
- a์ b์ ์ํ์ ๋ฐ๋ผ
b && a์ ๊ฐ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ
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 {
}
}- if..else๋ฌธ์์ else if๋ฌธ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ก์์ผ๋ก๋ ๋ง์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ๋ ์ฒ๋ฆฌํ๊ธฐ ํท๊ฐ๋ฆฐ๋ค.
- ์ด๋ ํ๋ฐฉ ๊ฒฐํฉ๋๋ฌธ์ด๋ค.
2.1.3 RL Parsing - arrow function๊ณผ if else ๊ตฌ๋ฌธ๋ง ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ํ๋ฐฉ ๊ฒฐํฉํ๋ค. -
๋๋ถ๋ถ์ ๋ฒ๊ทธ๋ ํ๋ฐฉ ๊ฒฐํฉ์์ ์ผ์ด๋๋ค. - else if๋ฌธ ์ฐ๋ ์ต๊ด์ ๋ฒ๋ฆฌ์. - else ๋ค์์
์กฐ๊ฑด๋ฌธ์ด ํ์ํ ๊ฒฝ์ฐ, ์ค๊ดํธ ์ดํ์ if-else๋ฌธ ์ฌ์ฉํ๊ธฐ - ํ๋ฐฉ๊ฒฐํฉ์ ์ค์๋ฅผ ํผํ๊ธฐ ์ํด ์ค๊ดํธ์
๊ดํธ๋ฅผ ๋ถ์ฌ์ฃผ๋ ๊ฒ์ด ์ข๋ค.
if (c === 1) {
} else {
if (c === 2) {
} else {
}
}๋ณ๋ ฌ์กฐ๊ฑด์ ์ ํํ ๋ ์ ๋๋ก else if๋ฅผ ์ฐ๋ฉด ์๋๋ ์ด์ ์ด๋ค.
else if๋ ์๋๋ถํฐ ์ํํ ์ฝ๋๊ณ ,- ๋จ๋ค์ด ํด์ํ ๋ ๋๊ฐํด ์ง๋ ์ฝ๋์ผ ๋ฟ๋ง์๋๋ผ,
- else ํ๋ฐฉ์กฐ๊ฑด์ด ์ ๋๋ก ๋ถ์ด์๋์ง ๊ฒ์ฌํ๊ธฐ ๊ต์ฅํ ๊น๋ค๋กญ๋ค.
- ์ปดํ์ผ ์๋ฌ๋ ์๋๊ณ ๋ฐํ์ ๋ค ํต๊ณผํ๊ธฐ ๋๋ฌธ..
- ๋ฐํ์๋ ๋ค ํต๊ณผํ์ง๋ง ๋ก์ง์ด ์๋ชป๋ ๊ฒฝ์ฐ๊ฐ ๋๋ฌด ๋ง๋ค.
2.1.4 Nested, Parallel ์ด๋ ๊ฒ if else๋ฅผ ๋ดค๋๋.. - 1์ฐจ ์กฐ๊ฑด์ด ๋ถ๊ธฐํ ์ดํ์ ๋ถ๋ถ์งํฉ์์๋ง
์ฐ์ธ๋ค. - ๋ณํ์กฐ๊ฑด์ผ ๋ ์ฐ๋ ๊ฒ์ด ์๋๋ผ ๋ถ๋ถ์งํฉ์ ๋ค์ ๋ถ๊ธฐํ ๋.. - nested๋์ด์๋ sub์งํฉ์
๋ํ ์กฐ๊ฑด์ผ๋ ์ฌ์ฉํ๋ค. - else if๋ ๋ณํ์กฐ๊ฑด์ผ ๋ ์ฐ๋ฉด ์๋ ์๋๋ ๊ฒ.
๋ณํ์กฐ๊ฑด(Parallel)์ผ๋๋ ๋ฌด์กฐ๊ฑด! => switch
-
switch๋ฅผ ์ด๋ค.
-
๋ด๊ฐ ํ๊ฐํด์ผํ ์๋ค์ด ๋๋ฑํ ๊ฒฝ์ฐ !!! switch๋ฌธ์ผ๋ก ๊ฐ๋ค.
-
๋ด๊ฐ ํ๊ฐํด์ผํ ์์ด nested๋์ด์ผ ํ ๊ฒฝ์ฐ if์ค์ฒฉ.
-
๋ณํ์กฐ๊ฑด์๋ ๋ฐ๋์ ์์ธ๊ฐ ์๊ธธ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ switch์๋ default๊ฐ ํ์์ด๋ค!!
if else ์์ switch๋ฌธ์ ๊ด์ฐฎ์๊น?
- else ์๋ mandatory๊ฐ ๋์ด์ผ ํ๋๋ฐ switch๋ฌธ์์ default ๋ฌธ์ ์ผ๋ค๋ฉด mandatory๊ฐ ๋ณด์ฅ๋๊ธฐ ๋๋ฌธ์
์ฌ์ฉํด๋๋๋ค.
- ๋ณํ์กฐ๊ฑด์ผ๋ก ๋น ์ก์ง๋ง, dafault๊ฐ ๋ถ์ด์๋ ์ด์ ๋น ์ ธ ๋์ฌ ๊ตฌ๋ฉ์ด ์๋ค.
- ์กฐ๊ฑด๋ฌธ์ ์ค์ฒฉํด์ ์ฌ์ฉํ ๋๋ mandatory๋ก ๋น ์ง๋ ๊ฑด์ง optional๋ก ๋น ์ง๋์ง ํ์ธํ๋ฉด ๋๋ค.
mandatory๋ก ์์ํ์ผ๋ฉด mandatory๋ก ๋๋ด์ผํ๊ณ optional๋ก ์์ํ์ผ๋ฉด optional๋ก ๋๋ด์ผํ๊ณ optional๊ณผ mandatory๋ฅผ ์์ด ์จ์ผํ๋ค๋ฉด
- ๋ก์ง๋ถ๋ฆฌ๋ฅผ ์ํ๋์ง
- ์์ ํ ๋ถ๋ฆฌํด์ ํจ์๋ก ๋นผ๋์ง(๊ฒฉ๋ฆฌ).
์๊ธฐ ์ฝ๋์ ์๋๋ฅผ ๋ช ํํ๊ฒ ํด์ ๋ณํ๊ฐ ์ผ์ด๋ ๋ ์ด๋๊น์ง๋ง ์์ ํ๊ณ ๋๋จธ์ง๋ ์ฌํ๊ฐ ์๊ฒ๋ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ตํ ํ์๊ฐ ์๋ค. ์ฝ๋๋ฅผ ์งค๋ ์ด๋ป๊ฒ ์ฌ์ธํ๊ฒ ์งค ๊ฒ์ธ๊ฐ.
3. Iterate Flow Control
๋ฐ๋ณต๋ฌธ
- for
- while, do..while
- for ( of ); => for iteration
- for ( in ); => forEach์ ์ ์ฌ
3.1 For for๋ฌธ์ 3๊ฐ์ ์ ํ์์ ์ด๋ค ์ฝ๋๋ฅผ ๋ฃ์ด์ผํ ์ง ๋ฐ๋์ ์ดํดํด์ผํ๋ค.
for ([initialization]; [condition]; [final-expression])
- 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);
- do while๋ฌธ์ ๋ง์ง๋ง์
;๋ถ์ด๋๊ฒ ๊ณต์๋ฌธ์์ ๋ช ์๋์ด์๋ ๊ท์น - do ๋ค์์ statement๊ฐ ๋จ๋ฌธ์ผ ๊ฒฝ์ฐ
;๋ถ์ด๋ฉด ๋จdo a++; while(a);
3.2.1 Infinite Loop while๋ฌธ๊ณผ do..while๋ฌธ์ ํ๊ฐ์์ ๊ด์ฌ๋์ด์๋ ์ํ๊ฐ์ ๋ฐ๊พธ์ง ์์ผ๋ฉด
๋ฌดํ๋ฃจํ์ ๋น ์ง ์ํ์ด ๋๋ค.
์๋ณ์์ ๊ด๋ จ๋ ์ฝ๋๊ฐ ์๋์จ๋ค๋ฉด ๋ฌดํ๋ฃจํ
var a = -1;
while (a > 2) {
a++;
}- ์กฐ๊ฑด์(condition)์ ๋์ค๋ ์ํ๊ฐ body์ ๋์ค๋์ง ์๋์ค๋์ง๋ถํฐ ๋ด์ผํ๋ค.
ํ์ค์ฝ๋
while (act.method().c) {
author.action();
}??? ๋ญ์ง ๋ชจ๋ฆ.
- ์ด๋ฐ ์ฝ๋๋ ๋ฌด์กฐ๊ฑด ๋ฐฐ์ฌํด์ผํ๋ค..
var a = act.method().c;
while (a) {
author.action();
a = act.method().c;
}- ์ ์ด๋ body์์ ์กฐ๊ฑด์์ ๋์ค๋ ์ํ๊ฐ ๋์๋ค..
์ฐธ๊ณ ์๋ฃ https://mkki.github.io/code-spitz/2018/07/12/code-spitz-2.htmlย