๐ค else ์ข์๋ฐ ๋ญ๊ฐ ๋ฌธ์ ์ผ?
else ์์ฒด๋ ์ฃ๊ฐ ์๋ค. ๋ค๋ง, else๋ฅผ ํผํ ์ ์๋ ์ํฉ์์ else๋ฅผ ์ฐ๋๊ฒ์ด ๋ฌธ์ ๋ค.
else๋ฅผ ์์จ๋ ๋๋๊ณณ์์ else๋ฅผ ๊ณ์ ์ฐ๋ฉด ~๋ผ๋ฉด, ~๋ผ๋ฉด์ด ์๋๋ผ๋ฉด, ~๋ผ๋ฉด์ด ์๋๋ฐ์ ๋ ~๋ผ๋ฉด, ~๊ฐ ์๋๋ฐ์ ๋ ~๊ฐ ์๋๊ณ ~...
์ฒ๋ผ ๋ณต์กํ ๋
ผ๋ฆฌ๊ฐ ๋๋ฌ๋๊ฒ๋๋ค.
๐ค๋ญ๊ฐ ๋ฌธ์ ์ง๋ ์๊ฒ ๋๋ฐ else๋ฅผ ์ด๋ป๊ฒ ์ค์ฌ?
else๋ฅผ ์ค์ฌ์ฃผ๋ ์ฌ๋ฌ๊ฐ์ง ํ
ํฌ๋๋ค์ด ์๋๋ฐ ๊ทธ์ค์์๋ ์ค๋์ early return
๊ณผ early continue
, early break
๋ฅผ ์์๋ณด๋ ค๊ณ ํ๋ค.
early return
์ด๋ return์ ๋นจ๋ฆฌ ํด๋ฒ๋ ค์ ๋ท ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋จํ๊ฒ ๋ง๋๋ ํจํด์ด๋ค.
์๋ฅผ๋ค์ด์ ์คํธ๋ง์ ๋ฐ์์ ์คํธ๋ง์ด ์ด๋ค ํ์
์ธ์ง ๋ฆฌํดํ๋ get_string_type
ํจ์๊ฐ ์๋ค๊ณ ํ์. ์๋์ ์ฝ๋๋ early return์ด ์ ์ฉ๋์ง ์์๋ฐ๋ค๊ฐ ๋ฆฌํด์ ํ๊ณณ์์๋ง ํ๋ค๋ ํ์์ ์ฝ๋ฉ์คํ์ผ์ด ๊ฒฐํฉ๋ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค.
int get_string_type(char* string) {
int ret;
if (is_rule_1(string)) {
ret = 1;
} else {
if (is_rule_2(string)) {
ret = 2;
} else {
ret = 0;
}
}
return ret;
}
์์ ์ฝ๋๋ early return์ ์ ์ฉ์์ผ ๊น๋ํ๊ฒ ์ ๋ฆฌ ํ ์ ์๋ค.
int get_string_type(char* string) {
if (is_rule_1(string))
return 1;
if (is_rule_2(string))
return 2;
return 0;
}
ํจ์ ๋ด์์ return์ ํ๋ฉด ๋ค์ ์ฝ๋๋ก ์ง์
ํ์ง ์๋ ํน์ฑ์ ์ด์ฉํด์ else { }๋ก ๊ตฌ์ฑ๋๋ ํ๋์ compound statement
๋ฅผ ์ค์ผ ์ ์๋ค.
๐คญ ์ด์ ๋๋ ๋ด์ค๋งํ๋ฐ?
์ด์ ๋ ์ฝ๋ ๊ด์ฐฎ๋ค๊ณ ๋๊ธด๋ค ์น์ง๋ง, ๋ง์ฝ์ ์์ ์ธ์๊ฐ ์ ๋๋ก ๋์ด์๋์ง ์ฒดํฌํ๋ ์ฝ๋๋ฅผ ์ฝ๋์ ์ถ๊ฐํด์ผ ๋๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
int get_string_type(char* string) {
int ret;
if (check_parameter_here) {
ret = -1;
} else {
if (is_rule_1(string)) {
ret = 1;
} else {
if (is_rule_2(string)) {
ret = 2;
} else {
ret = 0;
}
}
}
return ret;
}
์ด๋ฐ ํฌํํฐ๊ฐ ํผ์ณ์ง๊ฒ ๋๋ค.
๋ฌดํelse๋ฌธ
๋ฐ๋ฉด early return์ ์ ์ฉํ ์ฝ๋๋ ์๋์ ๊ฐ์ด ๋จ์ํ๊ฒ ์์ฑ๋๋ค.
int get_string_type(char* string) {
if (check_parameter_here)
return -1;
if (is_rule_1(string))
return 1;
if (is_rule_2(string))
return 2;
return 0;
}
ํธ์ํ๋ค!
ํจ์์์ return์ผ๋ก ํ๋ฆ์ ๋์ ์ ์๋๊ฒ์ฒ๋ผ ๋ฐ๋ณต๋ฌธ์์๋ continue์ break๋ก ํ๋ฆ์ ๋์ ์ ์๊ธฐ ๋๋ฌธ์ early continue
, early break
๋ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ ๋ค.
if (condition) { a }
else { b }
๋ if (condition a) { a; continue; }
b
๋ก ๋ฐ๊ฟ ์ ์๋ค.
for () {
if (condition a) {
code1;
code2;
code3;
} else {
code4;
code5;
code6;
}
}
์์ ์ฝ๋๋ continue๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ ๊ฐ์ด ๋ฐ๋ ์ ์๋ค.
for () {
if (condition a) {
code1;
code2;
code3;
continue;
}
code4;
code5;
code6;
}
"if(a) run b"๋ผ๋ ์ฝ๋๋ "if(!a) continue; run b" ๋ก ๋ฐ๋ณต๋ฌธ ์์์ ๋ฐ๊ฟ ์ ์๋ค.
run b๊ฐ ํ์ค์ง๋ฆฌ์ฝ๋์ด๋ฉด ์ ์๊ฐ ๋ ๊ฐ๊ฒฐํ์ง๋ง b๊ฐ ์ฌ๋ฌ์ค์ด๋ผ๋ฉด ๋ฐ์ ์์ผ์ ์ฝ๋๋ฅผ ์์ฑํ๋๊ฒ์ด ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ ๋ค.
for () {
for () {
if (condition a) {
code1;
code2;
code3;
if (condition b) {
code4;
code5;
}
}
}
}
๐ฎ๐ปโโ๏ธ TMI: if ๊ดํธ ์์ ๋ค์ด๊ฐ๋๊ฑด ์ฌ์ค condition์ด ์๋๋ผ expression์ด๋ผ๊ณ ํ๋๊ฒ ๋ง๋ค. (PL์๊ฐ์ ๋ฐฐ์ใ ใ )
์์์ฝ๋๋ condition a์๋ํด์ ๋ ผ๋ฆฌ ๋ฐ์ continue๋ฅผ ์ฌ์ฉํด์ code1 ~ code5 ๊น์ง์ indent level์ ํ๋จ๊ณ ๋ด๋ฆด ์ ์๋ค.
for () {
for () {
if (!condition a) continue;
code1;
code2;
code3;
if (condition b) {
code4;
code5;
}
}
}
์ ์ฝ๋๋ condition b์ ๋ํด์ ํ๋ฒ ๋ ๋ฐ์ ์ํฌ ์ ์๋ค.
for () {
for () {
if (!condition a) continue;
code1;
code2;
code3;
if (!condition b) continue;
code4;
code5;
}
}
์ฌ์ค ์ฝ๋ ์คํ์ผ์ ์ ๋ต์ ์๋ค. ๋๋ก๋ indent level์ด ๊น์ด์ง๋๋ผ๋ if else๋ก ๋ช ํํ๊ฒ ๋ ผ๋ฆฌ๋ฅผ ๋๋ฌ๋ด๋๊ฒ์ด ๋ ์ข์ sudo ์์๊ฒ์ด๋ค. ์!
return ์ ํ๊ณณ์์ ใ
๋๊ตฌ๊ฐ ์ฒ์ ์ ์์ ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง
๋ณด๋ฉด ๋ณผ์๋ก ์ฌ๋ฏธ ์์ต๋๋ค
early * ๊ฐ์ธ์ ์ผ๋ก ์ ํ์ฉํ๊ณ ์์ต๋๋ค
(๋์ถฉ ์ ๋ณดํธ ์ฐฐ์น ๋๋ฆฌ๋ ๋๊ธ)