рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ: рдореМрди рд╣рдореЗрд╢рд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ



рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдореЗрд░реА рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд░рд╛рдп рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдореИрдВрдиреЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рддреЛ рдореИрдВрдиреЗ рдЙрд╕ рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛, рдЬрд┐рд╕ рдкрд░ рд╕реНрд░реЛрдд рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛; рдЕрдЧрд░ рдореИрдВрдиреЗ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рд╡рд╣реА рдХрд┐рдпрд╛ рдЬреЛ рдореБрдЭреЗ рд╕рд╣реА рд▓рдЧрд╛ред

рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рдПрдХ рдмрдЧ рдЬреЛ рдХреЛрдб рдореЗрдВ "рдореВрдХ" рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рд╕реНрд╡рдпрдВ рдкреНрд░рдХрдЯ рд╣реБрдЖред рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдХреБрдЫ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдирд╛ рд╣реИред рд╢рд╛рдпрдж рдореИрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдкреВрд░реЗ рдХреЛрдб рдмреЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдЙрд╕рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░реЛрдореЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп 10,000 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: рдСрди-рд▓рд╛рдЗрди рд╢реИрдХреНрд╖рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо "рдкреНрд░реЛрдлреЗрд╢рди рдЬрд╛рд╡рд╛-рдбреЗрд╡рд▓рдкрд░" ред


рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрдВрдзреЗ рд╕реЗ рдХрд╛рдЯ рд▓реЗрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ


рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдкрд╣рд▓рд╛ рдХрджрдо рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ "рддреНрд░реБрдЯрд┐" "рддреНрд░реБрдЯрд┐" рдирд╣реАрдВ рд╣реИ! рдмреЗрд╢рдХ, рдпрд╣ рд╕рдм рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреБрдЫ рдмрдЧ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рддрдп рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

  • рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рддрд┐рдерд┐ рд╕реАрдорд╛ рд╣реИ рдЬрд╣рд╛рдВ "рдкрд╣рд▓реЗ" рд╕реЗ "рд╕реЗ рдкрд╣рд▓реЗ" рд╣реИ? рдХреНрд░рдо рдмрджрд▓реЗрдВред
  • рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдлрд╝реЛрди рдирдВрдмрд░ рд╣реИ рдЬреЛ + рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдореЗрдВ рдПрдХ рдбреИрд╢ рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдгреЛрдВ рдХреЗ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ? рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджреЗрдВред
  • рдЕрд╢рдХреНрдд рд╕рдВрдЧреНрд░рд╣ рд╕рдорд╕реНрдпрд╛? рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ ( рдЖрд▓рд╕реА рдкреНрд░рд╛рд░рдВрдн рдпрд╛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред

рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдзрд┐рдд рди рдХрд░реЗрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреА рд╕реЗрд╡рд╛рдУрдВ рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдордХреНрдЦреА рдкрд░ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ - рддреЛ рдмрд╕ рдХрд░реЛред



рд╡рд╛рдкрд╕реА рдирд▓ рдпрд╛ рдЕрдиреНрдп рдЬрд╛рджреВ рдирдВрдмрд░


рд╢реВрдиреНрдп рдорд╛рди, -1 рдЬрд╣рд╛рдВ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рдФрд░ рдЕрдиреНрдп рдЬрд╛рджреВ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп - рдпрд╣ рд╕рдм рд╢реИрддрд╛рди рдХрд╛ рдЙрддреНрдкрд╛рдж рд╣реИ, рдЬреЛ рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЙрдирдХреЗ рд╕рд╛рде, рдЖрдкрдХрд╛ рдХреЛрдб рдРрд╕реЗ рдмреНрд▓реЙрдХ рд╕реЗ рднрд░рд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдмрдирд╛ рджреЗрдЧрд╛:

return_value = possibly_return_a_magic_value() if return_value < 0: handle_error() else: do_something() other_return_value = possibly_nullable_value() if other_return_value is None: handle_null_value() else: do_some_other_thing() 

рдареАрдХ рд╣реИ, рдпрд╛ рд╕рд░рд▓, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдмреБрд░рд╛ рд╣реИ:
 var item = returnSomethingWhichCouldBeNull(); var result = item?.Property?.MaybeExists; if (result.HasValue) { DoSomething(); } 

рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╢рдХреНрдд рд╣реЛрдирд╛ рднреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛрдб рдореЗрдВ рдЖрдкрдХреЛ рдРрд╕реА рдЬрдЧрд╣реЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЗрдирдкреБрдЯ рд╕рддреНрдпрд╛рдкрди рдХреА рдХрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рдм рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛рдПрдВ рдПрдХ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрдИ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдмреЗрдХрд╛рд░ рдЪреЗрдХ рдХреЛ рднреА рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдиреЙрдирдЬрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рдеред

рддреНрд░реБрдЯрд┐ рдХреЛрдб


рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдЕрд╢рдХреНрдд рдФрд░ рдЕрдиреНрдп рд╕рдорд╛рди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 int errorCode; var result = getSomething(out errorCode); if (errorCode != 0) { doSomethingWithResult(result); } 

рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 public class Result<T> { public T Item { get; set; } // At least "ErrorCode" is an enum public ErrorCode ErrorCode { get; set; } = ErrorCode.None; public IsError { get { return ErrorCode != ErrorCode.None; } } } public class UsingResultConstruct { ... var result = GetResult(); if (result.IsError) { switch (result.ErrorCode) { case ErrorCode.NetworkError: HandleNetworkError(); break; case ErrorCode.UserError: HandleUserError(); break; default: HandleUnknownError(); break; } } ActuallyDoSomethingWithResult(result); ... } 

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХреЛрдб рдирд╣реАрдВ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрдЗрдЯрдо рдЕрднреА рднреА рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ (рдПрдХ рд╕рдордЭреМрддреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рдХрд┐ рдЬрдм рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЖрдЗрдЯрдо рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рд╕рдм рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЕрднреА рднреА рдмрдЧ рдХреЛрдб рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХрднреА-рдХрднреА рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐, рдХреЛрдб рдХреА рдЕрддреНрдпрдзрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рд╕рдВрджреЗрд╢ рд╕реНрд╡рдпрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдФрд░ рднреА рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдпрджрд┐ рдЖрдк рдпрд╛ рдХреЛрдИ рдФрд░ рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдирдП рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдЕрдорд╛рдиреНрдп рд░рд╛рдЬреНрдп рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдкреВрд░реА рд╕рдВрд░рдЪрдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧреАред

рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ


рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЬреЛрд░ рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ "рдореМрди" рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд┐рдлрд▓рддрд╛ рдЦрд░рд╛рдм рд╣реИред рд╕рдмрд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕рдордп рдкрд░ рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдкрд░, рдЬрдм рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рд╕рдм рдХреБрдЫ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред



рдпрджрд┐ рдЖрдк рд╕реНрд╡рдЪреНрдЫ рдХреЛрдб рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдкрд╡рд╛рдж рдХреНрдпреЛрдВ рдирд╣реАрдВ рдлреЗрдВрдХреЗрдВ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкрд╡рд╛рдж рдмреБрд░рд╛рдИ рдХреА рдЬрдбрд╝ рд╣реИред рдореИрдВ рднреА рдРрд╕рд╛ рд╕реЛрдЪрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╕реЛрдЪрддрд╛ рд╣реВрдВред
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ, рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд╣реИ рдХрд┐ C # рдореЗрдВ рдирдИ рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ NotImplementedException рдХреЛ рдЙрдард╛рдирд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдирдИ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ "рдкрд╛рд╕" рд╣реИред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЕрдХреНрд╕рд░ рд╣рдо рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП "рдореВрдХ рддреНрд░реБрдЯрд┐" рд╕реЗрдЯрд┐рдВрдЧ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХрд┐рддрдиреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреНрдпреЛрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ, рдХрдИ рдШрдВрдЯреЛрдВ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╡реЗ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рднреВрд▓ рдЧрдП рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

 public MyDataObject UpdateSomething(MyDataObject toUpdate) { if (_dbConnection == null) { throw new DbConnectionError(); } try { var newVersion = _dbConnection.Update(toUpdate); if (newVersion == null) { return null; } MyDataObject result = new MyDataObject(newVersion); return result; } catch (DbConnectionClosedException dbcc) { throw new DbConnectionError(); } catch (MyDataObjectUnhappyException dou) { throw new MalformedDataException(); } catch (Exception ex) { throw new UnknownErrorException(); } } 

рдмреЗрд╢рдХ, рдЕрдкрд╡рд╛рдж рдЕрдХреЗрд▓реЗ рдЖрдкрдХреЛ рдЕрдкрдардиреАрдп рдФрд░ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдмрдирд╛рдиреЗ рд╕реЗ рдирд╣реАрдВ рдмрдЪрд╛рдПрдВрдЧреЗред рдЖрдкрдХреЛ рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реЛрдЪрд╛ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрддреБрд▓рд┐рдд рд░рдгрдиреАрддрд┐ рд▓рд╛рдЧреВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рдЕрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рдЫреЛрдЯреА рд╣реИ, рддреЛ рдЖрдк рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ:

рд╕рдм рд╕реЗ рдКрдкрд░ рд╕рдВрдЧрддрд┐ред рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реБрд╕рдВрдЧрдд рд╣реИред рдЕрдЧрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╣рд░ рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдПрдХ рдХреЛрд╢рд┐рд╢ / рдХреИрдЪ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдирд╛ рд╣реИ, рддреЛ рдмрд╕ рдЗрд╕реЗ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЫрд┐рдкрд╛ рджреЗрдВред

 def my_function(): try: do_this() do_that() except: something_bad_happened() finally: cleanup_resource() 

рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рдореЗрдХрди рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрджрд┐ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдЙрдирдХреЗ рд▓рд┐рдП, рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрд╕ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╡рд┐рд╡рд░рдг рдЖрдкрдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИред

 public MyDataObject UpdateSomething(MyDataObject toUpdate) { try { var newVersion = _dbConnection.Update(toUpdate); MyDataObject result = new MyDataObject(newVersion); return result; } catch (DbConnectionClosedException dbcc) { HandleDbConnectionClosed(); throw new UpdateMyDataObjectException(); } catch (MyDataObjectUnhappyException dou) { RollbackVersion(); throw new UpdateMyDataObjectException(); } catch (Exception ex) { throw new UpdateMyDataObjectException(); } } 

рдпрд╣ рдЕрднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рд▓рд╛рдпрдХ рд╣реИред рд╡реЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╕реНрддрд░ рдкрд░ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рд╣реИрдВред рд╡рд┐рд╡рд░рдг рдХреЛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдФрд░ рдЫрд┐рдкрд╛рдирд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИред рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдЖрд╡реЗрджрди рдХреЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рддрд░реНрдХ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ, рдкрдардиреАрдп рдХреЛрдб рд▓рд┐рдЦреЗрдЧрд╛ред

 def my_api(): try: item = get_something_from_the_db() new_version = do_something_to_item(item) return new_version except Exception as ex: handle_high_level_exception(ex) 

рдпрд╣ рд╕рдм рдЕрднреА рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рд╡реЗрд▓рдХрдоред

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ:

Source: https://habr.com/ru/post/hi441148/


All Articles