рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!
рдПрдХ рдЗрдЪреНрдЫрд╛ рдереА (рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЕрд╡рд╕рд░!) рдЕрджреНрднреБрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдбреАред рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдореБрджрд╛рдп рдХреЛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЕрднреА рднреА рдиреНрдпреВрдирддрдо рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдФрд░ рд╣рдм рдкрд░ рднреА рдХрдо рд╣реИред
рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдиреЗ рдЙрд╕ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рд╕рднреА рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣, рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, "рд╢реВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛", рдХрд┐ рдЙрд╕рдХрд╛ рдХреЛрдИ рднрд╡рд┐рд╖реНрдп рдирд╣реАрдВ рд╣реИред рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рдпрд╣ рд▓реЗрдЦ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдЕрджреНрднреБрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЧрд▓рдд рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рджреВрд░ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рд╕рд╛рде рд╣реА, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрдирддрд╛ рдХреЛ рдереЛрдбрд╝реА рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдВред
рд╣рдо рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ?
рд╣рд╛рдВ, рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдореИрдВ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ "рдХреЛрдб рдХреА 200 рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрд▓ рд╕рд░реНрд╡рд░," рдЬреИрд╕рд╛ рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рднрд╛рд╖рд╛ рдХреА рд╢рдХреНрддрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдирд╣реАрдВ рд╣реИред
рдФрд░ рдореИрдВ рднрд╛рд╖рд╛ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░реВрдВрдЧрд╛, рдФрд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЗрд╕реЗ C ++ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди (рдпрд╛ рдПрдирд╛рд▓реЙрдЧ) рдХреЗ рд░реВрдк рдореЗрдВ рдмрдврд╝рд╛рд╡рд╛ рджреВрдВрдЧрд╛ - рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛ, рдФрд░ рдЕрдиреНрдп рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдпреЛрдЧреНрдп рдкреНрд░рддрд┐рдпреЛрдЧреА рдХреЗ рд░реВрдк рдореЗрдВред
рд╣рдо рд╕рднреА рдореВрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ: рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ, рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ, рдХрд╛рд░реНрдпрд╛рддреНрдордХред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рджреЛрдиреЛрдВ рд╕реНрдереИрддрд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╢реНрд░реЗрдгреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдЕрдкрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП: рдХрд╕рдо рдирд╣реАрдВ, рдмреЗрд╢рдХ, рдореИрдВрдиреЗ рд╕рднреА рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдзреБрдирд┐рдХ рд▓рд╛рдЧреВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдореБрдЦреНрдп рджрд┐рд╢рд╛рдПрдВ рд╣реИрдВредрд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдбреА рднрд╛рд╖рд╛ рдЗрди рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рддрд░реАрдХреЗ рд╕реЗ (рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдореЗрдВ рдЪрд▓рдиреЗ рдХреЗ рдЬреЛрдЦрд┐рдо рдкрд░: рдпрд╣ рд╕реА ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╣реИ) рдХрд┐ рдпрд╣ рднрд╛рд╖рд╛ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╢рд╛рдмреНрджрд┐рдХ рд╣реИред *
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА:
D, C рдЬреИрд╕реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд, рд╕реНрдЯреЗрдЯрд┐рдХ рдФрд░ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рд╣реИред рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рд╣реИред рднрд╛рд╖рд╛ рдореЗрдВ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рдЪреБрдкрдЪрд╛рдк рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ, рд╕реАрдзреЗ рд╕реА рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ - рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд рдореЙрд▓реЛрдХ рдФрд░ рдореБрдлреНрдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред
рднрд╛рд╖рд╛ рдореЗрдВ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рд╣реИ (рдареАрдХ рд╣реИ, рд▓рдЧрднрдЧ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗ), рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛ рд╣реИред ** рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдЬрд╛рд╡рд╛ рдФрд░ рд╕реА # рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдХреА рд╢рдХреНрддрд┐ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп рдХреЛ рднреА рдХрдо рдХрд░ рджреЗрддреА рд╣реИ) рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕реА рд╕реНрддрд░ рдкрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрдЪрд╛рд░ рдирд╣реАрдВ рдЦреЛрддреА рд╣реИ (рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреА рдЧрддрд┐!)ред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рд╣рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдЬреЛ% langname% рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдХреЗ рдмрд┐рдирд╛ рднреА D рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!
рдЦреИрд░, рдпрд╣ рд╕рдм рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╣реИ, рдЖрдЗрдП рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднрд╛рд╖рд╛ рдореЗрдВ (рдЙрдЪрд┐рдд рд╕реАрдорд╛ рдХреЗ рднреАрддрд░) рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдПрдХ рд╕рд░рд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ: рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХред
рдЦреИрд░, рдпрд╣рд╛рдБ рдХреБрдЫ рдореВрд▓ рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ рдмрд╣реБрдд рд╕рд╛рд░реНрдердХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд╣реИ:
int inc(int a) { return a+1; }
int inc(int a) { return a+1; }
C ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЬреЛрдбрд╝ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реИ (рдЗрд╕ рдЬрдЧрд╣, рдкрд╛рд╕реНрдХрд▓ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЯреНрд░рд╛рдпрдореНрдл):
int incTwice(int a) { int inc(int a) { return a+1; } return inc(inc(a)); }
int incTwice(int a) { int inc(int a) { return a+1; } return inc(inc(a)); }
рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рд╣реИ рдирд╛?
рд╢рд╛рдпрдж рдпрд╣ рд╕рдм рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╢реИрд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реИрд▓реА: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реА рддрд░рд╣ рдХреА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ:
int main() { auto inc = (int a) {return a+1;}; writeln(inc(1)); }
int main() { auto inc = (int a) {return a+1;}; writeln(inc(1)); }
рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рд╕реНрд╡рдд: рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЗ рдмрд┐рдирд╛ рдШреЛрд╖рдгрд╛рдПрдБ рд╣реИрдВ:
int function(int) inc = function (int a) {return a+1;};
int function(int) inc = function (int a) {return a+1;};
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреА рдореЗрдВ, рдЖрдк рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдХреНрд▓реЛрдЬрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред
int c = 1; int delegate(int) inc = delegate (int a) {return a+c;};
int c = 1; int delegate(int) inc = delegate (int a) {return a+c;};
рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдбреЗрд▓реАрдЧреЗрдЯреНрд╕ рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд╡реЗ рдмрд╣реБрдд рдкрд╛рд░рджрд░реНрд╢реА рд╣реИрдВ рдФрд░ рдХреЛрдб рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд╡рд░реЛрдз рдХреЗ рдХрд╛рд░рдг рд╢реЛрд░ рдирд╣реАрдВ рд╣реИред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдбреА рдкрд╛рдпрдерди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╣реИрд╕реЗрд▓ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ "рдЪрд╛рд▓" рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛: рд╢реБрджреНрдз рдХрд╛рд░реНрдпред рдЖрдЗрдП рджреЗрдЦреЗрдВ:
pure int inc(int a) { return a+1; }
pure int inc(int a) { return a+1; }
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╢реБрджреНрдз рд╣реИ, рдЕрд░реНрдерд╛рдд рдЗрд╕рдореЗрдВ рд╕рдореНтАНрдорд┐рд▓рд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЕрдкрдиреА рдФрд░ рдкреНрд░рдгрд╛рд▓реА рджреЛрдиреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рд╕рдорд╛рди рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдорд╛рди рджреЗрдЧрд╛ред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ, рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдХреНрд╖реЗрддреНрд░ рдорд┐рд▓рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдХрд┐ рд╡рд╣ рд╢реБрджреНрдзрддрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рднреА рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛:
int c = 1; pure int inc(int a) { return a+c;
int c = 1; pure int inc(int a) { return a+c; // , . }
рдЕрдм рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рд╕реНрдЯрд╛рдЗрд▓ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдФрд░ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдирд╛ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реЛрдЧреА:
class A { int v; int inc(int a) { return a+1; } }
class A { int v; int inc(int a) { return a+1; } }
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд┐рд╕реА рдХреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧреА!
class B : A { int v; override int inc(int a) { return a+2;
class B : A { int v; override int inc(int a) { return a+2; // trollface } }
рдФрд░ рдЕрдЧрд░ рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрджреЗрд╢ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ - рдпрд╣ OOP рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
рдореИрдВ рдпрд╣ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рдХрд┐ рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд░реНрдЧреЛрдВ рдХреА рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд░рд╛рд╕рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рд╣реЛрддреА рд╣реИред
рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдЪрд╛рд▓ рднреА рд╣реИ: рд╡рд░реНрдЧреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдмрдВрдзреЛрдВ рдХреЗ рдЧреНрд░рд╛рдл рдХреЗ рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдХрдИ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреЛ рд▓реЛрдЧ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдВ рд╕рд╛рдЬрд╝рд┐рд╢ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛ - рдЕрд▓реЗрдХреНрдЬреЗрдВрдбреНрд░реЗрд╕реНрдХреБ рдХреА рдХрд┐рддрд╛рдм "рдж рдбреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛"ред *** рдкрдврд╝реЗрдВред
рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдордЬреЗрджрд╛рд░ рдФрд░, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕реБрд╡рд┐рдзрд╛ рд╣реИред
рдореИрдВрдиреЗ рдФрд░ рдХреНрдпрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛? рдЕрд░реЗ рд╣рд╛рдБ, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рд░рд╛рд╕рддред
C ++ рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдЙрдирдХреЗ рдХреЛрдб рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдереИрддрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рд╕рдВрдХрд▓рд┐рдд рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдкреНрд░рд╛рдХреГрддрд┐рдХ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдпрд╣рд╛рдБ рднреА рд╕рдВрднрд╡ рд╣реИ (рдмрд╣реБрдд рд╕реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЦреБрдж рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ OOP рдХреЛрдб рдереЛрдбрд╝рд╛ рдмреЛрд▓реНрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ):
class A { string s; this() { s = ""; } // , , - , . this(string s) { this.s = s; } override string toString() // Object { return s; } } A createA(string s) { class B : A // , ! { this() { s = ""; } this(string s) // . { this.s = s; } override string toString() { return "trollface"; } } return new B(s); } void main() { A a = new A("hi!"); A b = createA("hi!"); writeln(a, " : ", b); // , "hi! : trollface" readln(); }
class A { string s; this() { s = ""; } // , , - , . this(string s) { this.s = s; } override string toString() // Object { return s; } } A createA(string s) { class B : A // , ! { this() { s = ""; } this(string s) // . { this.s = s; } override string toString() { return "trollface"; } } return new B(s); } void main() { A a = new A("hi!"); A b = createA("hi!"); writeln(a, " : ", b); // , "hi! : trollface" readln(); }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрд▓рд╕реА рдФрд░ рд╕реБрдВрджрд░рддрд╛ рдХреЗ рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рдо рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ, рд╣рдо рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
A createA(string s) { return new class A // , A { this() { s = ""; } this(string s) {this.s = s;} override string toString() { return "trollface"; } }; }
A createA(string s) { return new class A // , A { this() { s = ""; } this(string s) {this.s = s;} override string toString() { return "trollface"; } }; }
рддреЛ, рд╕рднреА рдШреЛрд╖рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рдбреА рднрд╛рд╖рд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд╛рдлреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИред
рдмреЗрд╢рдХ, рдпрд╣ рднрд╛рд╖рд╛ рдХреЛ рдЕрдЪреНрдЫрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрди рд╕рднреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреА рдПрдХ рд╕реБрдВрджрд░ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдмрд╛рддрдЪреАрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдФрд░ рдПрдХ C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП D рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рд╕рд╛рде рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕рдХреЗ рдХрд░реАрдм рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХреЛрдИ рдкрдардиреАрдпрддрд╛ рдЦреЛ рдЬрд╛рддреА рд╣реИред рди рд╣реА рджрдХреНрд╖рддрд╛, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╢реИрд▓реА рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд┐рдирд╛ рдмреИрд╕рд╛рдЦреА рдФрд░ рдмрд┐рдирд╛ рдмреИрд╕рд╛рдЦреА рдХреЗ рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддреА рд╣реИрдВред
рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдиреНрдп рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИред
рдореИрдВ рд╕реНрд╡рдпрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдЕрджреНрднреБрдд рднрд╛рд╖рд╛ рдХреЛ рд╕реАрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдЧрд░ рдпрд╣рд╛рдВ рдЧреБрд░реБ рд╣реИрдВ рдЬреЛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рд╕рд╣рд░реНрд╖ рдирд┐рд░реНрджреЗрд╢ рд╕реБрдиреВрдВрдЧрд╛ред
рджреВрд╕рд░реА рдмрд╛рдд, рдореИрдВ рд╡рд╣рд╛рдБ рд░реБрдХрдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реВрдБ, рдФрд░ рдЕрдЧрд░ рд╕рдореБрджрд╛рдп рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореБрдЭреЗ D рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рд▓рд┐рдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддрд╛ рд╣реВрдБред
рддреАрд╕рд░рд╛, рдпрджрд┐ рдкреНрд░рд╢реНрди рдЙрдарддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЬрд╡рд╛рдм рджреЗрдиреЗ, рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдФрд░ рдмрд╣рд╕ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрди рд╣реВрдВ, рдХреЗрд╡рд▓ рдХрдЯреНрдЯрд░рддрд╛ рдХреЗ рдмрд┐рдирд╛ред
рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░рд╛ рд▓реЗрдЦ рдЖрдкрдХреЛ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ "рдмрдВрдж" рдирд╣реАрдВ рд╣реИ, рдХрд┐ рд▓реЛрдЧ рд╕реНрддрдмреНрдз рд╣реИрдВ, рдпрд╛ рдПрдХ рдирдП рд╕реЗ рдбрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рднрд╛рд╖рд╛ рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рд╕реЗ рдмрдврд╝рдиреЗ рд▓рд╛рдпрдХ рд╣реИ, рдпрд╛ рдПрдХ рдпреЛрдЧреНрдп рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
* рдХрдИ рдХреЗ рд▓рд┐рдПред
** рд╣рд╛рдБ, рд╣рд╛рдБ, рдкрдХрдбрд╝рд╛ - рдлрд┐рд░ рд╕реЗ рдХрдИ рдХреЗ рд▓рд┐рдПред
*** рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХреЛрдб рдПрдХ рдлреНрд░реИрдВрдХ рдЧрдВрджрдЧреА рдирд╣реАрдВ рдмрди рдЬрд╛рдПрдЧрд╛ - рдпрд╣ рд╕рдВрдХреНрд░рдордг рдХреЗ рджреМрд░рд╛рди рдХреНрдпрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реА ++ рд╕реЗ рд╣реИрд╕реЗрд▓ рддрдХ (рдпрд╣ рдореЗрд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ :), рд▓реЗрдХрд┐рди рдпрд╣ рднрд╛рд╖рд╛ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╢реИрд▓реА рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред
**** рдФрд░ рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдореИрдВ рд╕реНрд╡рдпрдВ рд▓реЗрдЦ рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реВрдБ?
рдкреБрдирд╢реНрдЪ
рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдЬрдЧрд░ рдЕрднреА рднреА рдмрдВрдж рд╣реИред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдпрд╛ рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдореИрдВ рд╕рд┐рд░реНрдл рднреБрд▓рдХреНрдХрдбрд╝ рд╣реВрдВред рдореИрдВ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВред