рдЯрд╛рдЗрдкрд┐рдВрдЧ: рдЕрдорд╛рдиреНрдп рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдмрдирд╛рдирд╛

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


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


Contact рдкреНрд░рдХрд╛рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ Contact ред рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк , рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрд╣реБрдд рд╕рд░рд▓реАрдХрд░рдг рдХрд┐рдпрд╛:


 type Contact = { Name: Name; EmailContactInfo: EmailContactInfo; PostalContactInfo: PostalContactInfo; } 

рдЕрдм рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рд╕рд░рд▓ рд╡реНрдпрд╛рдкрд╛рд░ рдирд┐рдпрдо рд╣реИ: "рд╕рдВрдкрд░реНрдХ рдореЗрдВ рдПрдХ рдИрдореЗрд▓ рдкрддрд╛ рдпрд╛ рдПрдХ рдбрд╛рдХ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред" рдХреНрдпрд╛ рд╣рдорд╛рд░рд╛ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рдирд┐рдпрдо рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ?


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


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрддреНрддрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдкрддреЗ рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдирд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:


 type Contact = { Name: PersonalName; EmailContactInfo: EmailContactInfo option; PostalContactInfo: PostalContactInfo option; } 

рд▓реЗрдХрд┐рди рдЕрдм рд╣рдорд╛рд░рд╛ рдкреНрд░рдХрд╛рд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкрддреЗ рдХреЗ рд╕рдВрдкрд░реНрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкрддреЗ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред


рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ?


рдХреИрд╕реЗ рдЧрд▓рдд рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдЕрдХреНрд╖рдореНрдп рдмрдирд╛рдирд╛ рд╣реИ


рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рдирд┐рдпрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рддреАрди рдорд╛рдорд▓реЗ рд╕рдВрднрд╡ рд╣реИрдВ:


  • рдХреЗрд╡рд▓ рдИрдореЗрд▓ рдкрддрд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • рдХреЗрд╡рд▓ рдбрд╛рдХ рдкрддреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ;
  • рдИрдореЗрд▓ рдФрд░ рдбрд╛рдХ рдкрддреЗ рджреЛрдиреЛрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реВрддреНрд░реАрдХрд░рдг рдореЗрдВ, рд╕рдорд╛рдзрд╛рди рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░-рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред


 type ContactInfo = | EmailOnly of EmailContactInfo | PostOnly of PostalContactInfo | EmailAndPost of EmailContactInfo * PostalContactInfo type Contact = { Name: Name; ContactInfo: ContactInfo; } 

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


"рдИрдореЗрд▓ рдкрддреЗ рдФрд░ рдбрд╛рдХ рдкрддреЗ" рдХреЗ рдорд╛рдорд▓реЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдЕрднреА рддрдХ рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдПрдХ рдЯрдкрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред


ContactInfo рдмрдирд╛рдирд╛


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


 let contactFromEmail name emailStr = let emailOpt = EmailAddress.create emailStr //          match emailOpt with | Some email -> let emailContactInfo = {EmailAddress=email; IsEmailVerified=false} let contactInfo = EmailOnly emailContactInfo Some {Name=name; ContactInfo=contactInfo} | None -> None let name = {FirstName = "A"; MiddleInitial=None; LastName="Smith"} let contactOpt = contactFromEmail name "abc@example.com" 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдирд╛рдо рдФрд░ рдИрдореЗрд▓ рдкрддреЗ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рд╕рдВрдкрд░реНрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдкрд░реНрдХ рдмрдирд╛рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрддрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрди рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд╝рдВрдХреНрд╢рди рдЕрдорд╛рдиреНрдп рдкрддреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдкрд░реНрдХ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ Contact option рдкреНрд░рдХрд╛рд░ рдХрд╛ Contact option рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд╕рдВрдкрд░реНрдХ рдирд╣реАрдВред


ContactInfo рдмрджрд▓реЗрдВ


рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ ContactInfo рдПрдХ рдореЗрд▓рд┐рдВрдЧ рдкрддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рддреАрди рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛:


  • рдпрджрд┐ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдИрдореЗрд▓ рдкрддрд╛ рдерд╛, рддреЛ рдЕрдм рдЙрд╕рдХреЗ рдкрд╛рд╕ рджреЛрдиреЛрдВ рдкрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ EmailAndPost рд╕рд╛рде рд╕рдВрдкрд░реНрдХ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ;
  • рдпрджрд┐ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдбрд╛рдХ рдкрддрд╛ рдерд╛, рддреЛ рдЖрдкрдХреЛ рдбрд╛рдХ рдкрддреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдкрд░реНрдХ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдореЗрд▓рд┐рдВрдЧ рдкрддреЗ рдХреЛ рдПрдХ рдирдП рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛;
  • рдпрджрд┐ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рджреЛрдиреЛрдВ рдкрддреЗ рдереЗ, рддреЛ рдЖрдкрдХреЛ EmailAndPost рдкрддреЗ рдХреЛ рдирдП рдХреЗ рд╕рд╛рде рдмрджрд▓ рдХрд░, рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ EmailAndPost рд╕рд╛рде рд╕рдВрдкрд░реНрдХ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореЗрд▓рд┐рдВрдЧ рдкрддреЗ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред


 let updatePostalAddress contact newPostalAddress = let {Name=name; ContactInfo=contactInfo} = contact let newContactInfo = match contactInfo with | EmailOnly email -> EmailAndPost (email,newPostalAddress) | PostOnly _ -> //     PostOnly newPostalAddress | EmailAndPost (email,_) -> //     EmailAndPost (email,newPostalAddress) //    {Name=name; ContactInfo=newContactInfo} 

рдФрд░ рдпрд╣рд╛рдБ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ:


 let contact = contactOpt.Value //      option.Value  let newPostalAddress = let state = StateCode.create "CA" let zip = ZipCode.create "97210" { Address = { Address1= "123 Main"; Address2=""; City="Beverly Hills"; State=state.Value; //      option.Value  Zip=zip.Value; //      option.Value  }; IsAddressValid=false } let newContact = updatePostalAddress contact newPostalAddress 

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


рдЗрди рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдХреНрдпреЛрдВ?


рдЗрд╕ рд╕рдордп рддрдХ, рдЖрдк рддрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╕рднреА рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдереЗред рдореИрдВ рддреАрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рдЙрддреНрддрд░ рджреВрдВрдЧрд╛ред


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


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


 type ContactInfo = | EmailOnly of EmailContactInfo | PostOnly of PostalContactInfo | EmailAndPost of EmailContactInfo * PostalContactInfo 

рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рдирд┐рдпрдореЛрдВ рдореЗрдВ рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛, рдФрд░ рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИред


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

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


All Articles