Julia: ๋ฏธ๋‹ˆ ์ค„๋ ™: x์ด๋ฉด y

์— ๋งŒ๋“  2016๋…„ 05์›” 16์ผ  ยท  53์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: JuliaLang/julia

๋‹ค์–‘ํ•œ ํ† ๋ก ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ๋ฌธ์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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_ ์ˆ˜์ค€์—์„œ ๋ณดํ˜ธ ๊ตฌ๋ฌธ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‹ค๋ฅธ ์–ธ์–ด๊ฐ€ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ œ๊ฐ€ ์†Œ์ˆ˜์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ println("positive") if x > 0 ์™€ ๊ฐ™์ด ์กฐ๊ฑด ์•ž์— ์˜ค๋Š” ๋™์ž‘์ด ์ •๋ง ์ด์ƒํ•˜๋‹ค๋Š” ๊ฒƒ์„ ํ•ญ์ƒ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด if x > 0 println("positive") end ๋ณด๋‹ค ๋” ๊ฐ„๊ฒฐํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ ์–ด๋„ ๋‚˜์—๊ฒŒ๋Š” ๊ฐ€๋…์„ฑ์„ ํฌ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋Œ€ํ™”์ฒ˜๋Ÿผ ์ƒ๊ฐํ•œ๋‹ค.

Julia: "๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค..."
ํ•ด๋กค๋“œ: "๊ต‰์žฅํ•ด!"
Julia: "...ํ•˜์ง€๋งŒ ์–ด๋–ค ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ."
ํ•ด๋กค๋“œ: "์˜ค. :("

~ ๋Œ€

Julia: "์–ด๋–ค ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜๋ฉด ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค."
ํ•ด๋กค๋“œ: "์•Œ์•˜์–ด, ์ข‹์•„."

๋ชจ๋“  53 ๋Œ“๊ธ€

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 ์— ๋Œ€ํ•ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š” ์ :

  1. ์ƒˆ๋กœ์šด then ํ‚ค์›Œ๋“œ๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
  2. if x then y if x y end ๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด ๋” ์งง์Šต๋‹ˆ๋‹ค. x && y ๋Š” ๋” ์งง์Šต๋‹ˆ๋‹ค.
  3. 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๋ณด๋‹ค ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ•™์  ์ผ€์ด์Šค ๊ตฌ๋ฌธ์€ ์ด๋Ÿฐ ์‹์œผ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

image

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"์˜ ํ•œ ์ค„ ๋ฒ„์ „์—์„œ๋Š” ์•ฝ๊ฐ„ ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์žˆ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰