๋ค์ํ ํ ๋ก ์์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ ํ์ฉํ๋ ๊ฒ์ด ์ ์๋์์ต๋๋ค.
if x then y
์งง์ ํ์์ "if" ๋ฌธ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ๊ณตํต ์ฌํญ์ ๋ํ ๋์์ผ๋ก:
x && y
๋จ๋ฝ ํ์ฉ ๊ตฌ๋ฌธ &&
์กฐ๊ฑด๋ถ ์คํ ์ฐ์ฐ์ y
(๋ก y
์ข
์ข
๋ค๋ฅธ ๋ถ์์ฉ์ ํจ์ ๋ฐ๋์ ๋ฐํํ์ง Bool
).
์ด๊ฒ์ ์ฃผ์ ์ฅ์ if-then
๊ตฌ์กฐ์ ์กด์ฌ : ๋ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋, ํ๋์ ๋ ์์กด &&
, ๊ทธ๋ฆฌ๊ณ ๊ณต์์ ์ผ๋ก "๋ง์ฝ"๋ฌธ ์์ ๋ฑ์ด ํ์์๋ end
์์ด.
์์ ์๋ ์ด ๊ตฌ๋ฌธ์ด ๋ค์๊ณผ ๊ฐ์ #550์ ๊ตฌํํ๊ธฐ ์ํ ํธ๋ฆฌํ ์๋จ์ ์ ๊ณตํ ๊ฒ์ด๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
A = [if x % 2 == 0 then f(x) for x in 1:10]
if-then
๊ฐ end
ํค์๋๋ฅผ ํ์๋ก ํ์ง ์๋๋ค๋ ์ฌ์ค์ ์์กดํ์ฌ ํ์ด์ฌ ์คํ์ผ ๊ฐ๋๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์ด์จ๋ ์ด๋ค ํํ๋ก๋ ํ์ํ ๊ฒ์
๋๋ค.
A = [f(x) for x in range(10) if x % 2 == 0]
๋ถ๋ช ํ ํ์๋ฉด Julia ๊ฐ๋ ๊ตฌ๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์์์ ๋ค์ ์์ฑํฉ๋๋ค.
A = [if x % 2 == 0 then f(x) for x in 1:10]
์๊ฒ
A = [Filter(x->x % 2 == 0, f(x) for x in 1:10)]
๋ํ ๋ช ํํ ํ์๋ฉด, ์ด๊ฒ์ _comprehension_ ์์ค(ํ์ด์ฌ์ด ํ์ฉํ๋ ๊ฒ๊ณผ ์ผ์นํจ)๊ณผ ๋ฐ๋๋ก _generator_ ์์ค์์ ๋ณดํธ ๊ตฌ๋ฌธ์ ํ์ฉํฉ๋๋ค.
Perl/Ruby ์คํ์ผ์ if/for ์์ ์ ๊ตฌ๋ฌธ์ ์ด๊ฒ๊ณผ ๋ ์ ์์ผ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค์ ๋งํด:
println("positive") if x > 0 # conditional execution
x^2 for x=1:100 # generator
[ x^2 for x=1:100 ] # comprehension
x^2 if x % 3 == 0 for x = 1:100 # filtered generator
[ x^2 if x % 3 == 0 for x = 1:100 ] # filtered comprehension
๋ํ end
๊ตฌ๋ฌธ์ด ์๋ if
- then
์๋ ์๋ ๊ฒ ๊ฐ์ ๋ค๋ฅธ ์ธ์ด์ ์ ๋ก๊ฐ ์๋ค๋ ์ด์ ๋ ์์ต๋๋ค.
๋ฌธ์ ๊ด๋ฆฌ์ ๋ํ ์ฐธ๊ณ ์ฌํญ: #6823์์ ์ ํํ ์ด ๋ฌธ์ ์ ๋ํด ๋ ผ์ํ์ต๋๋ค. ์ด๋ ์์ ์์ ๊ทธ๊ฒ์ ์ฝ๋ฉํธ ์์ด ๋ซํ๊ณ , ๋๋ ๊ทธ๊ฒ์ ๋ซ๋ ๊ฒ์ ๋ํ ํฉ์๊ฐ ๋ถ๋ช ํ ์์๊ธฐ ๋๋ฌธ์ ๋ซ์ ์ด์ ๋ฅผ ๋ฌผ์์ง๋ง ๊ฒฐ์ฝ ๋ต์ฅ์ ๋ฐ์ง ๋ชปํ์ต๋๋ค. #6823๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ์ง ์๋ ๊ฒ์ด ๋ ํจ์จ์ ์ผ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด๋ฌํ ๋ ผ์๊ฐ ์์ ๊ทธ๋ฆฌ๋ฉฐ ์๋ ๋ฌธ์ ์ ๋ชจ๋ ์์ ์ด ๋ค์ ๋ฐ๋ณต๋ ๊ฒ์ ๋๋ค. ์ธ์ ๊ฐ๋ #6823์ ์ ๋ชฉ์ ๋ณ๊ฒฝํ๊ณ ์ฌ๊ธฐ์ ์ถ๊ฐํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ๊ฒ์ ๋๋ค.
๋ค, ์ข์ ์ง์ ์ ๋๋ค. ์ค์ ๋ก #6823์ ํ ๋ก ์ค์ ์๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ ์๋ง๋ ๋ซํ์ง ์์์ ๊ฒ์ ๋๋ค.
๋ค๋ฅธ ์ธ์ด๊ฐ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ทจํ๊ธฐ ๋๋ฌธ์ ์ ๊ฐ ์์์ผ ์๋ ์์ง๋ง println("positive") if x > 0
์ ๊ฐ์ด ์กฐ๊ฑด ์์ ์ค๋ ๋์์ด ์ ๋ง ์ด์ํ๋ค๋ ๊ฒ์ ํญ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด if x > 0 println("positive") end
๋ณด๋ค ๋ ๊ฐ๊ฒฐํ๋ค๊ณ ์๊ฐํ์ง๋ง ์ ์ด๋ ๋์๊ฒ๋ ๊ฐ๋
์ฑ์ ํฌ์ํด์ผ ํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ๋ํ์ฒ๋ผ ์๊ฐํ๋ค.
Julia: "๋ฌธ์์ด์ ์ถ๋ ฅํ๊ฒ ์ต๋๋ค..."
ํด๋กค๋: "๊ต์ฅํด!"
Julia: "...ํ์ง๋ง ์ด๋ค ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ ๊ฒฝ์ฐ์๋ง."
ํด๋กค๋: "์ค. :("
~ ๋
Julia: "์ด๋ค ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ฉด ๋ฌธ์์ด์ ์ถ๋ ฅํ๊ฒ ์ต๋๋ค."
ํด๋กค๋: "์์์ด, ์ข์."
@ararslan : ๋์ํ์ง ์์ต๋๋ค. Ruby์ Perl์ ์ ํ ๊ธฐ์ ์๋ ๋ถ๊ตฌํ๊ณ Julia์๋ ์ด ๊ธฐ๋ฅ์ด ์๋ ์ด์ ์ค ํ๋์
๋๋ค. ๊ทธ๋ฌ๋ ์์ฑ๊ธฐ ๋ฐ ์ดํด์ ๋ํ for
์์ ์ ๊ตฌ๋ฌธ๊ณผ ํจ์ฌ ๋ ์ ํผํฉ๋๋ฏ๋ก ์ฌ๊ธฐ์์ ๊ฐ์ ธ์์ต๋๋ค.
@StefanKarpinski ์, ๋์ํ์ต๋๋ค. ๋๋ ์ฌ์ ํ ํ๋ โโ์ด์ ์ ์กฐ๊ฑด์ ์ ๋ง์ ์ผ๋ก ๋ถ์ด ์์ต๋๋ค. :smile: (๊ทผ๋ฐ ์ต๊ทผ์ ์์ฃผ ํ๋ ๋ง์ด์ง๋ง ๋ด ์๊ฒฌ์ ๋ณ๋ก ์ค์ํ์ง ์์ต๋๋ค. ์ ๋ ๊ทธ์ ๊ทธ๋ฐ ์ฌ๋์ผ ๋ฟ์ ๋๋ค.)
๋๋ ๋น์ ์ด ๊ฐ์ ๊ฒ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
if x % 3 == 0 then x^2 for x = 1:100
๋ค์๊ณผ ๊ฐ์ด ๊ทธ๋ฃนํํ ์ ์๋ ๊ฒ์ฒ๋ผ ์ฝ๊ธฐ ๋๋ฌธ์ ์ดํด/์์ฑ๊ธฐ/thingamajig๋ฅผ ์์ํ๊ณ ์๋์ง ์ฆ์ ๋ช ํํ์ง ์์ต๋๋ค.
if x % 3 == 0 then (x^2 for x = 1:100)
์ฆ, ์ด๋ค ์กฐ๊ฑด์ด๋ฉด ์์ฑ๊ธฐ์ ๋๋ค. ๋ ์๊ดํ์ง ์์๊ฑฐ์ผ
if x % 3 == 0 x^2 end for x = 1:100 # More obvious what's happening, IMO
filter(x -> x % 3 == 0, [x^2 for x = 1:100]) # Verbose, but... ยฏ\_(ใ)_/ยฏ
์ ์๊ฐ์ ์กฐ๊ฑด์ด ์์ฑ๊ธฐ์ ์์
์ ๋ฐ๋ฅผ ๊ฒฝ์ฐ if
์ ๋ค๋ฅธ ํค์๋๋ฅผ ์ ํธํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด where
์
๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฑฐ์ SQL ์ฟผ๋ฆฌ์ฒ๋ผ ์ฝํ๋๋ค.
x^2 for x = 1:100 where x % 3 == 0
where
๋ if
for
์ ์ํด ์์ฑ๋ x
์ ๊ฐ์ ํํฐ๋งํ๋ค๋ ๊ฒ์ ์กฐ๊ธ ๋ ๋ช
ํํ๊ฒ ํด์ค๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ๊ฒฝ์ฐ์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ด ์๋ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๋ฐ์ดํฐ ํ๋ฆ์ด ํ ๋ฐฉํฅ์ผ๋ก ํ๋ฅด๋ ๊ฒ์ด ๋์๊ฒ๋ ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฌด์จ ๋ง์ธ์ง ์์ธํ ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น?
for 1:n
๋ ๊ฐ์ "์์ฑ"ํ๊ณ if x % 3 == 0
๋ ๊ฐ์ ํํฐ๋งํ๊ณ x^2
๋ ๊ฐ์ ๋ณํํฉ๋๋ค. ์์ฑ๊ธฐ๋ ์ด๋ฏธ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ํ๋ฅด๊ณ ๊ทธ ํ๋ฆ์ ์ ์งํ๋ ค๋ฉด ํํฐ๊ฐ ๊ฐ์ด๋ฐ. if
์ ์ด for
์ ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๋ฉด ๋ฐ์ดํฐ๊ฐ ๊ฐ์ด๋ฐ์์ ๋งจ ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋ฅธ ๋ค์ ๋งจ ์ผ์ชฝ์ผ๋ก "ํ๋ฆ
๋๋ค". ์ด๋ ์ด์ํฉ๋๋ค. if
์ ์ด ์ผ์ชฝ์ ์์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋งจ ์ค๋ฅธ์ชฝ์์ ๋งจ ์ผ์ชฝ, ๊ฐ์ด๋ฐ๋ก "ํ๋ฆ
๋๋ค". SQL์ด where
์ ์ ํ
์ด๋ธ ์ด๋ฆ ์ค๋ฅธ์ชฝ์, ํํ์์ ์ผ์ชฝ์ ๋ฐฐ์นํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์ด๋ ์์ด์ ๋ ๋น์ทํ๊ธฐ ๋๋ฌธ์
๋๋ค. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋์์ธ์์ ๋๋ฌด ๋ฉ๋ฆฌ ๊ฐ์ ธ๊ฐ์ผ ํ๋ ํด๋ฆฌ์คํฑ์ด ์๋๋๋ค.
if x then y
์ ๋ํด ๋ง์์ ๋ค์ง ์๋ ์ :
then
ํค์๋๋ฅผ ์๊ฐํฉ๋๋ค.if x then y
if x y end
๋ฅผ ์ฐ๋ ๊ฒ์ด ๋ ์งง์ต๋๋ค. x && y
๋ ๋ ์งง์ต๋๋ค.then
ํค์๋๋ ์ ๋ฐ๋์ ๊ตฌ๋ฌธ์ ๋ํด ์ธ์ด์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. end
ํค์๋(๋๋ bash์์ fi
๊ฐ ํ์ํ ์ฌ๋ฌ ์ค if
๊ตฌ๋ฌธ) , ์ฟ).์ค ์, ์ด์ ํ๋ฆ์ ๋ํด ๋ฌด์จ ๋ง์์ด์ ์ง ์๊ฒ ์ต๋๋ค. ๊ทธ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ค๋ช ๊ฐ์ฌํฉ๋๋ค!
ํ ์ ์๋ ๊ฒ ์ด์ํ ๊ฑธ๊น
x^2 if x % 3 == 0 for x = 1:100
๊ทธ๋ฆฌ๊ณ ํ ์ _์๋ค_
println("positive") if x > 0
?
๋ชจ๋ ์ข์ ์ .
๋๋ ์ฌ์ค @StefanKarpinski ๊ฐ ๊ทธ์ ์ฒซ ๋ฒ์งธ ๋ ผํ์์ ์ฒ์ ์ ์ํ ๊ตฌ๋ฌธ์ ์ ๋ง ์ข์ํฉ๋๋ค. ์ ๋ ์ฃผ๋ก ์กฐ๊ฑด๋ถ ์์ฑ๊ธฐ์ ๊ด์ฌ์ด ์์ต๋๋ค. ๋ ์ผ๋ฐ์ ์ธ ์งง์ ํ์์ _if_-form์ ๋ณด๋์ค์ ๋๋ค.
์์ฑ๊ธฐ์ ๊ด๋ จํ์ฌ if
(๋๋ where
- ๋๋ ๊ทธ๊ฒ์ ๋ํ ์๊ฒฌ์ด ์์)์ ๋ฒ์์ ์ผ๋ถ๋ก ์ฝ๊ณ ์์์ต๋๋ค... iterator x = 1:10 if/where x % 2 == 0
๋ฅผ ์์ฑํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ผ์ชฝ์ ํํ์๊ณผ ๊ฒฐํฉํ์ฌ ๋ฐฐ์ด(๋๋ ์์ฑ๊ธฐ)์ ๋ง๋ญ๋๋ค.
์ด๋ค ์๋ฏธ์์ x = 1:10 where x % 2 == 0
์์ฒด๊ฐ ์ผ์ข
์ ๋ฐ๋ณต ๊ฐ๋ฅํ ์์ฑ๊ธฐ์
๋๋ค. ์ด๊ฒ์ ๋
๋ฆฝ ์คํํ ๊ตฌ๋ฌธ์ด ๋ ์ ์์ต๋๋ค.
ํํฐ๋ง์ ์กฐ๊ฑด๋ถ if a then b
๋ฌธ๊ณผ ์ด๋ป๊ฒ ๋ ๋ค๋ฅธ ์์
์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํํฐ๋ง์ ๋ฐ๋ณต ๋ฒ์์์ ์๋ํฉ๋๋ค. if a then b
๊ฐ ์์ฑ๊ธฐ ์ผ์ชฝ์ ํํ์๊ณผ ๊ฒฐํฉ๋๋ฉด a
์ด false
์ธ ๊ฒฝ์ฐ $ nothing
๋ฅผ ๋ฐฉ์ถํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๋๊ดํธ๋ฅผ ์ถ๊ฐํ๋ฉด ๋
ผ๋ฆฌ์ ์ผ๋ก ์ด๋ป๊ฒ ๋๋์ง ๋น๊ตํฉ๋๋ค.
[(x^2 if i % 2 == 1) for i = 1:10] # [nothing, 4, nothing, 16, nothing, 36, nothing, 64, nothing, 100]
[x^2 (for i = 1:10 where i % 2 == 0)] # [4, 16, 36, 64, 100]
ํ์ฉํ๋ ๊ฒฝ์ฐ @ararslan ์ ์๋ฅผ ๋ค๋ฉด
println("positive") if x > 0
๊ทธ ๋ค์ IMHO
x^2 if x % 3 == 0 for x = 1:100
nothing, nothing, 9, nothing, nothing, 36, ...
๋ฅผ ๋ฐฉ์ถํด์ผ ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์ฝ์ if
์กฐ๊ฑด๋ถ๋ฅผ ์ฑํํ๋ค๋ฉด @ararslan ์ ์ฒซ ๋ฒ์งธ ๊ฒ์๋ฌผ์์ ์ค๋ช
ํ ์ด์ ๋๋ฌธ์ ์ง์ ์์ ์กฐ๊ฑด์ ํฌํํฉ๋๋ค. (์ฝ๋๊ฐ ์์ฑ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ด ์ฝํ๋ค๊ณ ๋งํ๋ฉด if a then b
๊ฐ ํ์๊ฐ ๋ ์งง๋๋ผ๋ a && b
๋ณด๋ค ๋ ๋์ ๊ตฌ๋ฌธ์์ ๊ธฐ์ตํ์ญ์์ค.) ๊ทธ๊ฒ์ ๋ํ ์์ฑ๊ธฐ ๋ด๋ถ์ ๋ ๊ฐ์ง ๊ฐ๋ฅํ if
์ ํ์ด ๊ฐ์ฅ ์ผ์ชฝ์์ ํํ์์ผ๋ก ๋๋ ๋งจ ์ค๋ฅธ์ชฝ์์ ๋ฒ์์ ๊ตฌ๋ณ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
Ruby/Perl์ ์ ํต์ ๊ดํด์๋ ์ ํต์ ์ฝ๋งค์ด๊ธฐ ๋ณด๋ค๋ ์ต์ ์ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ณ ์๋ํ๋ ๊ฒ์ด ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ฒ์ด ํจ๊ณผ๊ฐ ์๊ณ ์์ฐ์ค๋ฝ๋ค๋ฉด ์ฌ๋๋ค์ ๊ทธ๊ฒ์ ์ข์ํ ๊ฒ์ ๋๋ค.
๋ํ ๋ฒ์์ if/where
๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฒ์๊ฐ ๋ค์ฐจ์ ์์ฑ๊ธฐ์ ๋ํด ๋ฐ์นด๋ฅดํธ ํ๋ ฌ์ ์ ์งํ๋๋ก ์ฃผ์ํด์ผ ํฉ๋๊น?
# Make a circular array (filled with distance to center)
r = 5
[sqrt(x^2 + y^2) for x = -5:5, y = -5:5 where x^2 + y^2 <= r^2]
์ด๊ฒ์ ์ผ์ข ์ ์์ํ๊ณ ์ผ์ข ์ ๋์ฐํฉ๋๋ค!
ํํฐ๋ง์ ์กฐ๊ฑด๋ถ if then b ๋ฌธ๊ณผ ์ด๋ป๊ฒ ๋ ๋ค๋ฅธ ์์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ค! ์ด ๊ฐ์ ๋๊ธ์ ์ฌ๋ฆฌ๋ ค๊ณ ํ์ต๋๋ค. ํํฐ๋ง์ ๋ฐ๋ณต์ ์ ์ฒด์์ ์๋ํ๋ฉฐ ๋ด๋ถ ๊ณ์ฐ๋ ํํ์์ ์ผ๋ถ๊ฐ ์๋๋๋ค.
๋๋ ๋ํ ํํ์๊ณผ ๋ฐ๋ณต ์ฌ์ด์ if
๊ฐ ๋ฐ๋ณต์ ๋ชจ์์ด ์๋ ํํ์์ ๊ฐ์ "๋ณํ"ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ณ nogthing
๋ฅผ ์์ฑํด์ผ ํ๋ค๋ @andyferris ์ ๊ฐ์ ๋๋์ ๋ฐ์ต๋๋ค. ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ง ์์ต๋๋ค(๊ทธ๋ฌ๋ python/haskell ์ดํด๋ก ์ธํด ๋ฒ๋ฆ์ด ๋ ์ ์์).
๋ถ๋ช
ํ x if false
๋ ์์ฑ๊ธฐ ํํ์์ ์ปจํ
์คํธ๊ฐ ์๋ ๊ฒฝ์ฐ nothing
๋ก ํ๊ฐ๋ฉ๋๋ค. [x^2 if x % 3 == 0 for x=1:100]
๋ฅผ ์ง์ํ์ง๋ง x if y
์์ฒด๋ ์ง์ํ์ง ์๋ ๊ฒ์ด ๋งค์ฐ ํฉ๋ฆฌ์ ์
๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋ฌธ์ด ํ๋๋ง ์์ผ๋ฉด end
๋ฅผ ์๋ตํ ์ ์์ต๋๋ค.
if length(A) != length(B) throw(ArgumentError("..."))
end
๊ฐ ์์ผ๋ฉด ํํ์์ด ํ๋๋ง ์๋ค๊ณ ๊ฐ์ ํ ์ ์์ต๋๋ค. ์ด์ ์ ๊ธธ๊ฒ ๋
ผ์๋ ๊ฒ ๊ฐ์๋ฐ์?
์กฐ๊ฑด ๋ค์ ์ธ๋ฏธ์ฝ๋ก ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ํํ์ ๋ค์... _maybe_... ์ ๋ ์ข์ํ์ง ์์ต๋๋ค.
๋๋ ๋น์ทํ ํํ์ if ๋ฌธ์ ๋ํด ๋ ๊ฐ์ง ๋ค๋ฅธ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ซ์ต๋๋ค. _(์์ : if x; ...; end
๋ฐ if x then; ...
.if condition then action
์ด(๊ฐ) ์ ์๊ฒ ์ฑ์ฅํ์ต๋๋ค.)_
[x^2 if x % 3 == 0 for x=1:100]์ ์ง์ํ๋ ๊ฒ์ ์๋ฒฝํ๊ฒ ํฉ๋ฆฌ์ ์ด์ง๋ง x if y ์์ฒด๋ ์ง์ํ์ง ์์ต๋๋ค.
@StefanKarpinski ์ ๋ ์ด์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ํ์ง๋ง...
if ์ ์ด ์ผ์ชฝ์ ์์ผ๋ฉด ๋ฐ์ดํฐ๋ ๋งจ ์ค๋ฅธ์ชฝ์์ ๋งจ ์ผ์ชฝ, ๊ฐ์ด๋ฐ๋ก "ํ๋ฆ ๋๋ค".
๋๋ x^2 if x % 2 == 0 for x in 1:10
๋ฅผ x^2 where x % 2 == 0 for each x in 1:10
$ ๋ก ์ฝ์์ต๋๋ค. ์ดํด๊ฐ ๋์๊ธฐ ๋๋ฌธ์ ์ดํด๊ฐ ๋ฉ๋๋ค. ๋น์ ์ ๋ณํ์ ๊ฐ์ฅ ๊ด์ฌ์ด ์์ต๋๋ค.
SQL ์ฟผ๋ฆฌ์์ ๋์ผํ ์ ์ด ์ฌ์ค์
๋๋ค. ๊ทธ๋ ์ง ์์ต๋๊น?
๊ทธ๋ฌ๋ฏ๋ก ๋๋ "์ ๋๋ ์ดํฐ"๊ฐ ๊ทธ๊ฒ์ ์ฝ๊ธฐ ์ํ ์ถ๋ฐ์ ์ผ๋ก ์ผ๋ ๊ฒ์ด _์ดํด๋ฅผ ์ํด_ ์์ฃผ ์ณ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋ฐ๋ฉด์ for ๋ฃจํ๋... ๊ทธ๊ฒ ๋ ์ดํด๊ฐ ๋ฉ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋ฌธ์ฅ์ด ํ๋๋ง ์๋ค๋ฉด end๋ฅผ ์๋ตํ ์ ์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
๋๋ ์ด๊ฒ์ ์ค๋ ์ ์ ์ ์ํ์ง๋ง ์ด๋ค ๊ฒฌ์ธ๋ ์ป์ง ๋ชปํ์ต๋๋ค: https://github.com/JuliaLang/julia/issues/1657. ๋ค์๊ณผ ๊ฐ์ ์ผ๋ถ ์์ฑ ์ฝ๋๋ฅผ ๋ณด๋ ๊ฒ์ด ์ด์ํ๊ณ ๋๋ฌผ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก๋ ๋น๊ต์ ๋นํ๊ดด์ ์ธ ๋ณ๊ฒฝ์ด ๋ ๊ฒ์ ๋๋ค.
if cond body
end
then
๋์ do
๋ธ๋ก์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น? ์: if x do y end
์ฝ๊ฐ์ ๋ถ์ฐจ์ ์ธ ์ค๋ช
: ์์ ํ ์ค๋ฆฌ์ ํ์ ์์ด๋ if x y
์์ฒด(์: ์์ฑ๊ธฐ ์ธ๋ถ)๋ฅผ ํธ์ง๊ธฐ ๋ด์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. if
๋ค์ ์ค๋ ํ ํฐ ์๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ๋๋ vim์ ์๊ฐํ๊ณ ์์ง๋ง ๋ค๋ฅธ ํธ์ง์๋ค๋ ๊ฐ์ ์ํฉ์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋์ผ์ ๋ํ ์ง์ค์ด ๋ ์ y if x
,ํ์ง๋ง ํ์คํ (์ ์ฒด ๊ณต๊ฐ ์๋์์ : ๋๋ ๋ํ ์ ๋ง ์ซ์ดํ๋ y if x
์์ฒด๋ก, ๋๋ํ์ง์์์ด if x y
์์น์ผ๋กํ์ง๋ง, ํธ์ง์๋ฟ๋ง ์๋๋ผ ์ธ๊ฐ์๊ฒ๋ ๊ตฌ๋ฌธ ๋ถ์์ด ์ฝ๊ฐ ์ด๋ ค์ธ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค).
@diegozea ๊ฐ์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ฌ์ ํ if x y
์ ์ ํธํฉ๋๋ค.
@carlobaldassi ์ฌ๋์ด ๊ตฌ๋ฌธ ๋ถ์์ ๋ ์ฝ๊ฒ ํ๊ธฐ ์ํด ํ ์ ์๋ ๋ช ๊ฐ์ง ์์ ์ด ์์ต๋๋ค.
๋จ์ผ ๋ฌธ if์์ ์กฐ๊ฑด๊ณผ ํํ์ ์ฌ์ด์ ๊ฐํ ๋ฌธ์๊ฐ ์๋๋ก ๊ฐ์ ํ ์ ์์ต๋๋ค.
ํ์ง๋ง ๊ธด ํํ์ ๋ํด ๊ทธ๋ ๊ฒ ํ๋๋ก ๊ฐ์๋ฐ๊ณ ์ถ์์ง๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋๋ ์กฐ๊ฑด ๋ค์ ์ค ๋ฐ๊ฟ์ด ์๋ ๊ฒฝ์ฐ ํํ์ ๋ค์ ์ค ๋ฐ๊ฟ์ด ์๋๋ก ๊ฐ์ ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ค์์ ์ปดํ์ผ๋์ง ์์ง๋ง ๋ฌผ๋ก ๋ช ํํ ์ค๋ฅ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
if length(A) != length(B)
throw(ArgumentError("lengths must match")
if some_condition(A, B)
N *= 2
๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
if length(A) != length(B) throw(ArgumentError("lengths must match")
if some_condition(A, B) N *= 2
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์:
if length(A) != length(B)
throw(ArgumentError("lengths must match")
if some_condition(A, B)
N *= 2
์ด๋ ๊ฒ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค์๋ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
if is_present(x)
y = 2 * x[]
return y * 2
if x then y
๋ํ ๊ฐ์ฅ ํฐ ์ฃผ์ฅ์ ์ฌ์ ํ โโ๋ค๋ฅธ ๊ตฌ๋ฌธ๋ณด๋ค ์ฐ์์ ์๋ค๋ ๊ฒ ์
๋๋ค. if x y end
, if x y
๋๋ x && y
์ด ๋ ์งง๋ค๋ ๊ฒ์ ๋ด ์ฑ
์์ ๊ด๋ จ์ด ์์ต๋๋ค. if x then y
๋งํผ ๋ช
ํํฉ๋๋ค. ๋ํ ํธ์ง๊ธฐ ๊ตฌ๋ฌธ ๋ถ์ ๋ฌธ์ ๋๋ ๊ณผ๊ฑฐ ์ฝ๋์ ์์ ๊ฐ๋ฅ์ฑ์ ๋ฐฉ์งํฉ๋๋ค. ์งง์ if ๋ฌธ์ ๋ํ ๋ฉ์ง๊ณ ๊นจ๋ํ๋ฉฐ ์งง์ ๊ตฌ๋ฌธ์
๋๋ค.
๊ทธ๋ฌ๋ ์ ๋๋ ์ดํฐ์ ๊ฒฝ์ฐ if-then
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ฌ์ ์ธ ํผ๋์ ์ธ์งํ๊ณ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๊ฐ์ํ ๋ ๋๋ ๋์ํฉ๋๋ค.
x^2 if x % 3 == 0 for x = 1:100 # filtered generator
[ x^2 if x % 3 == 0 for x = 1:100 ] # filtered comprehension
ํํ ๊ตฌ์กฐ๊ฐ
generated_value_expr value_generator_expr => generator_expression
[generator_filter_expr] for_generator_expr => value_generator_expr
์ฆ generator_filter_expr
๋ ํํฐ๋ง๋์ง ์์ ๊ฐ์ generated_value_expr
์ ๋ฌํ๊ธฐ ์ ์ for_generator_expr
์์ ์์ฑ๋ ๊ฐ์ ์ง์ ์ ์ฉ๋ฉ๋๋ค.
์ฌ๊ธฐ์์ ๊ตฌ๋ถ์ด ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
println("positive") if x > 0
TL;DR: ํํฐ๋ง๋ ์์ฑ๊ธฐ์๋ x^2 if x % 3 == 0 for x = 1:100
์์ด์ผ ํ์ง๋ง println("hey") if x > 0
์๋ ๋์ผํ ๊ตฌ๋ฌธ ๋
ผ๋ฆฌ๊ฐ ์ ์ฉ๋์ง ์์ผ๋ฏ๋ก ์งง์ ํ์์ ๊ฒฝ์ฐ if x then y
๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. if ๊ตฌ๋ฌธ. ๋ถ๋ช
ํ ์ฌ๊ธฐ์ ์๋ ๋ ๊ฐ์ง ์์ด๋์ด๋ ์ด์ ์์ ํ ๊ด๋ จ์ด ์์ต๋๋ค.
@H-225 ํนํ end
๊ฐ ์๋ ์ ๋ผ์ธ์์ ์์
์ ์ํํ ๋ ์ด์ํ๊ณ ๊ถ๊ทน์ ์ผ๋ก ์ค๋ฆฌ์์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํธ์ง์(Vim๊ณผ ๊ฐ์)๋ ์กฐ๊ฑด์ด๋ ๋์์ด ๋ฌด์์ด๊ณ ๋ฌด์์ด ์๋์ง ์๊ดํ์ง ์๊ธฐ ๋๋ฌธ์ ํธ์ง์๊ฐ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๊ฒ์ ์ฌ์ ํ โโ์
๋ชฝ์ผ ๊ฒ์
๋๋ค. ์ค์ ๋ก Julia ํ์ ์์ด๋ ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. if
๋ฐ end
$ ์ ๊ฐ์ ํญ๋ชฉ์ ๋ฐฐ์น์ ์ฃผ์ํ์ญ์์ค. Vim์ด ํด๋น ์๋๋ฆฌ์ค์์ end
๊ฐ ํ์ํ์ง ์๋ค๋ ๊ฒ์ ์ธ์ํ๊ฒ ํ๋ ๊ฒ์ ์์ธ์ ์ผ๋ก ์ด๋ ค์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํธ์ง์๋ฅผ ์ฝ๊ฒ ๋ง๋๋ ๊ฒ์ด ๋์์ธ ๊ฒฐ์ ์ ๋ํ ์ข์ ๋
ผ๊ฑฐ๊ฐ ์๋๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
ํ์คํ :-1: ๋์๊ฒ์ if x y
. ๋ด ์์ ๋๋๊ฐ ๊ตฌ๋ฌธ ๋ถ์ํ๊ธฐ ๋ ์ฝ๊ธฐ ๋๋ฌธ์ ๋๋ ๊ทธ๋ณด๋ค if x then y
๋ฅผ ์ ํธํฉ๋๋ค. :stuck_out_tongue_winking_eye:
if ๋ฌธ์๋ ์ผํญ ๋ฌผ์ํ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ ๊ฐ ์์ต๋๊น? ๋ค์์ ์ํํ์ฌ ์ด๋ฏธ if ๋ฌธ์ ๋ชจ๋ฐฉํ ์ ์์ต๋๋ค.
condition ? if_condition_true_eval_expr : nothing
์ฝ๋ก ์ ํฌํจํ์ง ์์ผ๋ฉด if ๋ฌธ์ผ๋ก ๋ง๋ค๋ฉด ๋ฉ๋๋ค.
condition ? if_condition_true_eval_expr
์ด๋ ๊ฒ ํ๋ฉด ์ ํค์๋๋ฅผ ๋์ ํ ํ์๊ฐ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ด ํจ๊ณผ๊ฐ ์์ต๋๊น?
@esproff ํฅ๋ฏธ๋กญ๊ฒ๋ ์ ๋ ๋ฐ๋๋ฅผ ์ ์ํ๋ ค๊ณ ํ์ต๋๋ค. ์ด julep์ if-then ์์ด๋์ด๋ฅผ ํ ์ค์ if-then-else ํํ์์ผ๋ก ํ์ฅํฉ๋๋ค.
if cond then a else b
์ฌ๊ธฐ์ else ์ ์ ์ ํ ์ฌํญ์
๋๋ค. cond ? b : c
๋์ผํ๊ฒ ๋ฎ์์ง ์๋ ์์ต๋๋ค. ๋์๊ฒ ์ด๊ฒ์ C ์คํ์ผ ์ผํญ์์ ๋ฒ์ด๋ ์ฌ๋์ด ์ฝ์ ์ ์๋ ์ฝ๋๋ก ๊ฐ๋ ๊ฒ์
๋๋ค. (์ ํ์คํ condition ? a : nothing
๋ฅผ ์ฌ์ฉํ ์ ์ด ์์ต๋๋ค. ํดํน์ฒ๋ผ ๋ณด์
๋๋ค( nothing
๊ฐ ์ด๋ค ์ ๋งคํ ์ด์ ๋ก ์ค์ํ๊ธฐ ๋๋ฌธ์) ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฝ๊ธฐ์ ํผ๋์ค๋ฝ์ต๋๋ค.
ํ์ง๋ง ๋ฌผ๋ก , ์ ์ฐ๋ฆฌ๋ ์ด ๋ชจ๋ ์์ด๋์ด๋ฅผ ๋์์ ๊ฐ์ง ์ ์์ต๋๊น?
@andyferris ์, Pythonic์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋๋ค. ์ผ๋ง๋ ๊ฐ๊ฒฐํ๊ณ ์ถ์์ง์ ๋ฌ๋ ค ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ํ์๋ค์ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๊ฒฐํจ์ ์ค์์ํ๋ ๊ฒ ๊ฐ์ง๋ง ์์งํ ์ ๋ ํฌ๋ฐํจ์ ์ฌ์ฉํ ํ์๊ฐ ์๋ ํ ์ด๋ ์ชฝ์ด๋ ๋ง์กฑํฉ๋๋ค.
if condition; eval_expr; end
ํ์ง๋ง ์์งํ ๋๋ clunky๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์๋ค๋ฉด ๋ ์ค ํ๋์ ๋ง์กฑํ ๊ฒ์ ๋๋ค.
if condition; eval_expr; end
๋ฌผ๋ก !
๊ทธ ๊ฐ์น๋ฅผ ์ํด ๋๋ x && y ํ๊ธฐ๋ฒ์ ์ข์ํ๊ณ ๊ทธ๊ฒ์ ๋จ์ฉ์ผ๋ก ๋ณด์ง ์์ต๋๋ค.
์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ฒซ ๋ฒ์งธ ๋ฌธ์ด ๊ฑฐ์ง์ด๋ฉด false
๋ฅผ ๋ฐํํ์ง ์๋ ์ฐ์ฐ์ ๊ธฐ๋ฐ ์๋ฃจ์
์ ์ ํธํฉ๋๋ค. ๋๋ a ?: b
๋ฅผ ์ผํญ ์ฐ์ฐ์์ ๋ ์ธ์ ๋ฒ์ ์ผ๋ก ์ข์ํ์ง๋ง ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ด ์ข์ต๋๋ค.
?
์์ด๋์ด๋ #6823์์ ๋งค์ฐ ๊ด๋ฒ์ํ๊ฒ ๋
ผ์๋์์ผ๋ฉฐ ํด๋น ํ ๋ก ์ ๋ค์ ์ฝ์ ๊ฐ์น๊ฐ ์์ต๋๋ค.
๋๋ ๊ทธ ํ ๋ก ์์ ์ฌ๊ธฐ๊น์ง ์์ง๋ง ์ด๊ฒ์ด ๋ ๋์ ๋
ผํ์ ํ ์ ์๋ ๊ณณ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. if a then b
์ :
?
์ฌ์ฉํ๋ ๊ฒ์ ๋ค์ ํผ๋์ค๋ฌ์ธ ์ ์์ง๋ง ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํ ๋ถํํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@EricForgy์ ๋์ํฉ๋๋ค. ์ด์ฉ๋ฉด ๋๋ ์ด ์์ ์์ ๊ทธ๊ฒ๋ค์ ์ต์ํ ์๋ ์์ง๋ง ๋์๊ฒ๋ ์ด๋ฐ ์์ผ๋ก &&
๋ฐ ||
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด Julia, ํนํ ์ค๋ฅ ๊ฒ์ฌ(์: x || throw(y)
). ๊ทธ๊ฒ๋ค์ ๋ชจํธํ๊ฑฐ๋ ์ฝ์ ์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค. ๋ํ x
x && y
๊ฐ false
$๋ฅผ ๋ฐํํ๋ ๊ฒ์ด ์ ์ค์ํ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ด์จ๋ ํจ์์ ๋์์ ์ฌ์ฉ๋์ด์๋ ์ ๋๊ธฐ ๋๋ฌธ์
๋๋ค. , ์ฌ๊ธฐ์ ํจ์์ ๋ฐํ ๊ฐ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
C ์คํ์ผ ์ผํญ์ ๊ฝค ๋์ฒ์ ์์ต๋๋ค. ์ด ๊ตฌ๋ฌธ์ ์ค์ํ๊ฒ ์๊ฐํ๋ ๊ฒ์ ์ํ์๋ง์ด ์๋๋๋ค. ์ผํญ์ด ์์ง๋ง C ์คํ์ผ์ ์ง์ํ์ง ์๋ ๋ด๊ฐ ์๊ฐํ ์ ์๋ ์ ์ผํ ์ธ์ด๋ Python์ด๊ณ FWIW ๋๋ Python ์ผํญ์ ๊ฒฝ๋ฉธํฉ๋๋ค. condition ? action1 : action2
๋ ๊ณต๋ฐฑ์ ์ฌ์ฉํ๊ณ ์ค ๊ธธ์ด๋ฅผ ์ค์ํ๋ ํ ๊ฐ๊ฒฐํ๊ณ ์ฝ๊ธฐ ์ฝ์ต๋๋ค. ๋ ๊ธด ์กฐ๊ฑด๊ณผ ์์
์ ๊ฒฝ์ฐ ๋ค์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
if condition
somelongaction1
else
somelongaction2
end
์ด์จ๋ ๊ฐ๋ ์ฑ์ ์ํด.
then
์ ๊ด๋ จํ์ฌ ์ด ํ ๋ก ์ ์์ ์ธ FWIW๋ ๋ค์ &&
๋ฐ ||
๊ฐ ๋์๊ฒ ๊ด์ฉ์ ์ผ๋ก ๋๊ปด์ง๊ธฐ ๋๋ฌธ์ ๊ตฌํ๋๋๋ผ๋ ์ฌ์ฉํ์ง ์์ ๊ฒ์
๋๋ค. ๋น๋ก if x y
, x ? y
๋๋ x ? y : nothing
์ด์์ ํํธ๋นํธ์์ then
#$ ์ ์ฌ์ฉํฉ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ์ ๋ y if x
๋ฅผ ํจ์ฌ ์ ํธํฉ๋๋ค. ์๋ชป๋ ๋ฐฉ๋ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ง๋ง Ruby ๋ฐ Perl๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ต๋๋ค. ์ํ์ ์ผ์ด์ค ๊ตฌ๋ฌธ์ ์ด๋ฐ ์์ผ๋ก ๋์ด ์์ต๋๋ค.
x && y = z
๊ฐ ๋ด๊ฐ ์์ํ ๋ฐฉ์์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์ํ์ง ์๋๋ค๋ ๊ฒ์ ๊ธฐ์ตํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ &&
๋๋ ||
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ _์ข์_ํ์ง ์์ต๋๋ค. y if x
๋ณด๋ค ์ธ์ง ๋ถํ๊ฐ โโ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค. if x y
์๋ ์ ์ฉ๋ฉ๋๋ค.
IMO, x ? y
_smells_ ๊ตฌ๋ฌธ ์ค๋ฅ์ฒ๋ผ ์ค์ ๋ก ์ ํจํ์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด.
x ?? y
์๋ง๋? x ?: y
๋ x ? x : y
๋ฅผ ์๋ฏธํ๋ GNU C ํ์ฅ์ด๋ฏ๋ก ??
๋ฐ ?:
๋ &&
๋ฐ ||
์ ์ฐ์ ์์๊ฐ ๋ฎ์ ๋ฒ์ ์ผ ์ ์์ต๋๋ค.
์ ํธํ๋ ์์: y if x
== x ?? y
< if x then y
< x && y
< x ? y
< if x y
.
FWIW. ?
, &&
๋ฐ ||
๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ณ ๋ช
ํํ๊ฒ ๊ตฌ๋ถํ๋ ๊ฒ์ ์ ํธํ์ง๋ง cond ? expr
๊ตฌ๋ฌธ์ด &&
๋ณด๋ค ๋ ๋ช
ํํ ์ ์์ต๋๋ค.
๋๋ goodcondition || return
์ ํ์ ํ๋ฆ์ ์์ฃผ ํ๋ ๊ฒ์ ์ข์ํ๋๋ฐ, ์ด๋ if ๋ฌธ์ผ๋ก ์ฝ์ง ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์๊ณ ์ถ์ง ์๋ค (๋๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ง ์๋ ๊ดด๋กญํ)
:
์๋ ์ผํญ์ ๊ฒฝ์ฐ else
์กฐ๊ฑด ์์ด ๊ฐ๊ฒฐํ if
/ elseif
๋ธ๋ก์ ํ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
x==5 ? f1() :
x==6 ? f2()
์ด๊ฒ์ ์ค์์น ์ ํ ๋ฌธ์ผ๋ก ํ์ฅํ๋ ๊ฒ์ ์์ํ ์ ์์ต๋๋ค.
match x:
5 ? f1() :
6 ? f2()
๊ฐ๋ ์ฑ ์ธก๋ฉด์์ ๋ค๋ฆ ๋๋ค. ๋ง์ ์งง์ ์กฐ๊ฑด/๋์์ ๊ฒฝ์ฐ ๋ช ํํ ๊ตฌ๋ถ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ ์ค์ ์กฐ๊ฑด/๋์์ ์ ๋ ฌํ ์ ์๋ ๊ฒ์ด ํจ์ฌ ๋ ์ฝ๊ธฐ ์ฝ์ต๋๋ค(๊นจ๋ํ ๊ฐ๊ฒฉ!!).
์์ฑ๊ธฐ์ ๊ฒฝ์ฐ $ if
์ฉ๋ ๋ณ๊ฒฝ๋ณด๋ค where
๋๋ when
์ ์ ํธํฉ๋๋ค. ์กฐ๊ฑด๋ถ๊ฐ ์๋ ํํฐ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
x = [i^2 for i in 1:10 when i%2 == 0]
์ด๊ฒ์ด x = [i^2 for i in filter(..., 1:10)]
๋ฅผ ์๋ฏธํ๋ ๊ฒ์ด ๋ ๋ช
ํํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด์ ๋ํด ๋
ผ์ํ ์ดํ๋ก ์ ๋ ๋ ์ด์ if condition then action
์ ๋ฐ๋ํ์ง ์์ ๊ฒ์์ ์๋ ค๋๋ฆฝ๋๋ค.
Julia๋ function
๋ฐ end
๋ฑ๊ณผ ๊ฐ์ด ๋ "์ฅ๋ํ" ์ชฝ์ ๊ธฐ๋๋ ๊ฒฝํฅ์ด ์์ผ๋ฏ๋ก ์ ์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฃผ๋ณ์ ๋๊ดํธ๋ฅผ ์ถ๊ฐํด์ผ ํ๋ ๊ฒ๋ ์ฝ๊ฐ ์ง์ฆ๋ฉ๋๋ค. condition && action
๊ตฌ๋ฌธ ์ฌ์ด๋ฅผ ์๋ค๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ ํํ์์
๋๋ค.
Perl/Ruby ๊ตฌ๋ฌธ "action if condition"๊ณผ ๊ด๋ จํ์ฌ: ์ ๋ ์ด ๊ตฌ๋ฌธ์ ์ ๋ง ์ข์ํ๊ณ , ์๋ชป ์ฌ์ฉํ๋ฉด ๊ฐ๋ ์ฑ์ ์ค์ผ ์ ์๋ค๋ ๋ฐ ๋์ํ์ง๋ง ๋๋ก๋ ๊ฐ๋ ์ฑ์ _์ฆ๊ฐ์ํต๋๋ค_.
์๋ฅผ ๋ค์ด:
throw(DomainError()) if some_condition || some_other_condition && so_on
"throw domain error if"๋ฅผ ์ฝ์ ํ ๋ค์ ๋ด์ฉ์ด ์ ๋ ฅ์ ๋ํ ์จ์ ์ฑ ๊ฒ์ฌ๊ฐ ๋ ๊ฒ์์ ์ด๋ฏธ ์๊ณ ์์ต๋๋ค. ์กฐ๊ฑด๋ถ์ ์ธ๋ถ ์ฌํญ์ด ์ค์ํ์ง ์์ ๊ฒฝ์ฐ ๋ค์ ์ค๋ก ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
์์ ๋ฌธ์ฅ์ ์ด๋ฌํ ๊ตฌ์ฑ์ด ์์ฐ์ด์์ ์ด๋ป๊ฒ ์์ฃผ ๋ฐ์ํ๋์ง์ ๋ํ ์์ ๋๋ค. "๋ค์ ์ค๋ก ๊ฑด๋๋ฐ๊ธฐ" ๋์์ด ๋จผ์ ์ค๊ณ ๋ ์ค์ํ "๊ด์ฌ์ด ์์ผ๋ฉด"์ด ์ข ์์ ์ ์ต๋๋ค. ๋ค์ ๋งํ์ง๋ง, ๋ ์๋ ์ค์ ๋ก ๋ฌธ์ฅ์ ๋๊น์ง ์ฝ์ง ์๊ณ ๋ "๋ง์ฝ"์ด๋ผ๋ ๋จ์ด ๋ค์ ๋ฌด์์ด ์ฌ์ง ๋๋ต์ ์ผ๋ก ์ถ์ธกํ ์ ์์ต๋๋ค.
(์ ๊ฐ ์๊ฐ๋๋ฉด ์๊ธฐ ์ฐธ์กฐ ์์ ๋ฌธ์ฅ๋ ๋๋ฆฌ๊ฒ ์ต๋๋ค.)
์ค๋๋ Perl ์์ผ๋ก์, ๋๋ ์ด ๊ตฌ๋ฌธ์ ๊ณต๊ฐํ์ง๋ง Perl ๋ฐฐ๊ฒฝ์์ ์ค์ง ์์ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ๋ ์ด๋ ค์ด ํ๋งค๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฐฌ์ฑํ๋ ํ ๊ฐ์ง ์ฃผ์ฅ์ ๊ทธ๊ฒ์ด ๋ดํฌ์์ ํํฐ ๊ตฌ๋ฌธ๊ณผ ์ผ์นํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ ์ฃผ์ฅ์ ํ๊ฐ ์์๊ฐ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ด ์๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ๊ฒ์ด ์ด์ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ฌผ๋ก ์ดํด๋ ฅ๋ ์ ํํ ๊ทธ๋ฌํ๋ฏ๋ก ๐คทโโ๏ธ
๋์๊ฒ ๊ด๋ จ ์ง๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ถ๊ธฐ ๋๋ ํํฐ๋ง์ ์ผ๋ฐํํ๊ณ ์์ต๋๊น? ์ด๊ฒ์ ๋ถ๊ธฐ if
์๋ฏธ๋ก (๋ฐ ๊ตฌ๋ฌธ)์ ์ผ๋ฐํ์ด๋ฏ๋ก ํด๋น ๊ตฌ๋ฌธ์ด ์ด๋ฏธ ํํฐ๋ง์ ๋ํ๋ด๋ ๊ฒฝ์ฐ ์ด ๋ชฉ์ ์ ์ํด ์ดํด/์์ฑ๊ธฐ์์ ๊ตฌ๋ฌธ์ ์ฐจ์ฉํ๋ ๊ฒ์ ๋ถํํ ์ผ์
๋๋ค.
(๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ์ ๋ฉ์ง .
๊ตฌ๋ฌธ๊ณผ ๊ฐ์ ํํฐ๋ง์ ์ํ ๋ช ๊ฐ์ง ๋ฉ์ง ๊ตฌ๋ฌธ์ ์ํฉ๋๋ค. ์์ ์์ ์ ์ค๋ช
ํ๊ธฐ ์ํด map
- filter
๋ f.(a) if g.(a)
์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค.
f(x) for x in a # lazy map
f(x) for x in a if g(x) # lazy map - filter
x for x in a if g(x) # lazy filter where `f` is `identity`
f.(a) # map / broadcast
f.(a) if g.(a) # like a map/broadcast - filter operation
a if g.(a) # like the above where `f` is implicitly `identity`
[1,2,3] if [true, false, true] == [1, 3] # or something... here we simply make `if` an infix operator for filtering
์ฃผ์ ์์ ํฌ๊ฒ ๋ฒ์ด๋์ ์ฃ์กํฉ๋๋ค. ์์ ๋ด์ฉ์ด ์ข์ ์๊ฐ์ธ์ง ํ์ ํ ์ ์์ง๋ง ํํฐ๋ง ์๋ฏธ ์ฒด๊ณ๊ฐ ์๋ ์ดํด ํํฐ๋ง if
๊ตฌ๋ฌธ์ ๋ ๋ค๋ฅธ ์ ์ฌ์ ์ฌ์ฉ์ด ์์ ์ ์๋ค๋ ์ ๋ง ์ง์ ํ๋ฉด ๋ฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก - ์์ @tbreloff ์ ๊ด์ฐฐ์ ?
๋ ๊ฐ์ฅ ๊ฐ๊ฒฐํ ๊ตฌ๋ฌธ์ด๋ฉฐ(์ด ์ค๋ ๋์ ์์ ์ ๊ฐ๊ฒฐํ ๊ตฌ๋ฌธ์ ๋ง๋๋ ๊ฒ์
๋๋ค) ํญ์ if
์ ๋๋ ์ดํฐ ํํฐ๋ง์ ์ํ ๋ค์ ๋๋ผ์ด ์ ํ์
๋๋ค.
@StefanKarpinski ๋ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
Perl/Ruby ์คํ์ผ์ if/for ์์ ์ ๊ตฌ๋ฌธ์ ์ด๊ฒ๊ณผ ๋ ์ ์์ผ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค์ ๋งํด:
julia println("positive") if x > 0 # conditional execution x^2 for x=1:100 # generator [ x^2 for x=1:100 ] # comprehension x^2 if x % 3 == 0 for x = 1:100 # filtered generator [ x^2 if x % 3 == 0 for x = 1:100 ] # filtered comprehension
๊ทธ๊ฒ์ ๋ํ end ๊ตฌ๋ฌธ์ด ์๋ if-then์ด ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๋ค๋ฅธ ์ธ์ด์์ ์ ๋ก๊ฐ ์๋ค๋ ์ด์ ์ด ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฌธ๋ฒ์๋ ๋ ์ข์ ๊ฒ์ ๋๋ค.
[x^2 if x % 3 == 0 for x = 1:100]
๋ ๋ค์๊ณผ ๊ฐ์์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
[(x^2 if x % 3 == 0) for x = 1:100]
```
Then `for` stay's in infix position which is currently an error. Of course we can change its meaning because of leading `[` but it would not work as generator:
```julia
x^2 if x % 3 == 0 for x = 1:100
[x^2 if x % 3 == 0 for x = 1:100]
๋ ๋ค์๊ณผ ๊ฐ์์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํํฐ๋ง๋ ์์ฑ๊ธฐ๊ฐ ์๋๋๋ค. 2 if x
๋ 2
x
$2$#$๋ฅผ ๋ฐํํ์ง๋ง x
๊ฐ ๊ฑฐ์ง์ผ ๋๋ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก nothing
์
๋๋ค. ๊ทธ๋์ ๊ทธ๊ฒ์ ์ซ์์ ์๋ฌด๊ฒ๋ ์๋ ๋ฐฐ์ด์ ์ค ๊ฒ์
๋๋ค. ์ด๊ฒ์ด ๋ถ๋ถ์ ์ผ๋ก if
๊ฐ ํํฐ๋ง๋ ์์ฑ๊ธฐ ๊ตฌ๋ฌธ์์ for
๋ค์์ ์์ผ ํ๋ ์ด์ ์
๋๋ค.
๊ทธ๋ ๋ค๊ฐ ๋ง์. ์๋ง๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํด์ผ ํฉ๋๋ค.
[for x = 1:100 x^2 if x % 3 == 0]
Afaics, ์ด๊ฒ์ ๊ดํธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ ํจํ ๊ตฌ๋ฌธ ๋ถ์์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฉ์ง๋๋ค!
์๊ฐ๋งํด๋...
[ for x = 1:100 if x % 3 == 0 push x^2]
for x = 1:100 if x % 3 == 0 push x^2 # other keyword could be used, e.g. yield
์ด๊ฒ์ ์์ฐ ๊ตฌ์กฐ์ ๋ ์ ์ฌํฉ๋๋ค.
for x=1:100
if x%3==0
push!(somearray, x^2)
end
end
๋ค๋ฅธ ๊ฒ์ ๋ณด๋ค๊ฐ ์ด jule์ ๋ค์ ๋ณด์์ต๋๋ค.
๋๋ ์ฌ์ ํ if a then b
ํ ์ค ํ์๊ณผ ๊ฐ์ ๊ฒ์ ์ํฉ๋๋ค. ์ค๋ฆฌ์ ๋์ฒด a && b
๋ฅผ ๋ช ๋
๋์ ์ฌ์ฉํ ํ์๋ ์๋นํ ์ฝ์ ์ ์๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์์ด ๋ฌธ์ฅ์ผ๋ก ์ง์ ์ฝ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋ํ ์ ์ฌ์ฉ์์๊ฒ a && b
๊ด์ฉ๊ตฌ๋ฅผ ์ค๋ช
ํด์ผ ํ๋ ํ์์ฑ์ ์๋ช
ํ๊ณ ์กฐ๊ธ ๋ ๊ธด ๋์ฒด ๊ตฌ๋ฌธ์ ๊ฐ์ง ์ ์์ ๋ ์ผ์ข
์ ๋นํฉ์ค๋ฌ์ด ์ผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์์ด ๋ฌธ์ฅ์ผ๋ก ์ง์ ์ฝ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค
a && b
๋ "if then also do b"์์์ ๊ฐ์ด "a ๋ฐ b"๋ก ์ฝ์ต๋๋ค.
a || b
๋ "a๋ true์ฌ์ผ ํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด b๋ฅผ ์ํ"์์์ ๊ฐ์ด "a ๋๋ b"๋ก ์ฝ์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ดํ๋ ์ผ์ ์๊ณ ๊ฐ๊ฒฐํจ์ ์ํด ๊ฐ๋ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ด๊ฐ ํ ์ ์๋ ํ ์๋ํฉ๋๋ค(์ธ๊ธ๋ ๊ฒ์ฒ๋ผ, ์ง๊ธ ๋ช ๋ ๋์) ์ ๋ "and b"๋ฅผ ํ ๋ฌธ์ฅ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค. ๋งค๋ฒ ๊ฐ๋ฒผ์ด ์ธ์ง ๋ถ์กฐํ์ผ ๋ฟ์ ๋๋ค.
๋์กฐ์ ์ผ๋ก ๋๋ ํญ์ "๋๋ b"๊ฐ ์๋นํ ์ฝ๊ธฐ ์ฝ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
ํฅ๋ฏธ๋กญ๊ฒ๋ ์ค๋ ์ง์ฅ์์ ์ด๊ฒ์ ๋ค๋ฅธ ์ธก๋ฉด์ด ๋ ๋ฒ ๋ํ๋ฌ์ต๋๋ค.
์์นจ์ if ... end
&&
๋ฅผ ์ฌ์ฉํ๋ Julia PR์ด ์์๊ณ ์ฝ๋ ๋ฆฌ๋(PR ๊ฒํ ์)๋ก์ ์ถ๊ฐ ๋
ธ๋ ฅ์ด ํ์ํ๋ค๋ ์ ์ ์ง์ ํ์ต๋๋ค. ) ์คํ๋๊ฑฐ๋ ์คํ๋์ง ์์ ์ ์๋ ๋ถ๊ธฐ. ์๋ b!
๊ฐ ๊ทน๋๋ก mutate-y์ธ a() && b!()
ํ์์ด์์ต๋๋ค. (์ด ๊ฒฝ์ฐ b!()
๊ฐ ํ์ผ ์์คํ
์์ ํ์ผ์ ์ด๋ํ๊ฑฐ๋ ์ญ์ ํ์ฌ ์ฆ์ ์ํํด ๋ณด์์ง๋ง, ๋ด ๋๋๋ ์ด๊ฒ์ด !a()
๋๋ง ๋ฌธ์ ๊ฐ ๋๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด ๊ฒฝ์ฐ ์ค์ ๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๋ณดํธ๋์์ต๋๋ค).
์คํ์ Julia๋ฅผ ๋ชจ๋ฅด๋ ๋ค๋ฅธ ์ํํธ์จ์ด ์์ง๋์ด๋ ์น๊ตฌ๋ค๊ณผ ์์ด๋ก ๋งํ ๋ ๋๋๋ก " a
์
๋๊น ์๋๋ฉด b
์
๋๊น?"๋ผ๋ ํ์์ ์ง๋ฌธ์ ๋๋ตํ ๊ฒ์ด๋ผ๊ณ ์ง์ ํ์ต๋๋ค. "๋ผ๋ ๋๋ต๊ณผ ํจ๊ป "๋ค". ๊ทธ์ ์ํํธ์จ์ด ์์ง๋์ด ์น๊ตฌ๋ค๋ง ์ดํดํ ์ ์๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ ํ ์ดํดํ์ง ๋ชปํ ๊ฒ์
๋๋ค. ๋ณดํต ์ฌ๋๋ค์ ๊ทธ๋ ๊ฒ ์๊ฐํ์ง ์์ต๋๋ค. ๐ ์ด๊ฒ์ ๋ค์ ๋ด ๋ค์ ์์ ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค(ํธ์ง: ๊ทธ๋ฆฌ๊ณ ๋งํ์ด์ผ ํ๋ ๊ฒ์ ์์ Stefan์ ์๋ต๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ๋ง์ ์ฌ๋๋ค์๊ฒ ๊ทธ๋ฐ ์ผ์ด ๋ฐ์ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค).
์ด ๋ฌธ์ ์ ๋ํ ๋์ ์
์ฅ์ &&
(๋๋ ||
)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋ ฅํ PL ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ์ฌ๋๋ค๋ง ์ฝ์ ์ ์๋ ๋ถ๊ธฐ์ ๋ํ ์งง์ ๊ตฌ๋ฌธ์ด๋ฉฐ ์ฌ์ง์ด ์ฝ๊ฐ์ ์ถ๊ฐ ์ธ์ง/์๊ฐ ๋ถํ(๋จ์ํ &
๋ &&
๊ตฌ๋ณ). ์ฌ๋ฌ ๋ถ์ผ์ ํ(๊ณผํ์์ ์ํํธ์จ์ด ์์ง๋์ด๊ฐ ํผํฉ๋ ํ)์์ ์ผํ ๋ ํ์ ์ ๋ฐ์ด ํผ๋์ค๋ฌ์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ํํธ์จ์ด ์์ง๋์ด๋ก์๋ ๋
ผ๋ฆฌ์ ์ธ &(::Bool, ::Bool) --> Bool
์ ๋ถ๊ธฐ &&(::Bool, ::Any) --> Any
์ฌ์ด์ ์ด์ํ ์ฐ๊ฒฐ์ด ๋์ด์ ธ ์๋ค๊ณ ์๊ฐํฉ๋๋ค(์, ํ์๋ ์ค์ ๋ก ๊ธฐ๋ฅ์ด ์๋์ง๋ง ์ ์์ ์ ์ดํดํ์๊ธฐ ๋ฐ๋๋๋ค). . ์ ํ ์์ฒด์๋ ๋ณ๋๋ก Julia์์๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์๊ฐ "๊ธฐ๋ฅ์ "์ผ ๊ฒ์ผ๋ก ์์ํ๋ ๋ฐ๋ฉด ํ์์ ํ์์ ํนํ ๋ ๋ฒ์งธ ํํ์์ ์ ์ฌ์ ์ธ ๋ถ์์ฉ์ ์๋ฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
ํธ์ง: ์ด๊ฒ์ ๋ํด ๋ ์๊ฐํด๋ณด๋ฉด, ์ฌ๊ธฐ์ ๋ฌธ์ ๋ ์ ์ ์ผ๋ก ๋ถ์์ฉ๊ณผ ํ๋ก๊ทธ๋จ ํ๋ฆ์ ๊ดํ ๊ฒ์
๋๋ค. &&
&
์ ์ต์ ํ๋ผ๋ ๊ฒ์ ๋ชจ๋ ์ฌ๋์ด ์ดํดํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค. ์์ํ์ง ์์ ํํ์ ๊ฒฝ์ฐ ์์ ํ ๋ค๋ฅด๋ค๋ ์ ์ ์๋ฆฝํ๊ธฐ๊ฐ ์๋์ ์ผ๋ก ์ด๋ ต์ต๋๋ค.
์ด๋ค ๊ฒฝ์ฐ์๋ if a then b
"์ฐ์ ์์"๊ฐ ๋ ๋ช
ํํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
guard && c += 1 # probably an error because it's parsed as (guard && c) += 1
guard && (c += 1) # parentheses required
if guard then c += 1 # no ambiguity here
๋ํ ํธ์ง๊ธฐ์์ ๊ตฌ๋ฌธ ๊ฐ์กฐ ํ์๋ ํํ์ ์์ ๋ถ๋ถ์ if
๋ฅผ ํ์ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋ํ
end
๊ตฌ๋ฌธ์ด ์๋if
-then
์๋ ์๋ ๊ฒ ๊ฐ์ ๋ค๋ฅธ ์ธ์ด์ ์ ๋ก๊ฐ ์๋ค๋ ์ด์ ๋ ์์ต๋๋ค.
if-then-else
๊ตฌ๋ฌธ์ ๋ํ _๋ง์ ์ ๋ก๊ฐ ์์์ ์ ์ํด์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ตฌ๋ฌธ์ ์์ ๋ชจ๋ ์ธ์ด์์ ๋จ์ผ ๋ผ์ด๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋๋ ํ ์๊ฐ ๋์ ์ด ํ ๋ก ์ ์๊ณ ์์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ ์๋์๋ค๋ฉด ์ฉ์ํด ์ฃผ์ญ์์ค.
'&&' ๋ฐ '||'์ ๋จ๋ฝ ์ต์ ์ ์ข์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ธ๋ฏธ์ฝ๋ก ์์ด ํ ์ค์ ๊ฐ๋จํ if ๋ฌธ์ ์ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋จ๋ฝ์ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ๋ง๋๋ ์์ ํ๋ก๊ทธ๋จ์ฒ๋ผ ๋ณด์ ๋๋ค. humam์ผ๋ก์, ์ด์ ์ ๋ณธ ์ ์ด ์๊ฑฐ๋ ๋ ๋ฒ์งธ ํํ์์ด ๊ผญ ํ์ํ ๋๋ง ํ๊ฐ๋๋ค๋ ์ฌ์ค์ ์์ง ์๊ณ ์๋ ํด๋น ๊ตฌ๋ฌธ์ ์ดํดํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํ๊ธฐ ์ด๋ ต์ต๋๋ค. (์ธ๊ฐ์ผ๋ก์) ์ง๊ด์ ์ด์ง ์์ ์ฝ๊ธฐ๋ ๋จ๋ฝ๊ณผ ํจ๊ป ์๊ฐ์ ๋ฐ ๋ ผ๋ฆฌ์ ๋ถ์์ ์ฑ์ผ๋ก ์ธํ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๊ฒ์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ์๊ณ ๋๋ฉด ์ฝ๊ธฐ๊ฐ ํ์ ์ด์์ผ๋ก ์ด๋ ค์ธ ์ ์์ต๋๋ค.
๋ด๊ฐ ํ๋ฆฌ์ง ์์๋ค๋ฉด ๋ ๋ฌธ์ ๋ชจ๋ ๋งคํฌ๋ก๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค.
@if ์กฐ๊ฑด ๊ฒฐ๊ณผ
๋ถ์ ์ ! ์กฐ๊ฑด ์ ๋๋ @ifnot ๋งคํฌ๋ก. ์ ๋ง ๊ทธ๋ฐ๊ฐ์, ์๋๋ฉด ์ปดํจํฐ๊ฐ ๋ชจํธํ์ง ์๊ณ , ์ฌ๋์ด ์ฝ๊ธฐ ์ฝ๊ณ , ๋ชจ๋ ๊ฒ์ด ํ ์ค์ ์์ต๋๊น?
๊ทธ๊ฒ์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ์๊ณ ๋๋ฉด ์ฝ๊ธฐ๊ฐ ํ์ ์ด์์ผ๋ก ์ด๋ ค์ธ ์ ์์ต๋๋ค.
^^ ์ด์ ์ ๊ทน ๋์ํฉ๋๋ค.
@if ์กฐ๊ฑด ๊ฒฐ๊ณผ
๊ฑฐ์ ๋์ผํ๊ฒ ๋ณด์ด๋ ๋ค์์ ์ด๋ฏธ ์ํํ ์ ์์ต๋๋ค.
if condition result end
๋ค์์ ์ ์ฒด if-then-else ๊ตฌ๋ฌธ์ ๋ํ ๋งคํฌ๋ก์
๋๋ค. ๊ทธ๋ฌ๋ if
๋ฐ else
๋ ์์ฝ๋ ํค์๋์ด๋ฏ๋ก ๋งคํฌ๋ก๋ ๋์ If
, Then
๋ฐ Else
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
syntax_error() = error("Valid syntax is either `<strong i="20">@If</strong> cond Then ex` or `<strong i="21">@If</strong> cond Then ex1 Else ex2`")
function If(exprs...)
n_args = length(exprs)
if n_args == 3
if exprs[2] != :Then
syntax_error()
end
ex = quote
if $(exprs[1])
$(exprs[3])
end
end
elseif n_args == 5
if ( exprs[2] != :Then ) || ( exprs[4] != :Else )
syntax_error()
end
ex = quote
if $(exprs[1])
$(exprs[3])
else
$(exprs[5])
end
end
else
syntax_error()
end
return esc(ex)
end
macro If(exprs...)
If(exprs...)
end
foo(x) = <strong i="22">@If</strong> x > 0 Then println("greater than zero") Else println("less than zero")
์ฌ๊ธฐ์์ foo
๊ฐ ์๋ํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
julia> foo(3)
greater than zero
julia> foo(-3)
less than zero
๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์ ํธํฉ๋๋ค.
x0 = 1
x1 = 2
x3 = 3 when y>0 # y>0 is evaluated first
x4 = 4
when ์ =๋ณด๋ค ์ฐ์ ์์๊ฐ ๋ฎ๊ณ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์๋ํฉ๋๋ค.
๊ฑฐ์ ๋์ผํ๊ฒ ๋ณด์ด๋ ๋ค์์ ์ด๋ฏธ ์ํํ ์ ์์ต๋๋ค.
if condition result end
๋ ๋ชฐ๋์ด! ๋๋ ํญ์ ์ค ๋ฐ๊ฟ์ด์๋ ๊ณณ์ ์ธ๋ฏธ์ฝ๋ก ์ด ํ์ํ๋ค๊ณ ํญ์ ์๊ฐํ์ต๋๋ค. ๊ทธ๋์ ์ ๊ฒฝ์ฐ์๋ ๊ตฌ๋ฌธ
if condition result end
&&
๋ฅผ ์์ ํ ์ค๋ณต ์ฌ์ฉํ๋ฏ๋ก ๋ฌธ์ ๊ฐ ์์ต๋๋ค! ๋ค์์ ์ํํ ์๋ ์์ต๋๋ค.
if condition result_1 else result_2 end
์ด ๊ฒฝ์ฐ end
ํค์๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๋งคํฌ๋ก๋ฅผ ๋ง๋๋ ๊ฒ๋ณด๋ค ์ฝ์ต๋๋ค. ํ์ง๋ง ์๊ฐ์ ๋ด์ด ๋ง๋ค์ด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ^_^ ๋ฌธ์์์ ํ ์ค if ๋ฌธ์ ๊ฐ๋ฅ์ฑ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ ์๊ฐ์
๋๊น? ?If<enter>
๋ฅผ ํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ด๋ฏธ ๊ฝค ๋ง์ ์ค ์์์ต๋๋ค... ํ์ง๋ง ์ด ๊ธฐ๋ฅ์ ๋ ๋ง์ด ์๋ ค์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
์๋์ ํ ๋ก ์ ์กด์คํ์ฌ "If x then y"๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ์ฐฌ์ฑํ์ง๋ง "if"์ ํ ์ค ๋ฒ์ ์์๋ ์ฝ๊ฐ ์ค๋ณต๋ฉ๋๋ค. ํ์ง๋ง ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋น์ ์๊ฒ ์๋ฏธ๊ฐ ์๊ฒ ์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ค๋ฅธ ์ธ์ด๊ฐ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ทจํ๊ธฐ ๋๋ฌธ์ ์ ๊ฐ ์์์ผ ์๋ ์์ง๋ง
println("positive") if x > 0
์ ๊ฐ์ด ์กฐ๊ฑด ์์ ์ค๋ ๋์์ด ์ ๋ง ์ด์ํ๋ค๋ ๊ฒ์ ํญ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ดif x > 0 println("positive") end
๋ณด๋ค ๋ ๊ฐ๊ฒฐํ๋ค๊ณ ์๊ฐํ์ง๋ง ์ ์ด๋ ๋์๊ฒ๋ ๊ฐ๋ ์ฑ์ ํฌ์ํด์ผ ํฉ๋๋ค.๋๋ ๊ทธ๊ฒ์ ๋ํ์ฒ๋ผ ์๊ฐํ๋ค.
Julia: "๋ฌธ์์ด์ ์ถ๋ ฅํ๊ฒ ์ต๋๋ค..."
ํด๋กค๋: "๊ต์ฅํด!"
Julia: "...ํ์ง๋ง ์ด๋ค ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ ๊ฒฝ์ฐ์๋ง."
ํด๋กค๋: "์ค. :("
~ ๋
Julia: "์ด๋ค ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ฉด ๋ฌธ์์ด์ ์ถ๋ ฅํ๊ฒ ์ต๋๋ค."
ํด๋กค๋: "์์์ด, ์ข์."