рдЕрдВрдд рдореЗрдВ рдЕрдкрдирд╛ рдХреЛрдб рдЯрд╛рдЗрдк рдХрд░реЗрдВ

рд╣рд╛рдп рд╣рдорд░!


рджреВрд╕рд░реЗ рджрд┐рди, рдореБрдЭреЗ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЯрд╛рдЗрдк рдХреЛрдб рдорд┐рд▓рд╛


if(someParameter.Volatilities.IsEmpty()) { // We have to report about the broken channels, however we could not differ it from just not started cold system. // Therefore write this case into the logs and then in case of emergency IT Ops will able to gather the target line Log.Info("Channel {0} is broken or was not started yet", someParameter.Key) } 

рдХреЛрдб рдореЗрдВ рдПрдХ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ: рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдпрд╣ рдЬрд╛рдирдирд╛ рдмрд╣реБрдд рдкрд╕рдВрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ, рд╣рдо рдмрд╕ рдЧрд░реНрдо рд╣реЛрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЙрдбрд▓ рд╣рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рдкреНрд░реЗрд╖рдХ рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдЕрдХреНрд╕рд░ рдореЙрдбрд▓ рдХрд╛ рд▓реЗрдЦрдХ рд╣реЛрддрд╛ рд╣реИ)ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ "рд╢рд╛рдпрдж рдХреБрдЫ рдЧрд▓рдд рд╣реИ" рдЗрд╕ рддрдереНрдп рд╕реЗ рдЙрдкрдЬрд╛ рд╣реИ рдХрд┐ Volatilities рд╕рдВрдЧреНрд░рд╣ рдЦрд╛рд▓реА рд╣реИред рдЬреЛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХреЛрдб рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрд╛ рдЬрд┐рд╕рдореЗрдВ "рдЭрдВрдбреЗ рдХрд╛ рдпрд╣ рд╕рдВрдпреЛрдЬрди рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ", рддреЛ рд╣рдореЗрдВ рдП, рдмреА рдФрд░ рд╕реА рдмрдирд╛рдиреЗ рдХреА рд╢реИрд▓реА рдореЗрдВ рдЧреБрдкреНрдд рдЬреНрдЮрд╛рди рдерд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореЙрдбрд▓ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ)ред


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


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


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЦреЗрд▓ рд░рд╣реЗ рд╣реИрдВ - рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред


рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


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


рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣реЗрдбрд░ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдлреЙрд░реНрдо рдХреЗ рдХреЛрдб рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ:


 class Response { public IVolatilityResponse Data { get; } } interface IVolatilityResponse { TOutput Visit<TInput, TOutput>(IVolatilityResponseVisitor<TInput, TOutput> visitor, TInput input) } class VolatilityValues : IVolatilityResponse { public Surface Data; TOutput Visit<TInput, TOutput>(IVolatilityResponseVisitor<TInput, TOutput> visitor, TInput input) => visitor.Visit(this, input); } class CalculationIsBroken : IVolatilityResponse { TOutput Visit<TInput, TOutput>(IVolatilityResponseVisitor<TInput, TOutput> visitor, TInput input) => visitor.Visit(this, input); } interface IVolatilityResponseVisitor<TInput, TOutput> { TOutput Visit(VolatilityValues instance, TInput input); TOutput Visit(CalculationIsBroken instance, TInput input); } 

рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде:


  • рд╣рдореЗрдВ рдЕрдзрд┐рдХ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрд╛рд╢, рдЕрдЧрд░ рд╣рдо рдореЙрдбрд▓ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдзрд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдХрд╛рд░рдг, рд╣рдо рдЕрдм Response рдХреЛ json / protobuf рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╡рд╣рд╛рдВ рдЦреЛ рдЬрд╛рддреА рд╣реИред рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдРрд╕рд╛ рдХрд░реЗрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдРрд╕рд╛ рд╡рд░реНрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдлрд╝реАрд▓реНрдб рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рднрд░рд╛ рдЬрд╛рдПрдЧрд╛)ред
  • рдореЙрдбрд▓ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ (рдЬреЛ рдХрд┐ рдирдИ рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ) рдХреЛ IVolatilityResponseVisitor<TInput, TOutput> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдирдП рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛ рдирд╣реАрдВ рднреВрд▓реЗрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧреАред
  • рд╕реНрдереИрддрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг, рд╣рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣реАрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрджрд┐ред рд╣рдордиреЗ рдХреЛрдб рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рд╕рдВрдХрд▓рдХ рдФрд░ рд╡реНрдпрдХреНрддрд┐ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдФрд░ рдХреЛрдб рдХреЗ рдмреАрдЪ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдбрд┐рд╕рд┐рдВрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


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


рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЛ Kotlin рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 class Response ( val data: IVolatilityResponse ) sealed class VolatilityResponse class VolatilityValues : VolatilityResponse() { val data: Surface } class CalculationIsBroken : VolatilityResponse() 

рдпрд╣ рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдЕрдм рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рд╕рдВрднрд╡ VolatilityResponse рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рдореЗрдВ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрдХреНрд╖рд╛ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЧрдП рдереЗред


 fun getResponseString(response: VolatilityResponse) = when(response) { is VolatilityValues -> data.toString() } 

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдРрд╕реЗ рдЪреЗрдХ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдВрдЧреЗ:


 fun getResponseString(response: VolatilityResponse) { when(response) { is VolatilityValues -> println(data.toString()) } } 

рд╕рднреА рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдорддрд▓рдм рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ


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


 class Group { public int Id { get; } public string Name { get; } } class User { public int Id { get; } public int GroupId { get; } public string Name { get; } } 

рдпрд╣ рдПрдХ рдорд╛рдирдХ рдХреЛрдб рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рднреА рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ: рдХреНрдпрд╛ рдХреЛрдб рдиреАрдЪреЗ рд╕рд╣реА рд╣реИ?


 public bool IsInGroup(User user, Group group) { return user.Id == group.Id; } public User CreateUser(string name, Group group) { return new User { Id = group.Id, GroupId = group.Id, name = name } } 

рдЬрд╡рд╛рдм рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Id рдФрд░ рд╕рдореВрд╣ Id рддреБрд▓рдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ, рд╣рдордиреЗ рдЧрд▓рддреА рд╕реЗ Group рд╕реЗ id рдХреЛ User рд╕реЗ id рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ред


рддрд╛рдЬреНрдЬреБрдм рд╣реИ, рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдмрд╕ GroupId , UserId рдФрд░ рдЗрддрдиреЗ рдкрд░ GroupId рдХрд░реЗрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, User рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкреНрд░рдХрд╛рд░ рдЕрднрд┐рд╕рд░рдг рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЬреЛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╢рд╛рдВрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХрд▓рдХ рдХреЛ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВред


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


 public void SetUserGroup(UserId userId, GroupId groupId) { /* some sql code */ } 

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


рдФрд░ рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 class GroupId { public int Id { get; } public bool Equals(GroupId groupId) => Id == groupId?.Id; [Obsolete("GroupId can be equal only with GroupId", error: true)] public override bool Equals(object obj) => Equals(obj as GroupId) public static bool operator==(GroupId id1, GroupId id2) { if(ReferenceEquals(id1, id2)) return true; if(ReferenceEquals(id1, null) || ReferenceEquals(id2, null)) return false; return id1.Id == id2.Id; } [Obsolete("GroupId can be equal only with GroupId", error: true)] public static bool operator==(object _, GroupId __) => throw new NotSupportedException("GroupId can be equal only with GroupId") [Obsolete("GroupId can be equal only with GroupId", error: true)] public static bool operator==(GroupId _, object __) => throw new NotSupportedException("GroupId can be equal only with GroupId") } 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк:


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

Sql рдФрд░ рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░


рдЕрдХреНрд╕рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рдпрдо рдкреЗрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХрдИ рдХрд╛рд░реНрдп рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:


 void SetName(string name) { if(name == null || name.IsEmpty() || !name[0].IsLetter || !name[0].IsCapital || name.Length > MAX_NAME_COLUMN_LENGTH) { throw .... } /**/ } 

рдпрд╣реА рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдХрд╛рдлреА рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЗрдирдкреБрдЯ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЪреЗрдХ рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ:


  • рд╣рдордиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрд╛рдпрд╛ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
  • рдПрдХ рдЕрдиреНрдп рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдЖрдкрдХреЛ рдЪреЗрдХреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
  • рдЬрдм рд╣рдореЗрдВ рдПрдХ string рдорд┐рд▓реА рдЬреЛ name рдХреЛ рдирд┐рд░реВрдкрд┐рдд рдХрд░реЗрдЧреА, рддреЛ рд╣рдо рддреБрд░рдВрдд рдЧрд┐рд░ рдирд╣реАрдВ рдЧрдП, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХреБрдЫ рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рдмрд╛рдж рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рд╣рд╛ред

рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░:


  • рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдВ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, Name )ред
  • рдЗрд╕рдореЗрдВ, рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рддреНрдпрд╛рдкрди рдФрд░ рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
  • рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ Name рдореЗрдВ string рд▓рдкреЗрдЯреЗрдВред

рдирддреАрдЬрддрди, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:


  • рдХрдо рдХреЛрдб, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ name рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИред
  • рдлреЗрд▓ рдлрд╛рд╕реНрдЯ рд░рдгрдиреАрддрд┐ - рдЕрдм, рдПрдХ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рддреБрд░рдВрдд рдЧрд┐рд░ рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЧрд┐рд░ рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╣реБрдд рдмрдбрд╝реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рддреБрд░рдВрдд рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
  • рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕рд┐рдЧреНрдиреЗрдЪрд░ рд╣реИ: void UpdateData(Name name, Email email, PhoneNumber number) : рддрд░реНрдХреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЕрдм рд╣рдо рддреАрди рд╕рдорд╛рди string , рдмрд▓реНрдХрд┐ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛


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


  • рдлрд╝реЙрд░реНрдо interface IValueGet<TValue>{ TValue Wrapped { get; } } рдХреЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝реЗрдВ interface IValueGet<TValue>{ TValue Wrapped { get; } } interface IValueGet<TValue>{ TValue Wrapped { get; } } ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, Sql рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдкрд░рдд рдореЗрдВ, рд╣рдо рд╕реАрдзреЗ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  • рдХреЛрдб рдореЗрдВ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдПрдХ рдЕрдореВрд░реНрдд рдкреВрд░реНрд╡рдЬ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдХреА рдХреЛ рдЙрд╕рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдХреЛрдб рд╣реИ:

 interface IValueGet<TValue> { TValue Wrapped { get; } } abstract class BaseWrapper : IValueGet<TValue> { protected BaseWrapper(TValue initialValue) { Wrapped = initialValue; } public TValue Wrapped { get; private set; } } sealed class Name : BaseWrapper<string> { public Name(string value) :base(value) { /*no necessary validations*/ } } sealed class UserId : BaseWrapper<int> { public UserId(int id) :base(id) { /*no necessary validations*/ } } 

рдЙрддреНрдкрд╛рджрдХрддрд╛


рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЖрдк рдЕрдХреНрд╕рд░ рджреЛ рджреНрд╡рдВрджреНрд╡рд╛рддреНрдордХ рддрд░реНрдХ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


  • рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░, рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдФрд░ il рдХреЛрдб, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдд рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЧрдВрднреАрд░ рдмреНрд░реЗрдХ рд▓рдЧреЗрдВрдЧреЗред
  • рдЕрдзрд┐рдХ рдЖрд╡рд░рдг, рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдореЛрд░реА рдЦрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд░реИрдкрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд░реИрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреАред

рдХрдбрд╝реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рджреЛрдиреЛрдВ рддрд░реНрдХ рдЕрдХреНрд╕рд░ рддрдереНрдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐:


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

рдЖрдк рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдРрд╕реЗ рдорд╛рдЗрдХреНрд░реЛрдЯреЗрдк рд╕реЗ рдпреБрдХреНрдд рдХреЛрдб рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


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


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЦреБрдж рдЪрд╛рд▓:


  • рд╕рдВрджрд░реНрдн рдХреЗ рдмрдЬрд╛рдп рд╕рд╛рд░реНрдердХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд░реИрдкрд░ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЖрдк рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджреНрдпрдкрд┐ рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рддреНрд╡рд░рдг рдХреЗрд╡рд▓ рддрднреА рд╣реЛрдЧрд╛ рдЬрдм рдЖрдкрдХрд╛ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрдЯреЗрдкреНрд╕ рдХреЗ рдХрд╛рд░рдг рд▓рдЧрд╛рддрд╛рд░ рдЬреАрд╕реА рдареАрдХ рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реЛред
    • .Net рдореЗрдВ struct рдЕрдХреНрд╕рд░ рдмреЙрдХреНрд╕рд┐рдВрдЧ / рдЕрдирдмреЙрдХреНрд╕рд┐рдВрдЧ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреА рд╣реИред рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдРрд╕реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ Dictionary / Map рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЙрдирдореЗрдВ рдПрдХ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд╕рд╛рде рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
    • рдХреЛрдЯрд▓рд┐рди / рд╕реНрдХрд╛рд▓рд╛ рд╕реЗ inline рдкреНрд░рдХрд╛рд░ рд╕реАрдорд┐рдд рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдирдореЗрдВ рдХрдИ рдлрд╝реАрд▓реНрдб рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ (рдЬреЛ рдХрднреА-рдХрднреА ToString / GetHashCode рдорд╛рди рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)ред
    • рдвреЗрд░ рд╕рд╛рд░реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рд╕реНрдЯреИрдХ рдкрд░ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, .рдиреЗрдЯ рдЫреЛрдЯреЗ рдЕрд╕реНрдерд╛рдпреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ , рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ GraalVM рд╕реНрдЯреИрдХ рдкрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрд╡рдВрдЯрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрд╕реЗ рдХреЙрдкреА рдХрд░реЗрдВ рдпрджрд┐ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдкрдбрд╝рд╛ (рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдореГрджреНрдз рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд)ред
  • рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЗрдВрдЯрд░реНрдирдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЕрд░реНрдерд╛рдд, рддреИрдпрд╛рд░-рдкреВрд░реНрд╡, рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рд╡рд╕реНрддреБрдПрдВ рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ)ред
    • рдпрджрд┐ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдкрд╛рд╕ рдПрдХ рддрд░реНрдХ рд╣реИ, рддреЛ рдЖрдк рдмрд╕ рдПрдХ рдХреИрд╢ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреБрдВрдЬреА рдЗрд╕ рддрд░реНрдХ рд╣реИ, рдФрд░ рдореВрд▓реНрдп рдкрд╣рд▓реЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛ рдХрд╛рдлреА рдЫреЛрдЯреА рд╣реИ, рддреЛ рдЖрдк рдмрд╕ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
    • рдпрджрд┐ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдИ рддрд░реНрдХ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╕ рдПрдХ рдирдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдпрд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╢ рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдПрдХ рд╕рдорд╛рди рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
    • рдЗрд╕ рддрд░рд╣ рдХреА рдпреЛрдЬрдирд╛ рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХреЗ рдХрд╛рдо рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП Equals / GetHashCode рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд╕реНрддреБрдУрдВ рдХреА рднрд╡рд┐рд╖реНрдп рдХреА рддреБрд▓рдирд╛ рдХреЛ рднреА рддреЗрдЬ рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рд╣реИрд╢ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдХреИрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рд╡реЗ рдЕрд▓рдЧ рд╣реИрдВ, рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрд▓рдЧ рд╣реИрдВред рдФрд░ рд╕рдорд╛рди рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЕрдХреНрд╕рд░ рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛ред
    • рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЕрдиреБрдХреВрд▓рди рддреЗрдЬреА рд╕реЗ GetHashCode / Equals (рдКрдкрд░ рдкреИрд░рд╛ рджреЗрдЦреЗрдВ) рдХреЗ рдХрд╛рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЧрддрд┐ рджреЗрдЧрд╛ред рд╕рд╛рде рд╣реА, рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ (рдЬреЛ рдХрд┐, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреИрд╢ рдореЗрдВ) рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдШрдЯ рдЬрд╛рдПрдЧрд╛, рддрд╛рдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рдЬрдирд░реЗрд╢рди 0 рдореЗрдВ рдЖ рдЬрд╛рдПрдВред
  • рдирдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп, рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рдФрд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рди рдХрд░реЗрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рд╕рд▓рд╛рд╣ рдЕрдХреНрд╕рд░ рдХреЛрдбрд┐рдВрдЧ рд╢реИрд▓реА рдкрд░ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рдЬрд╛рддреА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЗрд╡рд▓ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдХреНрд╕рд░ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: рдпрд╛ рддреЛ рддрд░реНрдХ рд╕реЗ ToUpperInvariant рдмрдирд╛рддреЗ рд╣реИрдВ, рдпрд╛ рдПрдХ рд▓реВрдк рдореЗрдВ ToUpperInvariant рдХрд┐ рд╕рднреА рдЕрдХреНрд╖рд░ рдмрдбрд╝реЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдирдИ рд▓рд╛рдЗрди рдмрдирд╛рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ, рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдЕрдзрд┐рдХрддрдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдЖрдк рдореЗрдореЛрд░реА рдкрд░ рдмрдЪрдд рдХрд░рддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рд┐рддреНрд░ рдХреЛ рдЕрднреА рднреА рдЬрд╛рдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛, рддрд╛рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреЗрд╡рд▓ рдПрдХ рджреБрд░реНрд▓рдн рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрдврд╝реЗрдЧрд╛)ред

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


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


рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рдЬрд╣рд╛рдВ рдореЙрдбрд▓ рдореЗрдВ рд╣рдо рдХрдбрд╝рд╛рдИ рд╕реЗ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдХреНрдпрд╛ рдореВрд▓реНрдп рд╕рдВрднрд╡ рд╣реИрдВред


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


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


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

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


All Articles