рд░рд╛рдорджрд╛ рд╕реНрдЯрд╛рдЗрд▓ рд╕реЛрдЪ: рд▓реЗрдВрд╕

1. рдкрд╣рд▓рд╛ рдХрджрдо
2. рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдПрдВ
3. рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ (рдХрд░реА)
4. рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ
5. рдХреНрд╡реЗрдВрдЯреЗрд╕рд┐рд╡ рдиреЛрдЯреЗрд╢рди
6. рдЕрдкрд░рд┐рд╣рд╛рд░реНрдпрддрд╛ рдФрд░ рд╡рд╕реНрддреБрдПрдБ
7. рдЕрдкрд░рд┐рд╣рд╛рд░реНрдпрддрд╛ рдФрд░ рд╕рд░рдгрд┐рдпрд╛рдБ
8. рд▓реЗрдВрд╕
9. рдирд┐рд╖реНрдХрд░реНрд╖


рдпрд╣ рдкреЛрд╕реНрдЯ рд░рд╛рдорджрд╛ рд╕реНрдЯрд╛рдЗрд▓ рдерд┐рдВрдХрд┐рдВрдЧ рдирд╛рдордХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЖрдард╡рд╛рдВ рд╣реИред


рдЫрдареЗ рдФрд░ рд╕рд╛рддрд╡реЗрдВ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдРрд░рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЧреБрдгрд╛рддреНрдордХ рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╢реИрд▓реА рдореЗрдВ рдкрдврд╝рдирд╛, рдЕрджреНрдпрддрди рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣реИред


Ramda рдЗрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдХрд░рдг рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд▓реЗрдВрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рд▓реЗрдВрд╕?


рд▓реЗрдВрд╕ рдЧреЗрдЯреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╕реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рддрдВрддреНрд░ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд░рд╛рдорджрд╛ рд▓реЗрдВрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред


рд╣рдо рд▓реЗрдВрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рдЧ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред


рдореИрдВ рдПрдХ рд▓реЗрдВрд╕ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ?


рд░рд╛рдорджрд╛ рдореЗрдВ рд▓реЗрдВрд╕ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рддрд░реАрдХрд╛ рд▓реЗрдВрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╣реИред lens рдПрдХ рдЧрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдПрдХ рд╕реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдпрд╛ рд▓реЗрдВрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИред


 const person = { name: 'Randy', socialMedia: { github: 'randycoulman', twitter: '@randycoulman' } } const nameLens = lens(prop('name'), assoc('name')) const twitterLens = lens( path(['socialMedia', 'twitter']), assocPath(['socialMedia', 'twitter']) ) 

рдпрд╣рд╛рдБ рд╣рдо рдЕрдкрдиреЗ assocPath рд░реВрдк рдореЗрдВ prop рдФрд░ path рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ assocPath рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд░реВрдк рдореЗрдВ assocPath ред


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


  • lensProp рдПрдХ рд▓реЗрдВрд╕ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ
  • lensPath рдПрдХ рд▓реЗрдВрд╕ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрд▓рдЧреНрди рд╕рдВрдкрддреНрддрд┐ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ
  • lensIndex рдПрдХ рд▓реЗрдВрд╕ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рд░рдгреА рддрддреНрд╡ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ

рд╣рдо lensProp рдФрд░ lensPath рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЙрдкрд░реЛрдХреНрдд рд▓реЗрдВрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:


 const nameLens = lensProp('name') const twitterLens = lensPath(['socialMedia', 'twitter']) 

рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдореБрдЭреЗ рдореВрд▓ lens рдлрд╝рдВрдХреНрд╢рди рдХреА рд▓рдЧрднрдЧ рдХрднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


рдореИрдВ рдпрд╣ рд╕рдм рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?


рдареАрдХ рд╣реИ, рдорд╣рд╛рди, рд╣рдордиреЗ рд▓реЗрдВрд╕ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдмрдирд╛рдИред рдЕрдм рд╣рдо рдЙрдирдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?


рд░рд╛рдорджрд╛ рддреАрди рд▓реЗрдВрд╕ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред


  • рджреГрд╢реНрдп рд▓реЗрдВрд╕ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ
  • рд▓реЗрдВрд╕ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
  • рдУрд╡рд░ рд▓реЗрдВрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛рд░реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ

 view(nameLens, person) // => 'Randy' set(twitterLens, '@randy', person) // => { // name: 'Randy', // socialMedia: { // github: 'randycoulman', // twitter: '@randy' // } // } over(nameLens, toUpper, person) // => { // name: 'RANDY', // socialMedia: { // github: 'randycoulman', // twitter: '@randycoulman' // } // } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЗ рд▓реЗрдВрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдкреВрд░реА рд╡рд╕реНрддреБ рдХреЛ set рдФрд░ over рд▓реМрдЯрд╛ рджреЗрдВред


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


рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдХреЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд▓реЗрдВрд╕ рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдпрд╛ рдЙрдкрд▓рдмреНрдз рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЧреЗрдЯрд░реНрд╕, рдмрд╕рдиреЗ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд▓реЗрдВрд╕ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд▓рд┐рдВрдХ рдХреЗ рдмрд┐рдирд╛ view , set рдФрд░ over рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд╛рд░реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рдЖрдЧреЗ


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

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


All Articles