Kotlin / Java рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ: рдЗрд╕реЗ рд╕рд╣реА рдХреИрд╕реЗ рдХрд░реЗрдВ?


рд╕реНрд░реЛрдд


рдХрд┐рд╕реА рднреА рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рд╣реЛрддреА рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд▓рдд рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░реЗрдЧрд╛, рдпрд╛ рд╡реЗ http рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдРрд╕реЗ рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╣рдордиреЗ рдХреНрд░рдорд╛рдВрдХрди / deserialization рд▓рд┐рдЦрддреЗ рд╕рдордп рдЧрд▓рддреА рдХреА рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рдВ, рдпрд╣ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдХрд░ рдХреЙрд░реНрдиреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


рд╕реНрдкреЙрдЗрд▓рд░

┬п_ (┬п) _ / уГД, рдХреЛрдИ рдПрдХрд▓ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдХрд▓реНрдк рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕ рдкрд░ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рд╣реИрдВред


рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


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


  • рдЬрдм рдЕрдкреЗрдХреНрд╖рд┐рдд рддреНрд░реБрдЯрд┐ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ;
  • рдЬрдм рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рддреНрд░реБрдЯрд┐ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкреВрд░реНрд╡рд╛рднрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред

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


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рджреЗрдЦреЗрдВ, рдЕрдкрд╡рд╛рдж (рдЕрдкрд╡рд╛рдж) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж:


рдЕрдкрд╡рд╛рдж



рд╕реНрд░реЛрдд


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


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


рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ method рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдЪреЗрдХ рдХрд┐рдП рдЧрдП PanicException рдХреЛ рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:


 public void method() throws PanicException { } 

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


рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рд╣реЛрддреА рд╣реИ, рдХрд┐ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рдж (рдпрд╛ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрд╡рдЬ) рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ a -> b -> c рдФрд░ рд╕рдмрд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╕рднреА рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЕрдЧрд░ рдХрдИ рдЕрдкрд╡рд╛рдж рд╣реИрдВ, рддреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рд╕рдмрд╕реЗ рдКрдкрд░реА рдХрд╛рд░реНрдп рдореЗрдВ рдЙрди рд╕рднреА рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЗрд╕рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╢реАрд░реНрд╖ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдЕрдкрд╡рд╛рдж рдзреАрд░реЗ-рдзреАрд░реЗ рдЖрдо рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдврд╣ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ Exception рдЖрддреЗ рд╣реИрдВред рдЗрд╕ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рдПрдХ unchecked рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рдорд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ unchecked рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рднреА рд▓рд╛рднреЛрдВ рдХреЛ рдирдХрд╛рд░ рджреЗрддрд╛ рд╣реИред


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


рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рдФрд░ рд╕рдВрднрд╡рдд: рдЬрд╛рд╡рд╛ рд╕реЗ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдХреАрд▓ "рдЪрд▓рд╛рдИ" рд▓рдВрдмреЛрджрд╛ рд╣реИред рдЙрдирдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдХреЛрдИ рднреА рдЬрд╛рдВрдЪ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИрдВ except_ (уГД) _ / since (рдЪреВрдВрдХрд┐ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рдВрдмреЛрджрд░ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░), рдЗрд╕рд▓рд┐рдП рд▓рдВрдмреЛрджрд░ рд╕реЗ рдПрдХ рдЪреЗрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдкрд╡рд╛рдж рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ:


 Stream.of(1,2,3).forEach(item -> { try { functionWithCheckedException(); } catch (Exception e) { throw new RuntimeException("rethrow", e); } }); 

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


рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрднреА-рдХрднреА ...

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрднреА-рдХрднреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Spring Framework unckecked рдХрд╛ рдЧрд▓рдд рд╕рдВрдЪрд╛рд▓рди, рдЬреЛ рдХреЗрд╡рд▓ unckecked рдЕрдкрд╡рд╛рджреЛрдВ рдХреА "рдЕрдкреЗрдХреНрд╖рд╛" unckecked рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд░реВрдкрд░реЗрдЦрд╛ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рд╡рд╕рдВрдд рдореЗрдВ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЧреАрдереВрдм рдореБрджреНрджреЗ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред


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


рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐


"рдЕрдирдкреЗрдХреНрд╖рд┐рдд" рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЬрдЧрд╣ рдорд┐рд▓ рдЬрд╛рдП рдЬрд╣рд╛рдВ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд░реЛрдХ рд╕рдХреЗрдВред JVM рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреНрд░рд┐рдПрд╢рди рдкреЙрдЗрдВрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ http рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ / рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ, рдЬрд╣рд╛рдБ рдЖрдк unchecked рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ, рдЖрдк @ExceptionHandler рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЖрдк рдЗрди рдХреЗрдВрджреНрд░реАрдп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ "рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ", рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдПрдХ рд╣реА unckecked рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдХрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕рдВрднрд╛рд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЬрдм, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд╛рди рдкрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрднреА-рдХрднреА рдЗрд╕рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред


  1. рдЕрднреА рднреА рдЕрдкрд╡рд╛рдж рдФрд░ рдПрдХ рд╣реА рдХреЛрд╢рд┐рд╢-рдХреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:


      int a = 10; int b = 20; int sum; try { sum = calculateSum(a,b); } catch (Exception e) { sum = -1; } 

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


  2. рдПрдХ рдХреЙрд▓ (рдХреЛрдЯрд▓рд┐рди) рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕реАрд▓рдмрдВрдж рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
    рдХреЛрдЯрд▓рд┐рди рдореЗрдВ, рдЖрдк рд╡рд░реНрдЧ рд╡рд╛рд░рд┐рд╕реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕рд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдХреЛрдб рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдореЗрдВ, рдЖрдк рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдХрдИ рд╡рдВрд╢рдЬ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдВрдХрд▓рди-рд╕реНрддрд░ рдХреА рдЬрд╛рдВрдЪ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред


     sealed class Result data class SuccessResult(val value: Int): Result() data class ExceptionResult(val exception: Exception): Result() val a = 10 val b = 20 val sum = when (val result = calculateSum(a,b)) { is SuccessResult -> result.value is ExceptionResult -> { result.exception.printStackTrace() -1 } } 

    рдЬрдм рд╣рдо рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдпреЛрдВ (рдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдирджреЗрдЦреА) рдХреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ golang рддреНрд░реБрдЯрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреИрд╕рд╛ рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИред рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдлреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред Result рд╡рд░реНрдЧ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ (рдпрджрд┐ рд╣рдореЗрдВ рдХреЙрд▓ рдХреА рдЬрдЧрд╣ рдкрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред рдореБрдЦреНрдп рджреЛрд╖ рдХреЗрд╡рд▓ рдордзреНрдпрд╡рд░реНрддреА рд╕рддрд╣реА рд╡рд╕реНрддреБрдУрдВ (рдФрд░ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рд╡рд░реНрдмреЛрдЬрд╝ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ inline рдХрдХреНрд╖рд╛рдУрдВ (рдпрджрд┐ рдПрдХ рддрд░реНрдХ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдХреЛрдЯрд▓рд┐рди рдХрд╛ рдПрдХ Result рд╡рд░реНрдЧ рд╣реИред рд╕рдЪ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдереЛрдбрд╝рд╛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдВрдХрд▓рди рдзреНрд╡рдЬ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ -Xallow-result-return-type ред


  3. рджрд╛рд╡рд╛ 2 рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ, Either рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ, рдЬреЛ рдпрд╛ рддреЛ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рдкреНрд░рдХрд╛рд░ рд╕реНрд╡рдпрдВ рдПрдХ sealed рд╡рд░реНрдЧ рдпрд╛ рдПрдХ inline рд╡рд░реНрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдиреАрдЪреЗ arrow рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


     val a = 10 val b = 20 val value = when(val result = calculateSum(a,b)) { is Either.Left -> { result.a.printStackTrace() -1 } is Either.Right -> result.b } 

    Either рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬреЛ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдХреЙрд▓ рдЪреЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред


  4. рдХреЛрдЯрд▓рд┐рди рд╕реЗ Option рдпрд╛ nullable рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:


     fun testFun() { val a = 10 val b = 20 val sum = calculateSum(a,b) ?: throw RuntimeException("some exception") } fun calculateSum(a: Int, b: Int): Int? 

    рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЙрдкрдпреБрдХреНрдд рд╣реИ рдпрджрд┐ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдФрд░ рдЬрдм рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╣реИред рдПрдХ рдЦрд╛рд▓реА рдЙрддреНрддрд░ рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдХрдо рд░рд┐рдХреЙрд░реНрдб, рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдмрдирд╛рдП рдмрд┐рдирд╛, рд▓реЗрдХрд┐рди рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрд╢рд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


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


     fun testFun() { val a = 10 val b = 20 val sum = calculateSum(a,b) if (sum == -1) { throw RuntimeException(тАЬerrorтАЭ) } } fun calculateSum(a: Int, b: Int): Int 

    рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рдкреБрд░рд╛рдирд╛ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬреЛ C (рдпрд╛ рдЕрд▓реНрдЧреЛрд▓ рд╕реЗ рднреА) рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдпрд╛ рдерд╛ред рдУрд╡рд░рд╣реЗрдб рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдХреЛрдб рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ (рдкрд░рд┐рдгрд╛рдо рдХреА рдкрд╕рдВрдж рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рд╕рд╛рде), рд▓реЗрдХрд┐рди, рдЪрд░рдг 4 рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдкрд╡рд╛рдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐ рдХреЛрдб рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред



рдирд┐рд╖реНрдХрд░реНрд╖


рд╕рднреА рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╣реЛред


рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк sealed рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ golang рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬрд╣рд╛рдВ рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, unchecked рддреНрд░реБрдЯрд┐рдпреЛрдВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВред


рдпрд╛, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрдерд╛рдиреЛрдВ рдкрд░, рдПрдХ рдорд╛рд░реНрдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ nullable рдкреНрд░рдХрд╛рд░ рдХрд╛ nullable рдХрд┐ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдпрд╛ рдХрд╣реАрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрдХреЗрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдореВрд▓реНрдп рдирд╣реАрдВ рдорд┐рд▓рд╛ рдерд╛)ред


рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ arrow рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛрдб рд╣реИ, рддреЛ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ Either рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред


Http- рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП, рдХреЗрдВрджреНрд░реАрдп рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЙрдард╛рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ sealed рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде nullable рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред


рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рд╢рд╛рдпрдж рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ?


рдФрд░ рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж!

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


All Articles