рд╡рд┐рднрд┐рдиреНрди рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ, рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреИрд╕реЗ:
if x then y
рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк "if" рдХрдерди рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ:
x && y
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛ $#$ y
$#$ рдХреЛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯрд┐рдВрдЧ &&
рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИ ( y
рдХреЗ рд╕рд╛рде рдЕрдХреНрд╕рд░ рдЕрдиреНрдп рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ Bool
рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ)ред
рдЗрд╕ if-then
рдирд┐рд░реНрдорд╛рдг рдХреЗ рдореБрдЦреНрдп рд▓рд╛рдн рд╣реИрдВ: рдЕрдзрд┐рдХ рд╕реБрдкрд╛рдареНрдп рдХреЛрдб, рджреБрд░реБрдкрдпреЛрдЧ рдкрд░ рдХрдо рдирд┐рд░реНрднрд░ &&
, рдФрд░ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ "if" рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдлреЙрд░реНрдо рд╕рд╣рд┐рдд рдЬрд┐рд╕рдореЗрдВ 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]
рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреВрд▓рд┐рдпрд╛ рдЧрд╛рд░реНрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдкреБрдирд░реНрд▓реЗрдЦрди рдХрд░ рд░рд╣рд╛ рд╣реЛрдЧрд╛:
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)]
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ _generator_ рд╕реНрддрд░ рдкрд░ рдЧрд╛рд░реНрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдХреЗрд╡рд▓ _рд╕рдордЭ_ рд╕реНрддрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд (рдЬреЛ рдХрд┐ рдЕрдЬрдЧрд░ рдХреА рдЕрдиреБрдорддрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ)ред
рдкрд░реНрд▓/рд░реВрдмреА-рд╢реИрд▓реА рдЕрдЧрд░/рд╕рдВрд╢реЛрдзрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдорд┐рд╢реНрд░рдг рдХрд░реЗрдЧрд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ:
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
рдмрд┐рдирд╛ end
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдкреНрд░рдмрдВрдзрди рдкрд░ рдмрд╕ рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ: #6823 рдиреЗ рдареАрдХ рдЗрд╕реА рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреАред рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВрдиреЗ рдкреВрдЫрд╛ рдХрд┐ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдмрдВрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдо рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдХрднреА рдХреЛрдИ рдЬрд╡рд╛рдм рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ #6823 рдЬреИрд╕реЗ рдореБрджреНрджреЛрдВ рдХреЛ рдмрдВрдж рди рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдпреЗ рдЪрд░реНрдЪрд╛рдПрдБ рдХреЗрд╡рд▓ рдордВрдбрд▓рд┐рдпреЛрдВ рдореЗрдВ рдЬрд╛рдПрдБрдЧреА рдФрд░ рдореВрд▓ рдЕрдВрдХ рдХреЗ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╢рд╛рдпрдж рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ #6823 рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдЬреЛрдбрд╝реЗрдВред
рд╣рд╛рдБ, рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБред рджрд░рдЕрд╕рд▓ #6823 рдЪрд░реНрдЪрд╛ рдХреЗ рдмреАрдЪ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдЗрд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрд▓реНрдкрдордд рдореЗрдВ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдиреЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЕрдкрдирд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рдкрд╛рдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП println("positive") if x > 0
ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ if x > 0 println("positive") end
рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдкрдардиреАрдпрддрд╛ рдХреА рдХреАрдордд рдкрд░ рдЖрддрд╛ рд╣реИред
рдореИрдВ рдЗрд╕реЗ рдмрд╛рддрдЪреАрдд рдХреА рддрд░рд╣ рд╕реЛрдЪрддрд╛ рд╣реВрдВ:
рдЬреВрд▓рд┐рдпрд╛: "рдореИрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░реВрдБрдЧрд╛ ..."
рд╣реЗрд░реЛрд▓реНрдб: "рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!"
рдЬреВрд▓рд┐рдпрд╛: "... рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА рдЬрдм рдХреБрдЫ рд╢рд░реНрдд рдкреВрд░реА рд╣реЛред"
рд╣реЗрд░реЛрд▓реНрдб: "рдУрд╣ред :("
рдмрдирд╛рдо
рдЬреВрд▓рд┐рдпрд╛: "рдЕрдЧрд░ рдХреБрдЫ рд╢рд░реНрдд рдкреВрд░реА рд╣реЛрддреА рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░реВрдВрдЧреАред"
рд╣реЗрд░реЛрд▓реНрдб: "рдареАрдХ рд╣реИ, рдЕрдЪреНрдЫрд╛ред"
@ararslan : рдореИрдВ рдЕрд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВ, рдЬреЛ рд░реВрдмреА рдФрд░ рдкрд░реНрд▓ рдореЗрдВ рдкреВрд░реНрд╡ рдХрд▓рд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рдХрд╛рд░рдг рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЬрдирд░реЗрдЯрд░ рдФрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП for
рд╕рдВрд╢реЛрдзрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдорд┐рд╢реНрд░рдг рдХрд░рддрд╛ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╣рд╛рдВ рд▓рд╛рдпрд╛ред
@StefanKarpinski рд╣рд╛рдБ рд╕рд╣рдордд рд╣реБрдП, рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдЬрд╛рд▓ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЕрднреА рднреА рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рдкрд┐рдЫрд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реВрдВред : рдореБрд╕реНрдХрд╛рди: (рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЦреБрдж рдХреЛ рдЕрдХреНрд╕рд░ рдХрд╣рддреЗ рд╣реБрдП рдкрд╛рдпрд╛ рд╣реИ, рдореЗрд░реА рд░рд╛рдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддреА рд╣реИ; рдореИрдВ рд╕рд┐рд░реНрдл рдХреБрдЫ рдЖрджрдореА рд╣реВрдВред)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрддрд╛
if x % 3 == 0 then x^2 for x = 1:100
рддреЛ рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╕рдордЭ/рдЬрдирд░реЗрдЯрд░/рдЪреАрдЬрд╝рдорд╛рдЬрд┐рдЧ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рднреА рдкрдврд╝рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЗрд╕реЗ рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
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 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ if
for
рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрд╛рджрд┐рдд x
рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ рд░рдЦрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдХреЗ рдмрдЬрд╛рдп рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВред
рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?
for 1:n
рдорд╛рди "рдЙрддреНрдкрдиреНрди" рдХрд░рддрд╛ рд╣реИ, if x % 3 == 0
рдЙрдиреНрд╣реЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ x^2
рдЙрдиреНрд╣реЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ - рдЬрдирд░реЗрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдЕрдВрджрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдордзреНрдпрдоред рдпрджрд┐ if
рдХреНрд▓реЙрдЬ for
рдХреНрд▓реЙрдЬ рдХреЗ рджрд╛рдпреАрдВ рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдбреЗрдЯрд╛ рдмреАрдЪ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рджрд╛рдИрдВ рдУрд░ рдФрд░ рдлрд┐рд░ рджреВрд░ рдмрд╛рдИрдВ рдУрд░ "рдкреНрд░рд╡рд╛рд╣" рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЕрдЬреАрдм рд╣реИред рдпрджрд┐ if
рдХреНрд▓реЙрдЬ рдмрд╛рдИрдВ рдУрд░ рд╣реИ рддреЛ рдбреЗрдЯрд╛ "рдкреНрд░рд╡рд╛рд╣" рджреВрд░ рджрд╛рдИрдВ рдУрд░ рд╕реЗ рджреВрд░ рдмрд╛рдИрдВ рдУрд░ рдордзреНрдп рдХреА рдУрд░ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ SQL where
рдХреНрд▓реЙрдЬ рдХреЛ рдЯреЗрдмрд▓ рдирд╛рдореЛрдВ рдХреЗ рджрд╛рдИрдВ рдУрд░ рдФрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рдмрд╛рдИрдВ рдУрд░ рд░рдЦрддрд╛ рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рдкрдврд╝рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдкрдврд╝рдиреЗ рдореЗрдВ рдпрд╣ рдХрд╖реНрдЯрдкреНрд░рдж рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреА рддрд░рд╣ рдкрдврд╝рдирд╛ рдПрдХ рдЕрдиреБрдорд╛рдиреА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдмрд╣реБрдд рджреВрд░ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЪреАрдЬреЗрдВ рдЬреЛ рдореБрдЭреЗ if x then y
рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИрдВ:
then
рдХреАрд╡рд░реНрдб рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИредif x y end
рд╕реЗ if x then y
; x && y
рдФрд░ рднреА рдЫреЛрдЯрд╛ рд╣реИредthen
рдХреАрд╡рд░реНрдб рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╡рд┐рдкрд░реАрдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдПрдХ рдорд▓реНрдЯреАрд▓рд╛рдЗрди if
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП end
рдХреАрд╡рд░реНрдб (рдпрд╛ fi
рдмреИрд╢ рдореЗрдВ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ , рдпрдХ)редрдУрд╣ рд╣рд╛рдБ, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЕрдм рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдпрд╣ рд╕рдордЭ рдЖрддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЕрдЬреАрдм рд╣реЛрдЧрд╛
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
рдХреЛ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ nothing
рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрдЧрд╛ a
false
рдерд╛ред рддреБрд▓рдирд╛ рдХрд░реЗрдВ рдХрд┐ рдпрджрд┐ рдореИрдВ рдХреЛрд╖реНрдардХ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдБ рддреЛ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
[(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
рдХреЗ рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдВрдЧреЗ - рд╕рдмрд╕реЗ рдмрд╛рдИрдВ рдУрд░ - рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде - рдпрд╛ рд╕рдмрд╕реЗ рджрд╛рдИрдВ рдУрд░ - рд╕реАрдорд╛ рдХреЗ рд╕рд╛рдеред
рд░реБрдмреА/рдкрд░реНрд▓ рдореЗрдВ рдкрд░рдВрдкрд░рд╛ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдкрд░рдВрдкрд░рд╛ рд╕реЗ рдлрдВрд╕рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИ рддреЛ рд▓реЛрдЧ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ 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]
рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╢рд╛рдВрдд рдФрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рднрдпрд╛рдирдХ рд╣реИ!
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рд╢рд░реНрдд рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдСрдкрд░реЗрд╢рди рд╣реИ рдпрджрд┐ a рддреЛ b рдХрдердиред
рд╣рд╛рдВ! рдореИрдВ рд╡рд╣реА рдЯрд┐рдкреНрдкрдгреА рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ред рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╕рдВрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЗрдЯрд░реЗрдЯрд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдВрджрд░ рдХреА рдЧрдгрдирд╛ рдХреА рдЧрдИ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред
рдореИрдВ рднреА @andyferris рдЬреИрд╕рд╛ рд╣реА рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмреАрдЪ if
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ "рд░реВрдкрд╛рдВрддрд░рд┐рдд" рдХрд░рддрд╛ рд╣реИ, рдФрд░ nogthing
рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╢рд░реНрдд рдкреВрд░реА рдирд╣реАрдВ рд╣реБрдИ рд╣реИ (рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдЬрдЧрд░/рд╣рд╛рд╕реНрдХреЗрд▓ рд╕рдордЭ рд╕реЗ рдЦрд░рд╛рдм рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ)ред
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ 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 x; ...; end
, рдФрд░ if x then; ...
редif condition then action
рдореБрдЭ рдкрд░ рдмрдврд╝ рдЧрдпрд╛ рд╣реИред)_
[x^2 if x% 3 == 0 for x=1:100] рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди x рдЕрдЧрд░ y рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдирд╣реАрдВред
@StefanKarpinski рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реВрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐...
рдпрджрд┐ рдпрджрд┐ рдХреНрд▓реЙрдЬ рдмрд╛рдИрдВ рдУрд░ рд╣реИ рддреЛ рдбреЗрдЯрд╛ "рдкреНрд░рд╡рд╛рд╣" рджреВрд░ рджрд╛рдИрдВ рдУрд░ рд╕реЗ рдмрд╛рдИрдВ рдУрд░ рдордзреНрдп рдХреА рдУрд░ рд╣реЛрддрд╛ рд╣реИред
рдореИрдВрдиреЗ x^2 if x % 2 == 0 for x in 1:10
рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛, x^2 where x % 2 == 0 for each x in 1:10
, рдЬреЛ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдордЭ рд╣реИ, рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ; рдЖрдк рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
SQL рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ, рд╡рд╣реА рдмрд┐рдВрджреБ рд╕рддреНрдп рд╣реИ, рдирд╣реАрдВ?
рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП "рдЬрдирд░реЗрдЯрд░" рдХрд╛ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд╣реЛрдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реИ, _рдПрдХ рд╕рдордЭ рдХреЗ рд▓рд┐рдП_ред рджреВрд╕рд░реА рдУрд░ рд▓реВрдк рдХреЗ рд▓рд┐рдП... рдпрд╣ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрдерди рд╣реЛрдиреЗ рдкрд░ рдЕрдВрдд рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреЛрдИ рдХрд░реНрд╖рдг рдирд╣реАрдВ рдорд┐рд▓рд╛: https://github.com/JuliaLang/julia/issues/1657ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЧреИрд░-рд╡рд┐рдШрдЯрдирдХрд╛рд░реА рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдЬреАрдм рдФрд░ рджреБрд░реНрд▓рдн рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреБрдЫ рд▓реЗрдЦрди рдХреЛрдб рджреЗрдЦреЗрдВ:
if cond body
end
рдЖрдк $#$1 then
#$ рдХреЗ рдмрдЬрд╛рдп do
рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рдпрд╛рдиреА: if x do y end
рдмрд╕ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рд╛рдЗрдб-рдЯрд┐рдкреНрдкрдгреА: рдореБрдЭреЗ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдХрд┐ if x y
рдЕрдкрдиреЗ рдЖрдк (рдпрд╛рдиреА рдЬрдирд░реЗрдЯрд░ рдХреЗ рдмрд╛рд╣рд░) рдПрдХ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдЬреВрд▓рд┐рдпрд╛ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕рдВрдкрд╛рджрдХ рдХреЗ рднреАрддрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдХрд┐ рдХрд┐рддрдиреЗ рдЯреЛрдХрди if
рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рд╡рд┐рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╕рдВрдкрд╛рджрдХ рднреА рдЙрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред 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
рдЬрд┐рддрдирд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрд╣ рд╕рдВрдкрд╛рджрдХ рдХреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдпрд╛ рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЯреВрдЯрдиреЗ рд╕реЗ рднреА рдмрдЪрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдЪреНрдЫрд╛, рд╕рд╛рдл, рдЫреЛрдЯрд╛ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ, рдЕрдЧрд░ рдмрдпрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдПред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЬрдирд░реЗрдЯрд░ рдорд╛рдорд▓реЗ рдореЗрдВ 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
рдЯреАрдПрд▓; рдбреАрдЖрд░: рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдЧрдП рдЬреЗрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ x^2 if x % 3 == 0 for x = 1:100
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡рд╣реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рддрд░реНрдХ println("hey") if x > 0
рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрднреА рднреА рд╢реЙрд░реНрдЯ-рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП if x then y
рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░-рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рджреЛ рд╡рд┐рдЪрд╛рд░ рдЕрдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред
@ H-225 рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреАрдм рдФрд░ рдЕрдВрддрддрдГ рдЧреИрд░-рдЬреВрд▓рд┐рдпрди рд▓рдЧрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд┐рдирд╛ end
рд╡рд╛рд▓реА рдирдИ рд▓рд╛рдЗрди рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рдеред
рдпрд╣ рдЕрднреА рднреА рдПрдХ рд╕рдВрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреБрдГрд╕реНрд╡рдкреНрди рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдкрд╛рджрдХреЛрдВ (рдЬреИрд╕реЗ рд╡рд┐рдо) рдХреЛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рд╢рд░реНрдд рдпрд╛ рдХреНрд░рд┐рдпрд╛ рдХреНрдпрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрдирдХреЗ рдкрд╛рд╕ рдЬреВрд▓рд┐рдпрд╛ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдмрд┐рдирд╛ рдЬрд╛рдирдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ - рдмрд▓реНрдХрд┐ рд╡реЗ if
рдФрд░ end
рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреА рдирд┐рдпреБрдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░реЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдо рдХреЛ рдпрд╣ рдкрд╣рдЪрд╛рдирдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ end
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдирд┐рд░реНрдгрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВред
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ:-1: рдореЗрд░реА рдУрд░ рд╕реЗ if x y
рдХреЗ рд▓рд┐рдПред рдореИрдВ рдЙрд╕ рдкрд░ if x then y
рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдЫреЛрдЯреЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред :рдЬреАрдн рдЪрд┐рдврд╝рд╛рдирд╛ рдЖрдВрдЦ рдорд╛рд░рдирд╛:
рдХреНрдпрд╛ рдХреЗрд╡рд▓ рдЗрдл-рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдирд░реА рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ? рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ if-statement рдХреА рдирдХрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
condition ? if_condition_true_eval_expr : nothing
рдХреНрдпреЛрдВ рди рд╕рд┐рд░реНрдл рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рдХреЛрд▓рди рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рдЗрдл-рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╕ рд╣реЛрдЧрд╛
condition ? if_condition_true_eval_expr
рдЗрд╕ рддрд░рд╣ рдЖрдкрдХреЛ рдХреЛрдИ рдирдпрд╛ рдХреАрд╡рд░реНрдб рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛?
@esprof рдордЬреЗрджрд╛рд░ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд, рдореИрдВ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛: рдЗрд╕ рдЬреБрд▓реЗрдк рдореЗрдВ рдЕрдЧрд░-рддрдм-рд╡рд┐рдЪрд╛рд░ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рдпрджрд┐-рддрдм-рдЕрдиреНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
if cond then a else b
рдЬрд╣рд╛рдВ рдЕрдиреНрдп рдЦрдВрдб рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдпрд╣ рд╕рдорд╛рди рд░реВрдк рд╕реЗ cond ? b : c
рд╕реЗ рднреА рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд╕реА-рд╕реНрдЯрд╛рдЗрд▓ рдЯрд░реНрдирд░реА рд╕реЗ рджреВрд░ рд╣реЛрдиреЗ рдФрд░ рдЕрдзрд┐рдХ рдорд╛рдирд╡-рдкрдардиреАрдп рдХреЛрдб рдХреА рдУрд░ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред (рдореИрдВрдиреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ condition ? a : nothing
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ - рдпрд╣ рдПрдХ рд╣реИрдХ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ ('рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдерд╛, nothing
рдХреБрдЫ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛) рдФрд░ рдпрд╣ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рднреНрд░рдорд┐рдд рд╣реИ)ред
рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпреЗ рд╕рднреА рд╡рд┐рдЪрд╛рд░ рдПрдХ рд╕рд╛рде рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ?
@andyferris рд╣рд╛рдБ рд╡рд╣ рджреВрд╕рд░рд╛ рд╣реИ, рдкрд╛рдЗрдереЛрдирд┐рдХ, рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рддрдирд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЧрдгрд┐рддрдЬреНрдЮ рдЖрдо рддреМрд░ рдкрд░ рддреАрдЦрд╛рдкрди рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХрд╣реВрдВ рддреЛ рдореИрдВ рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдЦреБрд╢ рд░рд╣реВрдВрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдореБрдЭреЗ рдХреНрд▓рдВрдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
if condition; eval_expr; end
рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдореИрдВ рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдЦреБрд╢ рд░рд╣реВрдВрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдореБрдЭреЗ рдХреНрд▓рдВрдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
if condition; eval_expr; end
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ!
рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореБрдЭреЗ x && y рд╕рдВрдХреЗрддрди рдкрд╕рдВрдж рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рджреБрд░реБрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ред
рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдПрдХ рдСрдкрд░реЗрдЯрд░-рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдкрд╣рд▓рд╛ рдХрдерди рдЧрд▓рдд рд╣реЛрдиреЗ рдкрд░ false
рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдмрд╣реБрдд рдХреБрдЫ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ a ?: b
рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреЗ рджреЛ-рддрд░реНрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╕рдВрдж рд╣реИред
?
рд╡рд┐рдЪрд╛рд░ рдкрд░ #6823 рдореЗрдВ рдХрд╛рдлреА рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, рдЙрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдиреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдЙрд╕ рдЪрд░реНрдЪрд╛ рд╕реЗ рдпрд╣рд╛рдВ рдЖрдпрд╛, рд▓реЗрдХрд┐рди рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдЬрдЧрд╣ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ if a then b
рдФрд░ рдмрд┐рдирд╛ :
рдХреЗ рдХреЗрд╡рд▓ ?
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреБрдЫ рд╣рдж рддрдХ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рд╡реЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рддрдм рддрдХ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдореИрдВ @EricForgy рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рд╕реЗ &&
рдФрд░ ||
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП (рдЬреИрд╕реЗ x || throw(y)
) рд╡реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЕрд╕реНрдкрд╖реНрдЯ рдпрд╛ рдЕрдкрдардиреАрдп рдирд╣реАрдВ рд▓рдЧрддреЗред рд╕рд╛рде рд╣реА, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ x && y
false
$ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрджрд┐ x
рдЧрд▓рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╢рд╛рдпрдж рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП , рдЬрд╣рд╛рдВ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред
рд╕реА-рд╕реНрдЯрд╛рдЗрд▓ рдЯрд░реНрдирд░реА рдмрд╣реБрдд рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рд╣реИрдВ; рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдЧрдгрд┐рддрдЬреНрдЮ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдорд╣рддреНрд╡ рджреЗрддреЗ рд╣реИрдВред рдПрдХрдорд╛рддреНрд░ рдРрд╕реА рднрд╛рд╖рд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдСрдлрд╣реИрдВрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдЯрд░реНрдирд░реА рд╣реИ рд▓реЗрдХрд┐рди рд╕реА-рд╕реНрдЯрд╛рдЗрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдкрд╛рдпрдерди рд╣реИ, рдФрд░ рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдореИрдВ рдкрд╛рдЗрдерди рдЯрд░реНрдирд░реАрдЬрд╝ рдХреЛ рддреБрдЪреНрдЫ рдЬрд╛рдирддрд╛ рд╣реВрдВред condition ? action1 : action2
рдЬрдм рддрдХ рдЖрдк рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдФрд░ рд╕рдореНрдорд╛рди рд░реЗрдЦрд╛ рдХреА рд▓рдВрдмрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдФрд░ рдкрдардиреАрдп рджреЛрдиреЛрдВ рд╣реЛрддреЗ рд╣реИрдВред рд▓рдВрдмреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
if condition
somelongaction1
else
somelongaction2
end
рд╡реИрд╕реЗ рднреА рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдПред
then
рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХрд╛ рдмрд┐рдВрджреБ, рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рднрд▓реЗ рд╣реА рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд░ рд╕реЗ, &&
рдФрд░ ||
рдореБрдЭреЗ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд▓рдЧрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ then
рдХреЛ if x y
, x ? y
, рдпрд╛ x ? y : nothing
рд╕реЗ рдЕрдзрд┐рдХ рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдореЗрдВ рд▓реЗ рдЬрд╛рдКрдВрдЧрд╛ред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ y if x
рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИред рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░реВрдмреА рдФрд░ рдкрд░реНрд▓ рд╕реЗ рдкрд░реЗ рдкреВрд░реНрд╡рддрд╛ рд╣реИ: рдЧрдгрд┐рддреАрдп рдХреЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реИ
рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП &&
рдпрд╛ ||
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _like_ рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдХрднреА рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ x && y = z
рдореЗрд░реА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ y if x
; рдЬреЛ if x y
рднреА рдЬрд╛рддрд╛ рд╣реИред
IMO, x ? y
_smells_ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐ рдХреА рддрд░рд╣, рдЪрд╛рд╣реЗ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдиреНрдп рд╣реЛ рдпрд╛ рдирд╣реАрдВред
x ?? y
рд╢рд╛рдпрдж? x ?: y
рдПрдХ GNU C рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ x ? x : y
, рдЗрд╕рд▓рд┐рдП ??
рдФрд░ ?:
&&
рдФрд░ ||
рдирд┐рдореНрди-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рдореЗрд░реА рд╡рд░реАрдпрддрд╛ рдХрд╛ рдХреНрд░рдо: y if x
== x ?? y
< if x then y
< x && y
< x ? y
< if x y
ред
рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВред рдореИрдВ ?
, &&
, рдФрд░ ||
рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдкреГрдердХреНрдХрд░рдг рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ cond ? expr
рд╕рд┐рдВрдЯреИрдХреНрд╕ &&
рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдореИрдВ рдЕрдХреНрд╕рд░ goodcondition || return
рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рд╡рд╛рд╣ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдХрд┐ if-statement рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЦреЛрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ (рдпрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдордХрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ)
:
рдХреЗ рдмрд┐рдирд╛ рдЯрд░реНрдирд░реА рдХреЗ рд▓рд┐рдП, else
рд╢рд░реНрдд рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд if
/ elseif
рдмреНрд▓реЙрдХ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
x==5 ? f1() :
x==6 ? f2()
рдФрд░ рдХреЛрдИ рдЗрд╕реЗ рд╕реНрд╡рд┐рдЪ-рдЯрд╛рдЗрдк рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
match x:
5 ? f1() :
6 ? f2()
рдкрдардиреАрдпрддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдХрдИ рдЫреЛрдЯреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ/рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд╕рд╛рде рд▓рдЧрд╛рддрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рд╢рд░реНрддреЛрдВ/рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЗрди рдЕрдк рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдкрдардиреАрдп (рд╕рд╛рдл рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде !!) рд╣реИред
рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП, рдореИрдВ where
рдпрд╛ when
рдХреЛ if
рдХреЗ рдкреБрдирд░реНрдкреНрд░рдпреЛрдЬрди рд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рд╣реИ, рд╕рд╢рд░реНрдд рдирд╣реАрдВ:
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
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмреАрдЪ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдЬрд╛рддреЗ рд╣реИрдВред
рдкрд░реНрд▓/рд░реВрдмреА рд╕рд┐рдВрдЯреИрдХреНрд╕ "рдПрдХреНрд╢рди рдЗрдл рдХрдВрдбреАрд╢рди" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╕рдВрдж рд╣реИ, рдФрд░ рдЬрдм рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдпрд╣ рдкрдардиреАрдпрддрд╛ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдореЗрд░рд╛ рдпрд╣ рднреА рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдХрднреА-рдХрднреА _increases_ рдкрдардиреАрдпрддрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
throw(DomainError()) if some_condition || some_other_condition && so_on
"рдереНрд░реЛ рдбреЛрдореЗрди рддреНрд░реБрдЯрд┐ рдЕрдЧрд░" рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрдирдкреБрдЯ рдкрд░ рдПрдХ рд╡рд┐рд╡реЗрдХ рдЬрд╛рдВрдЪ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реА рд╣реИред рдлрд┐рд░ рдЖрдк рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╕рд╢рд░реНрдд рд╡рд┐рд╡рд░рдг рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВред
рдкрд┐рдЫрд▓рд╛ рд╡рд╛рдХреНрдп рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдореЗрдВ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдХреНрд░рд┐рдпрд╛ "рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдкрд░ рдЬрд╛рдПрдВ" рдкрд╣рд▓реЗ рдЖрддреА рд╣реИ, рдФрд░ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг "рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ" рдПрдХ рдЕрдзреАрдирд╕реНрде рдЦрдВрдб рдореЗрдВ рдЖрддрд╛ рд╣реИред рдлрд┐рд░, рдкрд╛рдардХ рд▓рдЧрднрдЧ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдХреНрдп рдХреЗ рдЕрдВрдд рддрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ "рдЕрдЧрд░" рд╢рдмреНрдж рдХрд╛ рдкрд╛рд▓рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред
(рдпрджрд┐ рдореИрдВ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдПрдХ рдЖрддреНрдо-рд╕рдВрджрд░реНрднрд┐рдд рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдХреНрдп рднреА рджреВрдВрдЧрд╛ред)
рдПрдХ рдкреБрд░рд╛рдиреЗ рдкрд░реНрд▓ рд╣рд╛рде рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЗрд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕реЗ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд░рдЦрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рдмрд┐рдХреНрд░реА рд╣реЛрдЧреА рдЬреЛ рдкрд░реНрд▓ рдкреГрд╖реНрдарднреВрдорд┐ рд╕реЗ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВред рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЕрдЬреАрдм рд╣реИ рдЬрд╣рд╛рдВ рдореВрд▓реНрдпрд╛рдВрдХрди рдЖрджреЗрд╢ рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдирд╣реАрдВ рд╣реИред рдмреЗрд╢рдХ, рд╕рдордЭ рдареАрдХ рдпрд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП тАНтЩВя╕П
рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрди рддрдм рд╣реИ: рдХреНрдпрд╛ рд╣рдо рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рдпрд╛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдпрд╣ рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ 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 рдиреЗ рд▓рд┐рдЦрд╛:
рдкрд░реНрд▓/рд░реВрдмреА-рд╢реИрд▓реА рдЕрдЧрд░/рд╕рдВрд╢реЛрдзрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдорд┐рд╢реНрд░рдг рдХрд░реЗрдЧрд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ:
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
рдЗрд╕рдХрд╛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдиреЗ рдХрд╛ рднреА рд▓рд╛рдн рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдЧрд░-рдлрд┐рд░ рдмрд┐рдирд╛ рдЕрдВрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдФрд░ рдпрд╣ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рд▓рд┐рдП рднреА рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ [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
рд╕рдЪ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм 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
рдореИрдВрдиреЗ рдЕрднреА рдХреБрдЫ рдФрд░ рджреЗрдЦрддреЗ рд╣реБрдП рдЗрд╕ рдЬреВрд▓рдк рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрд╛ред
рдореИрдВ рдЕрдм рднреА if a then b
рд╕рд┐рдВрдЧрд▓ рд▓рд╛рдЗрди рдлреЙрд░реНрдо рдЬреИрд╕рд╛ рдХреБрдЫ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ; рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди a && b
рдХрдИ рд╡рд░реНрд╖реЛрдВ рддрдХ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдХрд╛рдлреА рдЕрдкрдардиреАрдп рд╣реИ: рдЗрд╕реЗ рд╕реАрдзреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рд╡рд╛рдХреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд╡рд╛рдЧрдВрддреБрдХреЛрдВ рдХреЛ a && b
рдореБрд╣рд╛рд╡рд░реЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдПрдХ рддрд░рд╣ рд╕реЗ рд╢рд░реНрдордирд╛рдХ рд╣реИ рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕реНрд╡рдпрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдереЛрдбрд╝рд╛ рд▓рдВрдмрд╛ рд╣реИред
рдЗрд╕реЗ рд╕реАрдзреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рд╡рд╛рдХреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ
a && b
рдХреЛ "рдП рдФрд░ рдмреА" рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реИ рдЬреИрд╕реЗ "рдЕрдЧрд░ рдП рддреЛ рдмреА рднреА рдХрд░реЗрдВ"
a || b
рдХреЗ рд░реВрдк рдореЗрдВ "рдП рдпрд╛ рдмреА" рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реИ "рдП рд╕рдЪ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдмреА рдХрд░реЗрдВ"
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рдЕрд╡рд╕рд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЬрд┐рддрдирд╛ рд╣реЛ рд╕рдХреЗ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдм рдХрдИ рд╕рд╛рд▓реЛрдВ рд╕реЗ) рдореИрдВ рд╡рд╛рдХреНрдп рдХреЗ рд░реВрдк рдореЗрдВ "рдП рдФрд░ рдмреА" рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред рдпрд╣ рд╣рд░ рдмрд╛рд░ рд╕рд┐рд░реНрдл рдПрдХ рд╣рд▓реНрдХрд╛ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рдЕрд╕рдВрдЧрддрд┐ рд╣реИред
рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ "рдП рдпрд╛ рдмреА" рдХреЛ рдХрд╛рдлреА рдкрдардиреАрдп рдкрд╛рдпрд╛ рд╣реИред
рдордЬреЗ рдХреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд╣рд▓реВ рдЖрдЬ рджреЛ рдмрд╛рд░ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рд╕рд╛рдордиреЗ рдЖрдПред
рд╕реБрдмрд╣ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреВрд▓рд┐рдпрд╛ рдкреАрдЖрд░ рдерд╛ рдЬрд┐рд╕рдиреЗ if ... end рдХреЗ рдмрдЬрд╛рдп if ... end
&&
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдореИрдВрдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐, рдПрдХ рдХреЛрдб рд░реАрдбрд░ (рдкреАрдЖрд░ рд╕рдореАрдХреНрд╖рдХ) рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдФрд░ рдпрд╛рдж рдХрд░рдирд╛ рдЖрд╕рд╛рди рдерд╛) ) рд╢рд╛рдЦрд╛рдПрдБ рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рднреА рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдирд╣реАрдВ рднреАред рдЙрджрд╛рд╣рд░рдг a() && b!()
рдлреЙрд░реНрдо рдХрд╛ рдерд╛ рдЬрд╣рд╛рдВ b!
рдЕрддреНрдпрдВрдд рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд-рд╡рд╛рдИ рд╣реИред (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, b!()
рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдпрд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ рддреБрд░рдВрдд рдЦрддрд░рдирд╛рдХ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рджрд┐рдорд╛рдЧ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдерд╛ рдЬрдм !a()
рдФрд░ рдпрд╣ рдорд╛рдорд▓рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред
рджреЛрдкрд╣рд░ рдореЗрдВ, рдПрдХ рдЕрдиреНрдп рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░ (рдЬреЛ рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛) рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐, рджреЛрд╕реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рддреЗ рд╕рдордп, рдХрднреА-рдХрднреА рд╡рд╣ "рдХреНрдпрд╛ рдпрд╣ a
рдпрд╛ b
рдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИред " рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде "рд╣рд╛рдБ"ред рдЙрдирдХреЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░ рджреЛрд╕реНрдд рд╣реА рд╕рдордЭреЗрдВрдЧреЗ-рдмрд╛рдХреА рд╕рдм рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╕рдордЭреЗрдВрдЧреЗред рд╕рд╛рдорд╛рдиреНрдп рд▓реЛрдЧ рдРрд╕рд╛ рдирд╣реАрдВ рд╕реЛрдЪрддреЗред рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдореЗрд░реЗ рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдФрд░ рдореБрдЭреЗ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рдКрдкрд░ рд╕реНрдЯреАрдлрди рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЬреЛ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЙрдирдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реЛрдЧрд╛)ред
рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдореЗрд░рд╛ рд░реБрдЦ рдпрд╣ рд╣реИ рдХрд┐ &&
(рдпрд╛ ||
) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдордЬрдмреВрдд рдкреАрдПрд▓ рдкреГрд╖реНрдарднреВрдорд┐ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрдардиреАрдп рд╣реИ, рдФрд░ рдлрд┐рд░ рднреА рдереЛрдбрд╝рд╛ рд╕рд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ/рджреГрд╢реНрдп рднрд╛рд░ (рдмрд╕ &
рдмрдирд╛рдо &&
рдореЗрдВ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБ-рд╡рд┐рд╖рдпрдХ рдЯреАрдореЛрдВ (рд╡реИрдЬреНрдЮрд╛рдирд┐рдХреЛрдВ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХрд╛ рдорд┐рд╢реНрд░рдг) рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЖрдзреА рдЯреАрдо рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддрд╛рд░реНрдХрд┐рдХ &(::Bool, ::Bool) --> Bool
рдФрд░ рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ &&(::Bool, ::Any) --> Any
рдХреЗ рдмреАрдЪ рдПрдХ рдЕрдЬреАрдм рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реИ (рд╣рд╛рдВ, рдмрд╛рдж рд╡рд╛рд▓рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдореЗрд░реА рдмрд╛рдд рдорд┐рд▓ рдЬрд╛рдПрдЧреА) . рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдкреВрд░реНрд╡ рдХреЛ "рдХрд╛рд░реНрдпрд╛рддреНрдордХ" рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬрдмрдХрд┐ рдмрд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдХреНрд╕рд░ рд╕рдВрднрд╛рд╡рд┐рдд рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджреВрд╕рд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реЛрдЪрддреЗ рд╣реБрдП, рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлреНрд▓реЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╕рднреА рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдХрд┐ && рдХрд╛ "рдХрд╛рд░реНрдпрд╛рддреНрдордХ" рдЙрдкрдпреЛрдЧ &&
&
рдЕрдиреБрдХреВрд▓рди рд╣реИред рдпрд╣ рдореЗрд▓ рдХрд░рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдард┐рди рд╣реИ рдХрд┐ рд╡реЗ рдЧреИрд░-рд╢реБрджреНрдз рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВред
рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдкреНрд░рд╛рдердорд┐рдХрддрд╛" 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
рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдХрд╛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдиреЗ рдХрд╛ рднреА рд▓рд╛рдн рд╣реИ, рдЬреЛ
if
-then
рдмрд┐рдирд╛end
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ if-then-else
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП _рдмрд╣реБрдд рдХреБрдЫ рдорд┐рд╕рд╛рд▓ рд╣реИ:
рдФрд░ рдЙрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╡рди-рд▓рд╛рдЗрдирд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рдЕрд╡рдЧрдд рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рдореБрдЭреЗ '&&' рдФрд░ '||' рдХреЗ рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрд░реНрдз-рдХреЙрд▓рди рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕рд░рд▓ if-statement рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯрд┐рдВрдЧ рдПрдХ рдлрд┐рдХреНрд╕ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ: рдПрдХ рд╣рдордо рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрд╕ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рджреЗрдЦреЗ рдмрд┐рдирд╛ рд╕рдордЭрдирд╛ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдпрд╛ рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рджреВрд╕рд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗрд╡рд▓ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдиреЗрд╕реЗрдХреЗрд░реАред рдЧреИрд░-рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдкрдарди (рдПрдХ рдорд╛рдирд╡ рдХреЗ рд░реВрдк рдореЗрдВ) рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рджреЛрдиреЛрдВ рдЦрд╛рдорд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдРрд╕рд╛ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рдирд╣реАрдВ рд╣реВрдВ, рддреЛ рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рджреЛрдиреЛрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
@if рд╕реНрдерд┐рддрд┐ рдкрд░рд┐рдгрд╛рдо
рдирдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреЛ рдПрдХ рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ! рд╢рд░реНрдд рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ @ifnot рдореИрдХреНрд░реЛред рдпрд╣ рд╕рд┐рд░реНрдл рдореИрдВ рд╣реВрдВ, рдпрд╛ рдпрд╣ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╕реЗ рдореБрдХреНрдд рд╣реИ, рдорд╛рдирд╡ рдХреЗ рд▓рд┐рдП рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рд╕рднреА рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣реИрдВ?
рдРрд╕рд╛ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
^ рдореИрдВ рдЗрд╕рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВред
@if рд╕реНрдерд┐рддрд┐ рдкрд░рд┐рдгрд╛рдо
рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд▓рдЧрднрдЧ рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ:
if condition result end
рдиреАрдЪреЗ рдкреВрд░реНрдг рдЕрдЧрд░-рддрдм-рдФрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреВрдВрдХрд┐ 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
рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝рдирд╛ рдореИрдХреНрд░реЛ рдмрдирд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╢рд╛рдпрдж рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж ^ _ ^ рдХреНрдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдПрдХ-рдкрдВрдХреНрддрд┐ рдЗрдлрд╝-рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ? рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ ?If<enter>
рдХрд░рддрд╛ рд╣реИ рддреЛ рдкрд░рд┐рдгрд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╣реИ ... рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореВрд▓ рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВ "рдЕрдЧрд░ рдПрдХреНрд╕ рддреЛ рд╡рд╛рдИ" рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВ, рднрд▓реЗ рд╣реА рдореБрдЭреЗ рдпрд╣ "рдЕрдЧрд░" рдХреЗ рдПрдХ-рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣реЗ, рдХреЛрдб рд▓рд┐рдЦреЗрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╣реИ рдирд╛?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрд▓реНрдкрдордд рдореЗрдВ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдиреЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЕрдкрдирд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рдкрд╛рдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
println("positive") if x > 0
ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣if x > 0 println("positive") end
рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдкрдардиреАрдпрддрд╛ рдХреА рдХреАрдордд рдкрд░ рдЖрддрд╛ рд╣реИредрдореИрдВ рдЗрд╕реЗ рдмрд╛рддрдЪреАрдд рдХреА рддрд░рд╣ рд╕реЛрдЪрддрд╛ рд╣реВрдВ:
рдЬреВрд▓рд┐рдпрд╛: "рдореИрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░реВрдБрдЧрд╛ ..."
рд╣реЗрд░реЛрд▓реНрдб: "рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!"
рдЬреВрд▓рд┐рдпрд╛: "... рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА рдЬрдм рдХреБрдЫ рд╢рд░реНрдд рдкреВрд░реА рд╣реЛред"
рд╣реЗрд░реЛрд▓реНрдб: "рдУрд╣ред :("
рдмрдирд╛рдо
рдЬреВрд▓рд┐рдпрд╛: "рдЕрдЧрд░ рдХреБрдЫ рд╢рд░реНрдд рдкреВрд░реА рд╣реЛрддреА рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░реВрдВрдЧреАред"
рд╣реЗрд░реЛрд▓реНрдб: "рдареАрдХ рд╣реИ, рдЕрдЪреНрдЫрд╛ред"