1. рдкрд╣рд▓рд╛ рдХрджрдо
2. рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдПрдВ
3. рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ (рдХрд░реА)
4. рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ
5. рдХреНрд╡реЗрдВрдЯреЗрд╕рд┐рд╡ рдиреЛрдЯреЗрд╢рди
6. рдЕрдкрд░рд┐рд╣рд╛рд░реНрдпрддрд╛ рдФрд░ рд╡рд╕реНрддреБрдПрдБ
7. рдЕрдкрд░рд┐рд╣рд╛рд░реНрдпрддрд╛ рдФрд░ рд╕рд░рдгрд┐рдпрд╛рдБ
8. рд▓реЗрдВрд╕
9. рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ рдкреЛрд╕реНрдЯ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рд▓реЗрдЦ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЫрдард╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд░рд╛рдорджрд╛ рд╕реНрдЯрд╛рдЗрд▓ рдерд┐рдВрдХрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд╛рдВрдЪрд╡реЗрдВ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рд╡реНрдпрд░реНрде рдЕрдВрдХрди рдХреА рд╢реИрд▓реА рдореЗрдВ рд▓реЗрдЦрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рддрд░реНрдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИред
рдЙрд╕ рд╕рдордп, рд╣рдо рдЕрдкрдиреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдмреЗрдмрд╛рдХ рд╢реИрд▓реА рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреБрдЫ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рдереЗред рдпрд╣ рдЙрдирдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рд╡рд╕реНрддреБ рдЧреБрдг рдкрдврд╝рдирд╛
рдЖрдЗрдП рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдорддрджрд╛рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ, рдЬрд┐рдирдХреА рд╣рдордиреЗ рдкрд╛рдВрдЪрд╡реЗрдВ рднрд╛рдЧ рдореЗрдВ рдЬрд╛рдВрдЪ рдХреА рдереА:
const wasBornInCountry = person => person.birthCountry === OUR_COUNTRY const wasNaturalized = person => Boolean(person.naturalizationDate) const isOver18 = person => person.age >= 18 const isCitizen = either(wasBornInCountry, wasNaturalized) const isEligibleToVote = both(isOver18, isCitizen)
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ рдмрдирд╛рдпрд╛ isCitizen
рдФрд░ isEligibleToVote
, рд▓реЗрдХрд┐рди рд╣рдо рдкрд╣рд▓реЗ рддреАрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдЪреМрдереЗ рднрд╛рдЧ рдореЗрдВ рд╕реАрдЦрд╛, рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рди рдФрд░ gte рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдзрд┐рдХ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЗрд╕рдХреА рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ:
const wasBornInCountry = person => equals(person.birthCountry, OUR_COUNTRY) const wasNaturalized = person => Boolean(person.naturalizationDate) const isOver18 = person => gte(person.age, 18)
рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡реНрдпрд░реНрде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╣рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ person
рдЪрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ person
рдХреЗ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдм рд╣рдо рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ - рдФрд░ рдпрд╣ рдЬрд░реВрд░реА рд╣реИред
рдкреНрд░реЛрдк
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд░рд╛рдорджрд╛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдпрд╣ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдк рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
prop
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо person.birthCountry
рдХреЛ prop('birthCountry', person)
рдХреЛ рдлрд┐рд░ рд╕реЗ person.birthCountry
рд╕рдХрддреЗ рд╣реИрдВред рдЪрд▓реЛ рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ:
const wasBornInCountry = person => equals(prop('birthCountry', person), OUR_COUNTRY) const wasNaturalized = person => Boolean(prop('naturalizationDate', person)) const isOver18 = person => gte(prop('age', person), 18)
рд╡рд╛рд╣, рдЕрдм рддреЛ рдмрд╣реБрдд рдмреБрд░рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рд╣рдорд╛рд░реЗ refactoring рдЬрд╛рд░реА рд░рдЦреЗрдВред рдЖрдЗрдП рд╣рдо рдЙрди рддрд░реНрдХреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдмрджрд▓ рджреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо equals
рддрд╛рдХрд┐ prop
рдЕрдВрддрд┐рдо рд░рд╣реЗред equals
рдЙрд▓реНрдЯреЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
const wasBornInCountry = person => equals(OUR_COUNTRY, prop('birthCountry', person)) const wasNaturalized = person => Boolean(prop('naturalizationDate', person)) const isOver18 = person => gte(prop('age', person), 18)
рдЕрдЧрд▓рд╛, рдЖрдЗрдП рдХрд░реАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, equals
рдФрд░ gte
рдХреА рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдкрддреНрддрд┐, рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ prop
рдХреЙрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛:
const wasBornInCountry = person => equals(OUR_COUNTRY)(prop('birthCountry', person)) const wasNaturalized = person => Boolean(prop('naturalizationDate', person)) const isOver18 = person => gte(__, 18)(prop('age', person))
рдпрд╣ рдЕрднреА рднреА рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╡рд┐рдХрд▓реНрдк рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╣рдо рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдЪрд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд╕рднреА prop
рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдХрд░реАрдиреЗ рдХрд╛ рд▓рд╛рдн рд▓реЗрдВ:
const wasBornInCountry = person => equals(OUR_COUNTRY)(prop('birthCountry')(person)) const wasNaturalized = person => Boolean(prop('naturalizationDate')(person)) const isOver18 = person => gte(__, 18)(prop('age')(person))
рдлрд┐рд░, рдХрд┐рд╕реА рддрд░рд╣ рдмрд╣реБрдд рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдПрдХ рдкрд░рд┐рдЪрд┐рдд рдкреИрдЯрд░реНрди рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдЫрд╡рд┐ f(g(person))
, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреВрд╕рд░реЗ рднрд╛рдЧ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдпрд╣ compose(f, g)(person)
рдмрд░рд╛рдмрд░ рд╣реИред
рдЖрдЗрдП рдЗрд╕ рд▓рд╛рдн рдХреЛ рд╣рдорд╛рд░реЗ рдХреЛрдб рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
const wasBornInCountry = person => compose(equals(OUR_COUNTRY), prop('birthCountry'))(person) const wasNaturalized = person => compose(Boolean, prop('naturalizationDate'))(person) const isOver18 = person => compose(gte(__, 18), prop('age'))(person)
рдЕрдм рд╣рдореЗрдВ рдХреБрдЫ рдорд┐рд▓рд╛ред рд╣рдорд╛рд░реЗ рд╕рднреА рдХрд╛рд░реНрдп person => f(person)
рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВред рдФрд░ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рдВрдЪрд╡реЗрдВ рднрд╛рдЧ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡реНрдпрд░реНрде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
const wasBornInCountry = compose(equals(OUR_COUNTRY), prop('birthCountry')) const wasNaturalized = compose(Boolean, prop('naturalizationDate')) const isOver18 = compose(gte(__, 18), prop('age'))
рдЬрдм рд╣рдордиреЗ рд╢реБрд░реБрдЖрдд рдХреА, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рддрд░реАрдХреЛрдВ рдиреЗ рджреЛ рдХрд╛рдо рдХрд┐рдПред рдЙрдиреНрд╣реЛрдВрдиреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреА рдУрд░ рд░реБрдЦ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХреБрдЫ рдСрдкрд░реЗрд╢рди рддреИрдпрд╛рд░ рдХрд┐рдПред рдПрдХ рдирд┐рд░рд░реНрдердХ рд╢реИрд▓реА рдореЗрдВ рдЗрд╕ refactoring рдиреЗ рдЗрд╕реЗ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдмрдирд╛ рджрд┐рдпрд╛ред
рдЖрдЗрдП рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХреБрдЫ рдРрд╕реЗ рд╣реА рдЕрдиреНрдп рд╕рд╛рдзрдиреЛрдВ рдкрд░, рдЬрд┐рдиреНрд╣реЗрдВ рд░рд╛рдорджрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЪреБрдирдирд╛
рдЬрд╣рд╛рдВ prop
рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХрд╛ рдореВрд▓реНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рд╕реЗ рдХрдИ рдЧреБрдгреЛрдВ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдФрд░ рд╡рд░реНрд╖реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо pick(['name','age'], person)
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣реИ
рдЕрдЧрд░ рд╣рдо рд╕рд┐рд░реНрдл рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдореЗрдВ рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рддреЛ рдЙрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛, рд╣рдо рдЙрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП hasIn : has('name', person)
ред
рдкрде
рдЬрд╣рд╛рдБ prop
рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ prop
, рд░рд╛рд╕реНрддрд╛ рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬрд╝рд┐рдк рдХреЛрдб рдХреЛ рдПрдХ рдЧрд╣рд░реА рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдЦреАрдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: path(['address','zipCode'], person)
ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ path
prop
рд╕реЗ рдЕрдзрд┐рдХ рдХреНрд╖рдорд╛рд╢реАрд▓ рд╣реИред рдпрджрд┐ рдкрде рдореЗрдВ рдХреБрдЫ рднреА undefined
рд╣реЛ (рдореВрд▓ рддрд░реНрдХ рд╕рд╣рд┐рдд) null
рдпрд╛ undefined
, рдЬрдмрдХрд┐ prop
рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред
propOr / pathOr
PropOr рдФрд░ pathOr, PropTo рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд path
рдФрд░ path
рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рд╡реЗ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рдкрде рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдзреНрдпрдпрди рдХреА рдЬрд╛ рд░рд╣реА рд╡рд╕реНрддреБ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рд╣рдо рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ: propOr('<Unnamed>, 'name', person)
ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ prop
рд╡рд┐рдкрд░реАрдд, propOr
рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдпрджрд┐ person
null
рдпрд╛ undefined
; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ред
рдХреБрдВрдЬреА / рдорд╛рди
рдХреБрдВрдЬрд┐рдпрд╛рдБ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рднреА рдЬреНрдЮрд╛рдд рдЧреБрдгреЛрдВ рдХреЗ рд╕рднреА рдирд╛рдореЛрдВ рд╕реЗ рдпреБрдХреНрдд рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред рдорд╛рди рдЗрди рдЧреБрдгреЛрдВ рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рдПрдВрдЧреЗред рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рд╣реЛрдиреЗ рдкрд░ рдпреЗ рдХрд╛рд░реНрдп рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╕реАрдЦрд╛ред
рдЧреБрдг рдЬреЛрдбрд╝реЗрдВ, рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рд╣рдЯрд╛рдПрдВ
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдШреЛрд╖рд┐рдд рд╢реИрд▓реА рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдХрд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдЪреВрдВрдХрд┐ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реАрдзреЗ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдЗрдЪреНрдЫрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдмрджрд▓ рдЧрдП рд╣реИрдВред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд░рд╛рдорджрд╛ рд╣рдореЗрдВ рдХрдИ рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
assoc / рдЧрдзрд╛рдкрда
рдЬрдм рд╣рдо рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╢реИрд▓реА рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд╛рдо рд╕реЗрдЯ рдпрд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ: person.name = 'New name'
ред
рд╣рдорд╛рд░реА рдХрд╛рд░реНрдпрд╛рддреНрдордХ, рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рджреБрдирд┐рдпрд╛ рдореЗрдВ, рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп const updatedPerson = assoc('name', 'newName', person)
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: const updatedPerson = assoc('name', 'newName', person)
ред
рдПрдХ рдЬреЛрдбрд╝рд╛ рдпрд╛ рдЕрджреНрдпрддрди рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдореВрд▓ рд╡рд╕реНрддреБ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред
рд╕рдВрд▓рдЧреНрди рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди assocPath рдкрд░ рднреА рд╣реИ: const updatedPerson = assocPath(['address', 'zipCode'], '97504', person)
ред
dissoc / рдбрд┐рд╕реНрдХреЛрдкрде / omit
рдЧреБрдгреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдореВрд▓ рд░реВрдк рд╕реЗ, рд╣рдо рд╡реНрдпрдХреНрддрд┐ рдХреЛ delete person.age
рд▓рд┐рдП рдХрд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд░рд╛рдорджрд╛ рдореЗрдВ, рд╣рдо рдбрд┐рд╕реЛрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ : `рдХрд╛рд╕реНрдЯ рдЕрдкрдбреЗрдЯрдкрд░реНрд╕рди = рдбрд┐рд╕реНрдХреЛ (рдЖрдпреБ), рд╡реНрдпрдХреНрддрд┐)
dissocPath рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрд╣рд░реА рд╡рд╕реНрддреБ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: dissocPath(['address', 'zipCode'], person)
ред
рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ omit рднреА рд╣реИ, рдЬреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рдЧреБрдг рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ: const updatedPerson = omit(['age', 'birthCountry'], person)
ред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ pick
рдФрд░ omit
рд╕рдорд╛рди рд╣реИрдВ рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреВрд░рдХ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рд╢реНрд╡реЗрддрд╡рд░реНрдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ (рдХреЗрд╡рд▓ pick
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреБрдгреЛрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рдмрдЪрд╛рдПрдВ) рдФрд░ рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ ( omit
рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛)ред
рдЕрдм рд╣рдо рдПрдХ рдШреЛрд╖рд┐рдд рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╢реИрд▓реА рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирддреЗ рд╣реИрдВред рдЖрдЗрдП рдПрдХ celebrateBirthday
рдбреЗ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ рдЬреЛ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЬрдиреНрдорджрд┐рди рдкрд░ рдЙрд╕рдХреА рдЖрдпреБ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред
const nextAge = compose(inc, prop('age')) const celebrateBirthday = person => assoc('age', nextAge(person), person)
рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рд╣реИред рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдирдП рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреБрд░рд╛рдиреЗ рдореВрд▓реНрдп рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдерд╛ред
рдореБрдЭреЗ рдХрдо рдирдХрд╝рд▓ рдФрд░ рдХрдо рдХрдареЛрд░ рд╢реИрд▓реА рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдкрддрд╛, рдЙрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ рдерд╛ред
рд░рдорджрд╛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╣рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдмрдЪрд╛рддрд╛ рд╣реИред evolve
рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЙрди рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдЗрдП celebrateBirthday
ред evolve
рдХреЗ рджрд┐рди рдЬрдиреНрдорджрд┐рди рдХрд╛ celebrateBirthday
:
const celebrateBirthday = evolve({ age: inc })
рдпрд╣ рдХреЛрдб рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╣реА рдЧреБрдг рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдХрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд╕реНрддреБ (рдЬреЛ рдХрд┐ рдХреНрд░реВрд░ рд╢реИрд▓реА рдХреЗ рдХрд╛рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ) рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди age
рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓ рдореВрд▓реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ age
рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдПрдЧреАред
evolve
рдХрдИ рдЧреБрдгреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЗ рдХрдИ рд╕реНрддрд░реЛрдВ рдкрд░ рднреАред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рдПрдХ рд╣реА рдЫрд╡рд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реЛрдЧрд╛, рдФрд░ evolve
рд╣реЛрдЧрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рдкреБрди: рдЙрддреНрддреАрд░реНрдг рд╣реЛрдЧрд╛, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ evolve
рдирдП рдЧреБрдг рдирд╣реАрдВ evolve
рд╣реИрдВ; рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдРрд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ evolve
рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдореЗрд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рд╡рд░реНрдХрд╣реЙрд░реНрд╕ рдмрди рд░рд╣рд╛ рд╣реИред
рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдорд┐рд▓рд╛рдПрдВ
рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рджреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдирд╛рдорд┐рдд рд╡рд┐рдХрд▓реНрдк рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд░рд╛рдорд╛ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдорд░реНрдЬ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
function f(a, b, options = {}) { const defaultOptions = { value: 42, local: true } const finalOptions = merge(defaultOptions, options) }
merge
рдПрдХ рдирдИ рд╡рд╕реНрддреБ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рд╕рднреА рдЧреБрдг рдФрд░ рдореВрд▓реНрдп рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рджреЛрдиреЛрдВ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕рдорд╛рди рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рддреЛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ рд╡рд┐рдЬреЗрддрд╛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЗрд╕ рдирд┐рдпрдо рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдПрдХ рдЖрддреНрдо-рдирд┐рд╣рд┐рдд рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ merge
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрдердХ рдмрдирд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрдо рд╕рд╛рд░реНрдердХ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдРрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреБрдЫ рдирдП рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╕рдВрдШ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓рд╛ рддрд░реНрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрдЬрд╛рдп рдЬреАрддрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред
рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдХреЗрд╡рд▓ merge(newValues)
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рд╡рд╣ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдЕрдкрдиреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрдирд╛рддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ reverseMerge
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ const reverseMerge = flip(merge)
рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред flip
рдХреЙрд▓ рдЙрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ рджреЛ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡реИрдк рдХрд░рддрд╛ рд╣реИред
merge
рдПрдХ рд╕рддрд╣ merge
рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╡рд╕реНрддреБрдУрдВ, рдЬрдм рд╕рдВрдпреБрдХреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рдПрдХ рдЙрдк-рд╡рд┐рд╖рдп рд╣реИ, рддреЛ рдпреЗ рдЙрдк-рд╡рд┐рд╖рдп рд╡рд┐рд▓рдп рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд░рд╛рдорджрд╛ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЧрд╣рд░реА рдорд░реНрдЬ рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ ( рдореВрд▓ рд▓реЗрдЦ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдкреБрд░рд╛рдиреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдЖрдЬ рд░рдорд╛рдбрд╛ рдХреЗ рдкрд╛рд╕ рдорд░реНрдЬрдбрд┐рдкреНрдкреНрд▓рд┐рдлреНрдЯ , рдорд░реНрдЬрдбрд┐рдкреЗрдпрд░ рд░рд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЧрд╣рд░реА рдорд░реНрдЬрд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рдорд░реНрдЬрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВ ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ merge
рдХреЗрд╡рд▓ рджреЛ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдорд░реНрдЬ рдСрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЧрдардмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд▓реЗрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЖрдЬ рд╣рдореЗрдВ рдПрдХ рдШреЛрд╖рд┐рдд рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╢реИрд▓реА рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рдЕрджреНрднреБрдд рд╕реЗрдЯ рдорд┐рд▓рд╛ рд╣реИред рдЕрдм рд╣рдо рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╣рдо рдЗрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдПрдХ рд╢реИрд▓реА рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
рдЖрдЧреЗ
рдЕрдм рд╣рдо рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╢реИрд▓реА рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? "рдкреНрд░рддрд┐рд░рдХреНрд╖рд╛ рдФрд░ рд╕рд░рдгрд┐рдпрд╛рдБ" рд╣рдореЗрдВ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдЙрдирдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред