Julia: рдорд┐рдиреА рдЬреВрд▓рдк: рдпрджрд┐ x рддреЛ y

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдордИ 2016  ┬╖  53рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: JuliaLang/julia

рд╡рд┐рднрд┐рдиреНрди рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ, рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреИрд╕реЗ:

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 ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ if x > 0 println("positive") end рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдкрдардиреАрдпрддрд╛ рдХреА рдХреАрдордд рдкрд░ рдЖрддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдмрд╛рддрдЪреАрдд рдХреА рддрд░рд╣ рд╕реЛрдЪрддрд╛ рд╣реВрдВ:

рдЬреВрд▓рд┐рдпрд╛: "рдореИрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░реВрдБрдЧрд╛ ..."
рд╣реЗрд░реЛрд▓реНрдб: "рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!"
рдЬреВрд▓рд┐рдпрд╛: "... рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА рдЬрдм рдХреБрдЫ рд╢рд░реНрдд рдкреВрд░реА рд╣реЛред"
рд╣реЗрд░реЛрд▓реНрдб: "рдУрд╣ред :("

рдмрдирд╛рдо

рдЬреВрд▓рд┐рдпрд╛: "рдЕрдЧрд░ рдХреБрдЫ рд╢рд░реНрдд рдкреВрд░реА рд╣реЛрддреА рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░реВрдВрдЧреАред"
рд╣реЗрд░реЛрд▓реНрдб: "рдареАрдХ рд╣реИ, рдЕрдЪреНрдЫрд╛ред"

рд╕рднреА 53 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкрд░реНрд▓/рд░реВрдмреА-рд╢реИрд▓реА рдЕрдЧрд░/рд╕рдВрд╢реЛрдзрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдорд┐рд╢реНрд░рдг рдХрд░реЗрдЧрд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ:

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 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИрдВ:

  1. рдпрд╣ рдирдпрд╛ then рдХреАрд╡рд░реНрдб рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред
  2. рдпрд╣ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рд╣реИ if x y end рд╕реЗ if x then y ; x && y рдФрд░ рднреА рдЫреЛрдЯрд╛ рд╣реИред
  3. 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 рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИред рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░реВрдмреА рдФрд░ рдкрд░реНрд▓ рд╕реЗ рдкрд░реЗ рдкреВрд░реНрд╡рддрд╛ рд╣реИ: рдЧрдгрд┐рддреАрдп рдХреЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реИ

image

рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП && рдпрд╛ || рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _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> рдХрд░рддрд╛ рд╣реИ рддреЛ рдкрд░рд┐рдгрд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╣реИ ... рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореВрд▓ рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВ "рдЕрдЧрд░ рдПрдХреНрд╕ рддреЛ рд╡рд╛рдИ" рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВ, рднрд▓реЗ рд╣реА рдореБрдЭреЗ рдпрд╣ "рдЕрдЧрд░" рдХреЗ рдПрдХ-рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣реЗ, рдХреЛрдб рд▓рд┐рдЦреЗрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╣реИ рдирд╛?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

iamed2 picture iamed2  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

m-j-w picture m-j-w  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

musm picture musm  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sbromberger picture sbromberger  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dpsanders picture dpsanders  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ