рдХреЛрдЯрд▓рд┐рди M5.3: рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдЧреБрдг

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

рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рднрд╛рд╖рд╛ рд╕рдорд░реНрдерди рдХрд░реЗ

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

рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдЧреБрдг


рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

class Example { var p: String by Delegate() } 

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

 class Delegate() { fun get(thisRef: Any?, prop: PropertyMetadata): String { return "$thisRef, thank you for delegating '${prop.name}' to me!" } fun set(thisRef: Any?, prop: PropertyMetadata, value: String) { println("$value has been assigned") } } 

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

рдпрджрд┐ рд╣рдо рдЧреБрдг p рдХрд╛ рдорд╛рди рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдбреЗрд▓рд┐рдЧреЗрдЯ рд╡рд░реНрдЧ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ - рд╕рдВрдкрддреНрддрд┐ p рдХрд╛ рд╡рд┐рд╡рд░рдг рдСрдмреНрдЬреЗрдХреНрдЯ (рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рдкрддрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ) :

 val e = Example() println(ep) 

рдпрд╣ рдЙрджрд╛рд╣рд░рдг "рдЙрджрд╛рд╣рд░рдг @ 33a17727" рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛, рдореЗрд░реЗ рд▓рд┐рдП 'p' рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! "

рдЗрд╕реА рддрд░рд╣, рдЬрдм рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдЖрддреА рд╣реИ, рддреЛ рд╕реЗрдЯ () рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдорд┐рд▓рддреЗ рд╣реИрдВ () рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд░ рддреАрд╕рд░реЗ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдп рд╣реИ:

 ep = "NEW" 

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЖрдЙрдЯрдкреБрдЯ "NEW рдХреЛ рдЙрджрд╛рд╣рд░рдг @ 33a17727 рдореЗрдВ 'p' рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред"

рдЖрдк рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЖрд▓рд╕реА рдЧреБрдгреЛрдВ рдЖрджрд┐ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдХреЛрдЯрд▓реАрди рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИред рд╕рдмрд╕реЗ рдЖрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЛ kotlin.properties.Delegates рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЖрд▓рд╕реА рдЧреБрдг


рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ рдЖрд▓рд╕реА рд╕реЗ:

 import kotlin.properties.Delegates class LazySample { val lazy: String by Delegates.lazy { println("computed!") "Hello" } } 

Delegates.lazy () рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдЧреБрдг рдорд╛рди рдХреА рдЖрд▓рд╕реА рдЧрдгрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ: рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдХреЙрд▓ () рд▓реИрдореНрдмрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрд▓рд╕реА рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ () рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ; рдмрд╛рдж рдХреА рдХреЙрд▓ рдмрд╕ рдпрд╛рдж рдХрд┐рдП рдЧрдП рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред

рдпрджрд┐ рдЖрдк рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЖрд▓рд╕реА рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмреНрд▓реЙрдХрд▓рд╛рдЗрдЬрд╝ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдареАрдХ рдПрдХ рдзрд╛рдЧреЗ рд╕реЗ рдХреА рдЬрд╛рдПрдЧреА рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреА рдЬрд╛рдПрдЧреАред

рдЕрд╡рд▓реЛрдХрдиреАрдп рдЧреБрдг


 class User { var name: String by Delegates.observable("<no name>") { d, old, new -> println("$old -> $new") } } 

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

рдмрд┐рдирд╛ рдЖрд░рдореНрднрд┐рдХ рдЧреБрдг


рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЙрдкрдпреЛрдЧ: рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреВрдЫрддреЗ рд╣реИрдВ: "рдпрджрд┐ рдореИрдВ рдЗрд╕реЗ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдирд╣реАрдВ рд░рдЦрддрд╛ (рддреЛ рдореИрдВ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░реВрдВрдЧрд╛)?" рдХреЛрдЯрд▓рд┐рди рдмрд┐рдирд╛ рд╢реБрд░реБрдЖрддреА рдХреЗ рдЧреИрд░-рдЕрдореВрд░реНрдд рдЧреБрдгреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ:

 class Foo { var bar: Bar // error: must be initialized } 

рдХреЛрдИ рдЕрд╢рдХреНрдд рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдкреНрд░рдХрд╛рд░ "рдмрд╛рд░" рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди "рдмрд╛рд░", рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ ... рдЕрдм рдЖрдк рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ:

 class Foo { var bar: Bar by Delegates.notNull() } 

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

рдПрдХ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЧреБрдгреЛрдВ рдХрд╛ рднрдВрдбрд╛рд░рдг


рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг: рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ред рдпрд╣ "рдбрд╛рдпрдирд╛рдорд┐рдХ" рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, JSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп:

 class User(val map: Map<String, Any?>) { val name: String by Delegates.mapVal(map) val age: Int by Delegates.mapVal(map) } 

рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:

 val user = User(mapOf( "name" to "John Doe", "age" to 25 )) 

рд╕реНрдЯреЙрдХ рдХреБрдВрдЬрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ - рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо:

 println(user.name) // Prints "John Doe" println(user.age) // Prints 25 

рдореИрдкрд╡рд┐рдЕрд░ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╢реЛрдзрд┐рдд рдЧреБрдг (рд╕рдВрд╕реНрдХрд░рдг) рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдорд╛рди рдПрдХ рд╣реА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ (рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдореИрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред

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


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

PS рдХреЛрдЯрд▓рд┐рди M5.3 рдореЗрдВ рдЕрдиреНрдп рдирдП рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдпрд╣рд╛рдБ (рдЕрдВрдЧреНрд░реЗрдЬрд╝реА рдореЗрдВ) рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles