ããŸããŸãªè°è«ã§ã次ã®ãããªæ§æãèš±å¯ããããšãææ¡ãããŠããŸãã
if x then y
çã圢åŒã®ãifãã¹ããŒãã¡ã³ããšããŠãããã³äžè¬çãªãã®ã®ä»£æ¿ãšããŠïŒ
x && y
ç絡ãã&&
æŒç®åãå©çšããŠy
ãæ¡ä»¶ä»ãã§å®è¡ããæ§æïŒ y
ã«ã¯ä»ã®å¯äœçšãå«ãŸããŠããããšãå€ããå¿
ãããBool
ãè¿ããšã¯éããŸããïŒã
ãã®if-then
æ§é ã®äž»ãªå©ç¹ã¯ãã³ãŒããèªã¿ãããã &&
ã®æªçšã«äŸåããããšãå°ãªãã end
ãå¿
èŠãšããªããifãã¹ããŒãã¡ã³ããã©ãŒã ãæ£åŒã«å«ããããšã§ããããŒã¯ãŒãã
å æ¥ããã®æ§æãïŒ550ãå®è£ ããããã®äŸ¿å©ãªæ段ãæäŸããããšã«æ°ã¥ããŸãããããã¯æ¬¡ã®ããã«ãªããŸãã
A = [if x % 2 == 0 then f(x) for x in 1:10]
if-then
ã¯end
ããŒã¯ãŒããå¿
èŠãšããªããšããäºå®ã«äŸåããŠããŸããããã¯ãPythonã¹ã¿ã€ã«ã®ã¬ãŒãã䜿çšããå Žåã§ããäœããã®åœ¢ã§å¿
èŠã«ãªãå¯èœæ§ããããŸãã
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_ã¬ãã«ïŒPythonã§ãèš±å¯ããããã®ãšäžèŽããïŒã ãã§ãªãã_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
ãããç°¡æœã ãšæããŸãããå°ãªããšãç§ã«ãšã£ãŠã¯ãèªã¿ããããç ç²ã«ãªããŸãã
ç§ã¯ãããäŒè©±ã®ããã«æããŸãïŒ
ãžã¥ãªã¢ïŒãæååãå°å·ããŸã...ã
ããã«ãïŒããããïŒã
ãžã¥ãªã¢ïŒã...ããããäœããã®æ¡ä»¶ãæºããããå Žåã«éããŸããã
ããã«ãïŒãããã:(ã
察
ãžã¥ãªã¢ïŒãäœããã®æ¡ä»¶ãæºããããå Žåãæååãå°å·ããŸããã
ããã«ãïŒããªãŒã±ãŒããã£ãããã
@ararslan ïŒåæããŸãããããããRubyãšPerlã®å
è¡æè¡ã«ããããããããã®æ©èœãJuliaã«ãªãçç±ã®1ã€ã§ãã ãã ãããžã§ãã¬ãŒã¿ãŒãšå
å
è¡šèšã®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
æ§æã§ãã ãyuckïŒããããããæµãã«ã€ããŠããªããä»äœãæå³ããŠããã®ãããããŸãã ããã¯çã«ããªã£ãŠããã 説æããŠãããŠããããšãïŒ
ã§ããã®ã¯å€ã ããã
x^2 if x % 3 == 0 for x = 1:100
ãš_ã§ããªã_
println("positive") if x > 0
ïŒ
ãã¹ãŠã®è¯ãç¹ã
ç§ã¯å®éã @ StefanKarpinskiãæåã®ã³ã¡ã³ãã§æåã«ææ¡ããæ§æãæ¬åœã«å¥œãã§ãã ç§ã¯äž»ã«æ¡ä»¶ä»ããžã§ãã¬ãŒã¿ãŒã«èå³ããããããŒãã¹ãšããŠããäžè¬çãªçã圢åŒã®_if_-formã䜿çšããŸãã
ãžã§ãã¬ãŒã¿ãŒã«é¢ããŠã¯ã if
ïŒãŸãã¯where
-ããã«ã€ããŠã¯æèŠããããŸããïŒãç¯å²ã®äžéšãšããŠèªãã§ããŸãã...ããã¯ã€ãã¬ãŒã¿ãŒ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
ããããç§èŠããã¯ããã«åŸã
x^2 if x % 3 == 0 for x = 1:100
ããããnothing, nothing, 9, nothing, nothing, 36, ...
ãæŸåºããã¯ãã§ã
æåŸã«ãçç¥åœ¢ã®if
æ¡ä»¶ãæ¡çšããå Žåã @ ararslanã®æåã®æçš¿ã§æŠèª¬ãããŠããçç±ã«ãããã¹ããŒãã¡ã³ãã®åã®æ¡ä»¶ã«æ祚ããŸããããã¯ãã³ãŒããèªãéã®é©ãæå°ã®ååã§ãã ïŒã³ãŒããæžãããŠãããããèªãŸããŠãããšèšãããŠããå Žåã¯ã if a then b
ã®æ¹ãa && b
ãããæ§æãåªããŠããããšãèŠããŠãããŠãã ããïŒã ãŸãããžã§ãã¬ãŒã¿ãŒå
ã®2ã€ã®å¯èœãªã¿ã€ãã®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 the thenbã¹ããŒãã¡ã³ããšã¯ã©ããããããç°ãªãæäœã ãšæããŸãã
ã¯ãïŒ ç§ã¯ãããšåãã³ã¡ã³ããæçš¿ããããšããŠããŸããã ãã£ã«ã¿ãªã³ã°ã¯ã€ãã¬ãŒã¿å šäœã§æ©èœããå éšã®èšç®åŒã®äžéšã§ã¯ãããŸããã
ãŸãã @ andyferrisãšåãããã«ãåŒãšå埩ã®éã®if
ã¯ãå埩ã®åœ¢ç¶ã§ã¯ãªãåŒã®å€ããå€æãããŠããããã«èŠãã次ã®å Žåã«nogthing
ãçæããã¯ãã§ããæ¡ä»¶ãæºããããŠããŸããïŒãã ããpython / haskellã®ç解ã«çãããŠããå¯èœæ§ããããŸãïŒã
æããã«ããžã§ãã¬ãŒã¿åŒã®ã³ã³ããã¹ãã«ãªãå Žåã x if false
ã¯nothing
$ãšè©äŸ¡ãããŸãã [x^2 if x % 3 == 0 for x=1:100]
ããµããŒãããããšã¯å®å
šã«åççã§ããã x if y
èªäœããµããŒãããããšã¯ã§ããŸããã
å人çã«ã¯ãã¹ããŒãã¡ã³ãã1ã€ãããªãå Žåã¯ã end
ãçç¥ã§ããããã«ããããšæããŸãã
if length(A) != length(B) throw(ArgumentError("..."))
end
ããªãå Žåã¯ãåŒã1ã€ã ãã§ãããšèŠãªãããšãã§ããŸãã ç§ã¯ããã以åã«è©³çŽ°ã«è°è«ããããšæããŸããïŒ
æ¡ä»¶ã®åŸã«ã»ãã³ãã³ãä»ããããªãããšã«æ³šæããŠãã ãã-åŒã®åŸã«..._å€å_...ç§ã¯ããã奜ãã§ã¯ãããŸããã
åæ§ã®åœ¢åŒã®ifã¹ããŒãã¡ã³ãã«å¯ŸããŠ2ã€ã®ç°ãªãæ§æã䜿çšããããããããããããæãã§ããŸãã _ïŒç·šéïŒ if x; ...; end
ãããã³if x then; ...
ãif condition then action
ã¯ç§ã«æé·ããŸãããïŒ_
[x ^ 2 if xïŒ 3 == 0 for x = 1ïŒ100]ããµããŒãããããšã¯å®å šã«åççã§ãããyèªäœã®å Žåã¯xããµããŒãããŸããã
@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ã«ãŒã...ããã¯ãã£ãšçã«ããªã£ãŠããŸãã
å人çã«ã¯ãã¹ããŒãã¡ã³ãã1ã€ãããªãå Žåã¯ã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 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
ãçããšããããšã¯ãç§ã®æ¬ã§ã¯ç¡é¢ä¿ã§ãïŒ1ã5æåã®äºçŽ°ãªéãã«ã€ããŠè©±ããŠãããšããäºå®ãè¶
ããŠïŒã if x then y
ãšã»ãŒåããããæ確ã§ãã ãŸãããšãã£ã¿ãŒã®è§£æã®åé¡ãéå»ã®ã³ãŒãã®ç Žæã®å¯èœæ§ãåé¿ããŸãã ããã¯ãshort 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-æ§æã æããã«ãããã§ã®2ã€ã®ã¢ã€ãã¢ã¯å®å
šã«ç¡é¢ä¿ã§ãã
@ H-225ããã¯å¥åŠã«æããæçµçã«ã¯éãžã¥ãªã¢ã³ã«èŠããŸããç¹ã«ã end
ã®ãªãæ°ããè¡ã§ã®ã¢ã¯ã·ã§ã³ã§ã¯ããã§ãã
ç·šéè
ïŒVimãªã©ïŒã¯æ¡ä»¶ãã¢ã¯ã·ã§ã³ãäœã§ããããæ°ã«ãããå®éãJuliaããŒãµãŒãªãã§ã¯ç¥ãæ¹æ³ããªããããç·šéè
ã解æããã®ã¯äŸç¶ãšããŠæªå€¢ã§ãã if
ãend
ãªã©ã®é
眮ã«æ³šæããŠãã ããã ãã®ã·ããªãªã§ã¯end
ãå¿
èŠãªãããšãVimã«èªèãããã®ã¯éåžžã«é£ãããšæããŸãã ç·šéè
ãç°¡åã«ã§ããããã«ããããšã¯ããã¶ã€ã³ã決å®ããããã®è¯ãè°è«ã§ã¯ãªãããšãç§ã¯ç解ããŠããŸãã
ééããªãïŒ-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ããããªããšã«ãç§ã¯å察ã®ããšãææ¡ããããšããŠããŸããããã®ãžã¥ã¬ããã®if-thenã¢ã€ãã¢ã1è¡ã®if-then-elseåŒã«æ¡åŒµããããšã§ãã
if cond then a else b
ããã§ãelseå¥ã¯ãªãã·ã§ã³ã§ãã cond ? b : c
ãšåãããã«äœããªãå¯èœæ§ããããŸãã ç§ã«ãšã£ãŠãããã¯ãã¹ãŠãCã¹ã¿ã€ã«ã®äžéšåœ¢åŒããé¢ããŠããã人éãèªããã³ãŒãã«åããããšã§ãã ïŒç§ã¯ä»¥åã«ééããªãcondition ? a : nothing
ã䜿çšããŸãã-ããã¯ããã¯ã®ããã§ãïŒ 'ã ã£ãã®ã§ã nothing
ã¯äœããã®çç±ã§éèŠã§ããïŒãããŠä»ã®äººãèªãã®ãæ··ä¹±ãããŸãïŒã
ããããã¡ãããããããã¹ãŠã®ã¢ã€ãã¢ãåæã«æã€ããšãã§ããªãã®ã¯ãªãã§ããïŒ
@andyferrisã¯ããããã¯ãã1ã€ã®Pythonicã®æ¹æ³ã§ãã ã©ãã ãç°¡æœã«ãªããããã«ããããšæããŸãããæ°åŠè ã¯äžè¬çã«ç°¡æœããé«ãè©äŸ¡ããŠããããã§ãããæ£çŽèšã£ãŠãäžæ Œå¥œãªãã®ã䜿ããªããŠãããã®ã§ãããã©ã¡ãã§ããããšæããŸãã
if condition; eval_expr; end
ã§ãæ£çŽèšã£ãŠãäžæ Œå¥œãªãã®ã䜿ãå¿ èŠããªãéããã©ã¡ãã§ãæºè¶³ããŸã
if condition; eval_expr; end
ããã¯ããïŒ
ãã®äŸ¡å€ã«ã€ããŠã¯ãx && yè¡šèšã奜ãã§ãä¹±çšãšã¯èŠãªããŠããŸããã
ç§ã¯å人çã«ãæåã®ã¹ããŒãã¡ã³ããfalseã®å Žåã«false
ãè¿ããªããªãã¬ãŒã¿ãŒããŒã¹ã®ãœãªã¥ãŒã·ã§ã³ã奜ã¿ãŸãã äžé
æŒç®åã®2åŒæ°ããŒãžã§ã³ãšããŠa ?: b
ã奜ãã§ãããã»ãšãã©äœã§ãåé¡ãããŸããã
?
ã®ã¢ã€ãã¢ã¯ïŒ6823ã§ããªãåºç¯å²ã«è°è«ãããã®ã§ããã®è°è«ãèªã¿çŽã䟡å€ããããããããŸããã
ç§ã¯ãã®è°è«ããããã«æ¥ãŸããããããã¯ã³ã¡ã³ãããã®ã«è¯ãå Žæã ãšæããŸããã if a then b
ãš:
?
ã ãã䜿çšããããšã¯ãããããå€å°æ··ä¹±ããã ãããšæããŸãããåãæ©èœãæäŸããéããæå¥ãèšãããšã¯ãããŸããã
@EricForgyã«åæããŸãã ãã¶ãç§ã¯ãã®æç¹ã§åœŒãã«æ
£ããŠãããããããŸããããç§ã«ãšã£ãŠããã®ããã«&&
ãš||
ã䜿çšãããšãç¹ã«ãšã©ãŒãã§ãã¯ïŒäŸïŒ x || throw(y)
ïŒã§ãžã¥ãªã¢ã«ãšã£ãŠæ
£çšçãªæãã«ãªããŸãïŒã ãããã¯ããããŸãã§ãããããŸã£ããèªããªãããã«ã¯èŠããŸããã ãŸãã x
ãfalseã®å Žåã 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ãããåªå
é äœããããŸããæ°åŠçãªcaseæ§æã§ã¯ãã®ããã«ãªã£ãŠããŸãã
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()
èªã¿ãããã®ç¹ã§ã¯ãããã¯ç°ãªããŸãã å€ãã®çãæ¡ä»¶/ã¢ã¯ã·ã§ã³ã®å Žåãæ確ãªåºåãæåã䜿çšããŠé£ç¶ããè¡ã«æ¡ä»¶/ã¢ã¯ã·ã§ã³ã䞊ã¹ãããšãã§ãããšãã¯ããã«èªã¿ããããªããŸãïŒééããããã«ãªããŸã!!ïŒã
ãžã§ãã¬ãŒã¿ãŒã®å Žåã$ïŒ$ 14 $ïŒ$ã¯ãã£ã«ã¿ãŒã§ãããæ¡ä»¶ä»ãã§ã¯ãªãããã 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
ã«å察ããªãããšã«æ³šæããŸã-ããã¯ãããç§ã«æé·ããŠããŸãã
ãžã¥ãªã¢ã¯ã function
ãend
ãªã©ããããèšèã®å€ããåŽã«åŸãåŸåãããã®ã§ããŽã£ããåããšæããŸãããŸããæ¬åŒ§ãè¿œå ããå¿
èŠãããã®ã¯å°ãã€ã©ã€ã©ããŸãã condition && action
æ§æã®éãè¡ã£ããæ¥ããããå Žåã®åŒã
Perl / Rubyæ§æã®ãactionifconditionãã«ã€ããŠïŒç§ã¯ãã®æ§æãæ¬åœã«å¥œãã§ãã誀ã£ãŠäœ¿çšãããšèªã¿ããããäœäžããå¯èœæ§ãããããšã«åæããŸãããèªã¿ãããããåäžãããããšããããšæããŸãã
äŸãã°ïŒ
throw(DomainError()) if some_condition || some_other_condition && so_on
ãthrowdomainerror ifããèªãã åŸã次ã®ããšãå ¥åã®å¥å šæ§ãã§ãã¯ã«ãªãããšããã§ã«ç¥ã£ãŠããŸãã æ¡ä»¶ã®è©³çŽ°ãéèŠã§ãªãå Žåã¯ã次ã®è¡ã«ã¹ãããã§ããŸãã
åã®æã¯ããã®æ§æãèªç¶èšèªã§é »ç¹ã«çºçããäŸã§ãã ã次ã®è¡ã«ã¹ãããããšããã¢ã¯ã·ã§ã³ãæåã«æ¥ãŠãããã»ã©éèŠã§ã¯ãªããèå³ããªãå Žåãã¯åŸå±ç¯ã«ãããŸãã ç¹°ãè¿ãã«ãªããŸãããèªè ã¯ãå®éã«æã®æåŸãŸã§èªãããšãªãããifããšããåèªã®åŸã«ç¶ããã®ãããããæšæž¬ã§ããå¯èœæ§ããããŸãã
ïŒèããããå Žåã¯ãèªå·±åç §ã®äŸæã瀺ããŸããïŒ
å€ãPerlã®æãšããŠãç§ã¯ãã®æ§æã«åæ ããŠããŸãããPerlã®ããã¯ã°ã©ãŠã³ããæããªãä»ã®äººã«ãšã£ãŠã¯é£ãã販売ã«ãªããšæããŸãã è³æã®1ã€ã®è°è«ã¯ããããå å è¡šèšã®ãã£ã«ã¿ãŒæ§æãšäžèŽãããšããããšã§ãã å察ã®è°è«ã¯ãè©äŸ¡é åºãå·Šããå³ã§ã¯ãªãæ§é ãæã€ã®ã¯å¥åŠã ãšããããšã§ãã ãã¡ãããå å è¡šèšã«ã¯ãŸãã«ãããããã®ã§ãð€·ââïž
ç§ã«ãšã£ãŠãé¢é£ãã質åã¯æ¬¡ã®ãšããã§ããåå²ãŸãã¯ãã£ã«ã¿ãªã³ã°ãäžè¬åããŠããŸããïŒ ããã¯åå²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
ãŸããä»ã®èšèªã§å äŸããããšããå©ç¹ããããŸãããif-then withoutendæ§æã¯ããã§ã¯ãªãããã§ãã
ãããŠãããã¯ææ³ã«ãšã£ãŠãè¯ãã§ãããã
[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
ã¯ã x
ãtrueã®å Žåã¯2
ãè¿ããŸããã x
ãfalseã®å Žåãäœããè¿ãå¿
èŠããããŸãã éåžžãããã¯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
ä»ã®äœããèŠãŠããéãç§ã¯ã¡ããã©ãã®ãžã¥ã¬ãããããäžåºŠèŠãŸããã
ç§ã¯ãŸã if a then b
åäžè¡åœ¢åŒã®ãããªãã®ãæãã§ããŸãã ãžã¥ãªã¢ã³ã®ä»£æ¿åa && b
ã¯ãæ°å¹Žé䜿çšããåŸã§ãããªãèªããªãããšãããããŸããè±èªã®æç« ãšããŠçŽæ¥èªãæ¹æ³ã¯ãããŸããã
ãŸãã a && b
ã®ã€ãã£ãªã ãæ°åè
ã«èª¬æããå¿
èŠãããã®ã¯ãèªæã§å°ãã ãé·ã代æ¿æ§æã䜿çšã§ããå Žåãã¡ãã£ãšæ¥ããããããšã ãšæããŸãã
è±èªã®æç« ãšããŠçŽæ¥èªãæ¹æ³ã¯ãããŸãã
a && b
ã¯ããif a then also do bãã®ããã«ããaandbããšèªã¿ãŸãã
a || b
ã¯ããaã¯çã§ãªããã°ãªããªããããã§ãªãå Žåã¯bãå®è¡ãããã®ããã«ãaãŸãã¯bããšèªã¿ãŸã
ç§ã¯ãããäœãããããç¥ã£ãŠããŸãããããŠç§ã¯ç°¡æœã«ããããã«æã ããã䜿ããŸãã ããããïŒåè¿°ã®ããã«ãããæ°å¹Žã¯ïŒãaãšbããæãšããŠèŠãããšãã§ããªãã®ã§ãã§ããéãè©ŠããŠã¿ãŠãã ããã ããã¯æ¯å軜床ã®èªç¥çäžååã§ãã
å¯Ÿç §çã«ãç§ã¯åžžã«ãaãŸãã¯bããããªãèªã¿ãããããšãçºèŠããŸããã
ããããªããšã«ãããã®ããŸããŸãªåŽé¢ãä»æ¥ä»äºã§2ååºãŠããŸããã
ååäžã if ... end
&&
ã䜿çšããJulia PRããããã³ãŒããªãŒããŒïŒPRã¬ãã¥ãŒã¢ïŒãšããŠãäœåãªåŽåãå¿
èŠã§ãããšææããŸããïŒãããŠèŠéããã¡ã§ããïŒ ïŒå®è¡ãããå Žåãšå®è¡ãããªãå Žåããããã©ã³ãã ãã®äŸã¯a() && b!()
ã®åœ¢åŒã§ã b!
ã¯éåžžã«å€åããŸãã ïŒãã®å Žåã b!()
ã¯ãã¡ã€ã«ã·ã¹ãã å
ã®ãã¡ã€ã«ã移åãŸãã¯åé€ããŸããããããã¯ããã«å±éºã§ããããã«èŠããŸãããããããåé¡ã«ãªãã®!a()
ã®å Žåã®ã¿ã§ããããã®å Žåã¯åé¡ã§ããããšãããããŸããã§ãããå®éã«ã¯æ£ããä¿è·ãããŠããŸããïŒã
ååŸãå¥ã®ãœãããŠã§ã¢ãšã³ãžãã¢ïŒãžã¥ãªã¢ãç¥ããªãïŒã¯ãåéãšè±èªã話ããšãã«ãã a
ãb
$ãããšãã圢åŒã®è³ªåã«çããããšããããšææããŸããã ããã¯ãããšå¿çããŸãã 圌ã®ãœãããŠã§ã¢ãšã³ãžãã¢ã®å人ã ããç解ããã§ããã-ä»ã®èª°ãããŸã£ããç解ããªãã§ãããã æ®éã®äººã¯ããã¯æããªãã ðããã¯ç§ã®æ¬¡ã®ãã€ã³ãã«ããããé¢é£ããŠããŸãïŒç·šéïŒãããŠç§ãèšã£ãã¯ãã§ãããäžèšã®ã¹ããã¡ã³ã®å¿çã«é¢é£ããŠããŸãããå€ãã®äººã«ãšã£ãŠããã¯åœŒãã«ã¯èµ·ãããªããšæããŸãïŒã
ãã®åé¡ã«å¯Ÿããç§ã®ã¹ã¿ã³ã¹ã¯ã &&
ïŒãŸãã¯||
ïŒã䜿çšããããšã¯ãPLã®ããã¯ã°ã©ãŠã³ãã匷ã人ã ããèªããåå²ã®çãæ§æã§ãããããã§ãå°ãè¿œå ãããšãããã®ã§ããèªç¥ç/èŠèŠçè² è·ïŒåã«&
ãš&&
ãåºå¥ããããïŒã åŠéçãªããŒã ïŒç§åŠè
ãšãœãããŠã§ã¢ãšã³ãžãã¢ã®æ··åïŒã§äœæ¥ããå ŽåãããŒã ã®ååãç©æ¥µçã«æ··ä¹±ããŠãããšæããŸãã ãœãããŠã§ã¢ãšã³ãžãã¢ãšããŠããè«ççãª&(::Bool, ::Bool) --> Bool
ãšåå²ãã&&(::Bool, ::Any) --> Any
ã®éã«å¥åŠãªæ絶ããããšæããŠããŸãïŒããã§ããåŸè
ã¯å®éã«ã¯é¢æ°ã§ã¯ãããŸããããããŸãããã°ç§ã®äž»åŒµãç解ã§ããŸãïŒ ã ã¿ã€ãèªäœã¯å¥ãšããŠããžã¥ãªã¢ã§ã¯éåžžãåè
ã¯ãæ©èœçãã§ãããšäºæ³ããŸãããåŸè
ã®åœ¢åŒã¯ãç¹ã«2çªç®ã®åŒã§æœåšçãªå¯äœçšã䌎ãããšããããããŸãã
ç·šéïŒããã«ã€ããŠãã£ãšèãããšãããã§ã®åé¡ã¯å®å
šã«å¯äœçšãšããã°ã©ã ãããŒã«é¢ãããã®ã§ãã &&
ã®ãæ©èœçãªã䜿çšæ³ã¯ã &
ã®æé©åã§ããããšã誰ããç解ããã®ã¯éåžžã«ç°¡åã§ãã çŽç²ã§ãªãè¡šçŸã§ã¯ãããããå®å
šã«ç°ãªãããšã調æŽããããšã¯æ¯èŒçå°é£ã§ãã
å Žåã«ãã£ãŠã¯ããåªå
é äœãã¯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
æ§æã«ã¯_å€ãã®åäŸããã_ããšã«æ³šæããŠãã ããã
ãããŠããã®æ§æã¯ãäžèšã®ãã¹ãŠã®èšèªã®ã¯ã³ã©ã€ããŒã«äœ¿çšã§ããŸãã
ç§ã¯ãã®è°è«ã1æéãã£ãšç¥ã£ãŠããã®ã§ããããææ¡ãããå Žåã¯èš±ããŠãã ããã
'&&'ãš '||'ã®ç絡ãªãã·ã§ã³ã奜ããªããã§ãã»ãã³ãã³ã䜿çšããã«ã1è¡ã«åçŽãªifã¹ããŒãã¡ã³ããå¿ èŠãªããã«äœ¿çšãããŸãã ããããç絡ã¯å¥ã®åé¡ãåŒãèµ·ããä¿®æ£ã®ããã«æãããŸããããã ãšããŠããã®æ§æãç解ããŠè§£æããããšã¯ã以åã«èŠãããšããªããã2çªç®ã®åŒãå¿ èŠãªå Žåã«ã®ã¿è©äŸ¡ãããããšãç¥ããªãéãå°é£ã§ãã ïŒäººéãšããŠã®ïŒçŽæçã§ãªãèªã¿ã¯ãç絡ã«ããèŠèŠçããã³è«ççæ¬ é¥ã®äž¡æ¹ãåå ã§ããããã«æãããŸãã ãããäœãæå³ããã®ããç¥ã£ãåŸã§ã¯ãèªãã®ãå¿ éåãããé£ãããããããªãããã«ããæããŸãã
ç§ãééã£ãŠããªããã°ãäž¡æ¹ã®åé¡ããã¯ãã§ä¿®æ£ã§ããŸãã
@ifæ¡ä»¶ã®çµæ
åŠå®ã¯ïŒã§åŠçã§ããŸãã æ¡ä»¶ã®åããŸãã¯ä»£ããã«@ifnotãã¯ãã ããã¯ç§ã ããªã®ãããããšãã³ã³ãã¥ãŒã¿ãŒã«ãšã£ãŠææ§ãããªãã人éã«ãšã£ãŠèªã¿ãããããã¹ãŠã1è¡ã«ãªã£ãŠããã®ã§ããããã
ãããäœãæå³ããã®ããç¥ã£ãåŸã§ã¯ãèªãã®ãå¿ éåãããé£ãããããããªãããã«ããæããŸãã
^ç§ã¯ããã«åŒ·ãåæããŸãã
@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
=ãããåªå é äœãäœããå³ããå·Šã«æäœãããå Žåã
ããªãã¯ãã§ã«æ¬¡ã®ããšãããããšãã§ããŸããããã¯ã»ãšãã©åãã«èŠããŸãïŒ
if condition result end
ç§ã¯ç¥ããŸããã§ããïŒ ç§ã¯ãã€ããéåžžã¯æ¹è¡ãããã»ãã³ãã³ãå¿ èŠã§ãããã ã ããç§ã®å Žåãæ§æ
if condition result end
&&
ãå®å
šã«åé·åããã®ã§ãåé¡ãããŸããïŒ æ¬¡ã®ããšãã§ãããšæããŸãã
if condition result_1 else result_2 end
ãã®å ŽåãããŒã¯ãŒãend
ãè¿œå ããæ¹ãããã¯ããäœæãããããããããç°¡åã§ãã ãããããšã«ãããããäœãããã«æéãå²ããŠãããŠããããšã^ _ ^ããã¥ã¡ã³ãã®1è¡ã®ifã¹ããŒãã¡ã³ãã«å¯èœæ§ãè¿œå ããã®ã¯è¯ãã¢ã€ãã¢ã§ããïŒ ?If<enter>
ãå®è¡ãããšãçµæã¯ãã§ã«ããªãã®æ°è¡ã«ãªã£ãŠããããšãããããŸã...ãããããã®æ©èœã¯ãã£ãšå®£äŒããå¿
èŠããããšæããŸãã
å ã®è°è«ã«åããŠããifãã®1è¡ããŒãžã§ã³ã§ã¯å°ãåé·ã ãšæããŸããããIf xthenyããè¿œå ããããšã«è³æã§ãã ããããããã³ãŒããæžããŠãã ãããããã¯ããªãã«ãšã£ãŠçã«ããªã£ãŠããŸãããïŒ
æãåèã«ãªãã³ã¡ã³ã
ä»ã®èšèªããã®ã¢ãããŒããæ¡çšããŠãããããç§ã¯å°æ°æŽŸãããããŸããããæ¡ä»¶ã®åã«æ¥ãã¢ã¯ã·ã§ã³ã¯æ¬åœã«å¥åŠã§ããããšãåžžã«ããããŸããïŒäŸïŒ
println("positive") if x > 0
ãif x > 0 println("positive") end
ãããç°¡æœã ãšæããŸãããå°ãªããšãç§ã«ãšã£ãŠã¯ãèªã¿ããããç ç²ã«ãªããŸããç§ã¯ãããäŒè©±ã®ããã«æããŸãïŒ
ãžã¥ãªã¢ïŒãæååãå°å·ããŸã...ã
ããã«ãïŒããããïŒã
ãžã¥ãªã¢ïŒã...ããããäœããã®æ¡ä»¶ãæºããããå Žåã«éããŸããã
ããã«ãïŒãããã:(ã
察
ãžã¥ãªã¢ïŒãäœããã®æ¡ä»¶ãæºããããå Žåãæååãå°å·ããŸããã
ããã«ãïŒããªãŒã±ãŒããã£ãããã