рдПрдВрдбреНрд░реЙрдпрдб рдкрд░ рдХреЛрдЯрд▓рд┐рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди

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

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


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

рдЕрдкрдиреА рдЙрдореНрдореАрджреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдХреЛрдЯрд▓рд┐рди рдЬрд╛рд╡рд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛ рд╣реИ? рдпрд╛ рддреЗрдЬ? рдпрд╛ рд╢рд╛рдпрдж рдмрд╣реБрдд рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ? рдЖрдЦрд┐рд░рдХрд╛рд░, рджреЛрдиреЛрдВ рдмрд╛рдИрдЯрдХреЛрдб рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред

рдЪрд▓реЛ рдареАрдХ рд╣реИред рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рдЬрдм рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ, рддреЛ рд╣рд░ рдХреЛрдИ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, Android рдХреЗ рд▓рд┐рдП рдХреЛрдИ JMH ( Java Microbenchmark Harness ) рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣ рдирд╣реАрдВ рдорд╛рдк рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрд┐рддрдирд╛ рдардВрдбрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рд╣рдо рдорд╛рдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИ?

fun measure() : Long { val startTime = System.nanoTime() work() return System.nanoTime() - startTime } adb shell dumpsys gfxinfo %package_name% 

рдпрджрд┐ рдЖрдк рдХрднреА рднреА рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдорд╛рдкрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬреЗрдПрдордПрдЪ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдЙрджрд╛рд╕, рд░реЛрдирд╛ рдФрд░ рд╕рдкрдиреЗ рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрдирд╛ рд╣реЛрдЧрд╛ - рдРрд╕рд╛ рдХрднреА рди рдХрд░реЗрдВред

рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░, рдЖрдк рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, Google рдиреЗ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдХреЗ рдЖрдИ / рдУ рдореЗрдВ рдЗрд╕рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдерд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдЖрд░рдЯреА, рдФрд░ рдЕрдЧрд░ рдПрдВрдбреНрд░реЙрдЗрдб 4.1 рдкрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрд╡рдВрдЯрди рдореЗрдВ рд▓рдЧрднрдЧ 600-700 рдиреИрдиреЛрд╕реЗрдХрдВрдб рд▓рдЧреЗ, рддреЛ рдЖрдард╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд▓рдЧрднрдЧ 60 рдиреИрдиреЛрд╕реЗрдХрдВрдб рд▓рдЧреЗрдВрдЧреЗред рдпрд╛рдиреА рд╡реЗ рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдорд╛рдкрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рд╣рдо рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реЗ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИрдВред

рдпрджрд┐ рд╣рдо рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдо рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ рдКрдкрд░ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢, рдпреВрдЖрдИ рдХреЛ рдХреИрд╕реЗ рдорд╛рдкреЗрдВ:

adb рд╢реЗрд▓ dffys gfxinfo% package_name%

рджрд░рдЕрд╕рд▓, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдорд╛рдкреЗрдВрдЧреЗ рдФрд░ рд╣рдо рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдЧрд▓рд╛ рд╕рд╡рд╛рд▓ред рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХрд╛ рдЖрд╡реЗрджрди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдкреНрд░рджрд░реНрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддрд╛ рд╣реИред

  1. рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рд░ рдЬрдЧрд╣ред
  2. рдпреВрдЖрдИ рдереНрд░реЗрдбред
  3. рдХрд╕реНрдЯрдо рджреГрд╢реНрдп + рдПрдирд┐рдореЗрд╢рдиред




рдореБрдЭреЗ рд╕рдмрд╕реЗ рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдХреЛрдб рдХреЛ рдмрд╣реБрдд рдЬрд▓реНрджреА, рдмрд╣реБрдд рдЬрд▓реНрджреА рд╕реЗ рдмрдирд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдФрд░ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдпреВрдЖрдИрд╣реНрд░реЗрдб рдпрд╛ рдХрд╕реНрдЯрдо рджреГрд╢реНрдп рдирд╣реАрдВ рд╣реИред рдореИрдВ рднреА рдЗрд╕рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ - рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЕрд▓рдЧ JSON рд╕реНрдЯреНрд░реАрдо рдореЗрдВ 10 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП deserialized рдЬрд╛рдПрдЧрд╛ рдЕрдм рдХреЛрдИ рднреА рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдЧреЗрд╕реНрдЯрд╛рд▓реНрдЯ рдордиреЛрд╡рд┐рдЬреНрдЮрд╛рди рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рдЭрдкрдХреА рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд▓рдЧрднрдЧ 150-300 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП, рдорд╛рдирд╡ рдЖрдВрдЦ рдзреНрдпрд╛рди рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрддреА рд╣реИ рдФрд░ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддреА рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рдпреЗ 10 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХрд╛ рдореМрд╕рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЬреЗрд╕реНрдЯрд╛рд▓реНрдЯ рдордиреЛрд╡рд┐рдЬреНрдЮрд╛рди рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рд╡рд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

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

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

рддреЛ рдкрд╣рд▓рд╛ рдирд┐рдпрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╣реИред

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

рдХреЛрдЯрд▓рд┐рди рд╕реНрдЯрд╛рдЗрд▓


рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХреЛрдЯрд▓рд┐рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдЬрд╛рд╡рд╛ рд╕реЗ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рдорд╛рдкрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • рд╕рдВрдЧреНрд░рд╣ рдЖрдкреАред
  • рд╡рд┐рдзрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ред
  • рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдПрдВред
  • рд╕рдВрд╢реЛрдзрд┐рдд рдкреНрд░рдХрд╛рд░ред
  • Coroutinesред

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

рдпрджрд┐ рд╣рдо рдЬрд╛рд╡рд╛ 8 рд╕реЗ рд╕реНрдЯреНрд░реАрдо рдПрдкреАрдЖрдИ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЛрдЯрд▓рд┐рди рдХрд▓реЗрдХреНрд╢рди рдПрдкреАрдЖрдИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рд╢рд░реНрдд рдХреЗ рд╕рд╛рде - рд╕рдВрдЧреНрд░рд╣ рдПрдкреАрдЖрдИ рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рдкрдХреНрд╖рд╛рдШрд╛рдд рдирд╣реАрдВ рд╣реИ, рдЕрдЧрд░ рд╣рдо рд╕реНрдЯреНрд░реАрдо рдПрдкреАрдЖрдИ рдбреЗрдЯрд╛ рдХреЗ рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рдХреЛрдЯрд▓рд┐рди рдХрд▓реЗрдХреНрд╢рди рдПрдкреАрдЖрдИ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдареАрдХ рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред

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

рдЕрдЧрд▓рд╛ рдЖрдЗрдЯрдо рдЬрд┐рд╕рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рд╡рд╣ рдбреЗрдЯрд╛ рдХреНрд▓рд╛рд╕реЗрд╕ рд╣реИ ред

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

рдХреЛрдЯрд▓рд┐рди рдЖрдкрдХреЛ рдЗрди рд╕рдм рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рджреЗрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪреВрдВрдХрд┐ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдЧреБрдг рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╡рд░реНрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИ, рд╕рднреА рдЧреБрдг рд╣реИрдВ ред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдРрд╕рд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ, рдпрджрд┐ рдЖрдк рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рдбреЗрдЯрд╛ рд╡рд░реНрдЧ рд╣реИрдВ, рддреЛ рдмрд╛рдХреА рд╕рдм рдЪреАрдЬреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕рдореВрд╣ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд░рд╛рдмрд░ (), toStrung () / hasCode (), рдЖрджрд┐ред

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

рдореИрдВ рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдкрд╣рд▓реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд░реНрдЧреЛрдВ рдФрд░ рдХреБрдЫ рдФрд░ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдереЗред рдЕрдм рд╣рд░ рдХреЛрдИ рдЗрд╕рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрджрдд рдмрдиреА рд╣реБрдИ рд╣реИред

рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдХреНрдпрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдЬрд╛рд╡рд╛ рдкрд░ рд╣рдореЗрд╢рд╛ рд╕реЗ рддреЗрдЬ рд╣реЛрдЧрд╛? рдпрд╣ Reified рдкреНрд░рдХрд╛рд░ рд╣реИ , рдЬреЛ, рд╡реИрд╕реЗ, Dart рдореЗрдВ рднреА рд╣реИред

рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдЖрдк рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдХрд▓рди рдЪрд░рдг рдкрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреНрд╖рд░рдг рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЬреЗрдиреЗрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпрд╛ рд╣реИред

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

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

рдореИрджрд╛рди


рддреЛ рдЪрд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рд╣рдо рдЬреЛ рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрд╕ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 class Test { var a = 5 var b = 6 val c = B() fun work () { val d = a + b val e = ca + cb } } class B (@JvmField var a: Int = 5,var b: Int = 6) 

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреБрдг рд╣реИрдВред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ var рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ val рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрд╛рд╣рд░реА рд╡рд░реНрдЧ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рдЧреБрдг @JvmField рд╣реИ, рдФрд░ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ () рдлрд╝рдВрдХреНрд╢рди: рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рдлрд╝реАрд▓реНрдб a рдФрд░ рдлрд╝реАрд▓реНрдб b рдХреЗ рдорд╛рди рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдмрд╛рд╣рд░реА рд╡рд░реНрдЧ рдХреЗ рдлрд╝реАрд▓реНрдб a рдФрд░ рдлрд╝реАрд▓реНрдб b рдХреЗ рдорд╛рди, рдЬреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдлрд╝реАрд▓реНрдб c рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред

рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, d = a + b рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдПрдХ рдмрд╛рд░, рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдЧреЗрдЯ рдХреЛ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

  L0 LINENUMBER 10 L0 ALOAD 0 GETFIELD kotlin/Test.a : I ALOAD 0 GETFIELD kotlin/Test.b : I IADD ISTORE 1 

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо bytecode рдХреЛ рджреЗрдЦреЗрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЧреЗрдЯрдлрд╝реАрд▓реНрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣ рдмрд╛рдпрдЯреЗрдХреЛрдб рдореЗрдВ InvokeVirtual рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝реАрд▓реНрдб рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рд╣реИред рд╢реБрд░реВ рдореЗрдВ рд╣рдорд╕реЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдерд╛, рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рдЧреБрдг рд╣реИрдВ, рди рдХрд┐ рдХреНрд╖реЗрддреНрд░ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХреЛрдЯрд▓рд┐рди рд╣рдореЗрдВ рдзреЛрдЦрд╛ рджреЗ рд░рд╣рд╛ рд╣реИ, рдПрдХ рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрдкреАрд▓ рд╣реИред

рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЕрдЧрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдФрд░ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ: рд╡реИрд▓ рдИ = рд╕реАрдП + рд╕реАрдмреА?

  L1 LINENUMBER 11 L1 ALOAD 0 GETFIELD kotlin/Test.c : Lkotlin/B; GETFIELD kotlin/Ba : I ALOAD 0 GETFIELD kotlin/Test.c : Lkotlin/B; INVOKEVIRTUAL kotlin/B.getB ()I IADD ISTORE 2 

рдкрд╣рд▓реЗ, рдпрджрд┐ рдЖрдк рдПрдХ рдирд┐рдЬреА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдПрдХ InvokeVirtual рдХреЙрд▓ рдерд╛ред рдпрджрд┐ рдпрд╣ рдПрдХ рдирд┐рдЬреА рд╕рдВрдкрддреНрддрд┐ рдереА, рддреЛ рдЧреЗрдЯрдлрд┐рд▓реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдереАред GetField, InvokeVirtual рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ, Android рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдпрд╣ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕реАрдзреЗ рдХрд┐рд╕реА рдХреНрд╖реЗрддреНрд░ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ 3 рд╕реЗ 7 рдЧреБрдирд╛ рддреЗрдЬрд╝ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рд╣рдореЗрд╢рд╛ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВ, рдФрд░ рдЧреЗрдЯрд░реНрд╕ рдпрд╛ рд╕реЗрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВред рдЕрдм, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдард╡реАрдВ рдПрдЖрд░рдЯреА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирдВрдмрд░ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЕрднреА рднреА 4.1 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдЪ рд╣реЛрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдлрд╛рдпрджреЗрдордВрдж рд╣реИ GetField, рдФрд░ InvokeVirtual рдирд╣реАрдВред

рдЕрдм, рдЖрдк GetField рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд░реНрдЧ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рддреЛ рдЖрдкрдХреЛ @JvmField рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░, рдмрд┐рд▓реНрдЯрдХреЛрдб рдореЗрдВ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рдПрдХ рдЧреЗрдЯрдлрд┐рд▓реНрдб рдХреЙрд▓ рд╣реЛрдЧрд╛, рдЬреЛ 3тАУ7 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред

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

рдпрджрд┐ рд╣рдо рд╕рднреА рдЕрдиреБрдХреВрд▓рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдпрд╣ рдХреБрдЫ рджреЗ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдЯреЗрдЯрд┐рдХ?


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

  companion object { var k = 5 fun work2() : Int = 42 } 

рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рдорд╛рдирдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рдорд╛рди рд╣реИ? рдпрд╣ рд╕реНрдерд┐рд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ?

рд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЛрдЯрд▓рд┐рди рдиреЗ рдШреЛрд╖рдгрд╛ рдХреА рдХрд┐ рдпрд╣рд╛рдВ рд╡рд╣ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рд╣реИ - рд╕реНрдереИрддрд┐рдХ, рд╡рд╣ рд╡рд╕реНрддреБ рдХрд╣рддреА рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдерд┐рд░ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рд╣рдо рдЙрддреНрдкрдиреНрди рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ:

  L2 LINENUMBER 21 L2 GETSTATIC kotlin/Test.Companion : Lkotlin/Test$Companion; INVOKEVIRTUAL kotlin/Test$Companion.getK ()I GETSTATIC kotlin/Test.Companion : Lkotlin/Test$Companion; INVOKEVIRTUAL kotlin/Test$Companion.work2 ()I IADD ISTORE 3 

рдПрдХ Test.Companion рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рд╛рдереА рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИред рд╡рд╣ getstatic рд▓реЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░ рдЙрд╕ рдкрд░ getK рдлрд╝рдВрдХреНрд╢рди invokevirtual рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрд╛рд░реНрдп 2 рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдпрд╣реА рд╣реИред рддреЛ рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреБрд░рд╛рдиреЗ JVM рдкрд░, рдЗрдирд╡реЛрдХреИрд╕реНрдЯрд┐рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрдирд╡реЛрдХреИрд╕реНрдЯрд┐рдХ рд▓рдЧрднрдЧ 30% рддреЗрдЬ рдерд╛ред рдЕрдм, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдореЗрдВ, рдЕрдиреБрдХреВрд▓рд┐рдд рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрд╣ рд▓рдЧрднрдЧ рдЕрджреГрд╢реНрдп рд╣реИред рдлрд┐рд░ рднреА, рдЖрдкрдХреЛ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рд╣реИ, рдФрд░ 4ST1 рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдерд╛рди 700 рдиреИрдиреЛрд╕реЗрдХрдВрдб рд╣реИ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреНрдпрд╛ рд╣реИ рдЬреЛ рдпрджрд┐ рдЖрдк рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЛ рд░рд┐рд╡рд░реНрд╕-рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рддреЛ:

 private static int k = 5; public static final Test.Companion Companion = new Test.Companion((DefaultConstructorMarker)null); public static final class Companion { public final int getK() { return Test.k;} public final void setK(int var1) { Test.k = var1; } public final int work2() { return 42; } private Companion() { } // $FF: synthetic method public Companion(DefaultConstructorMarker $constructor_marker) { this(); } } 

рдПрдХ рд╕реНрдерд┐рд░ рдлрд╝реАрд▓реНрдб рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рдереА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдВрджрд░ рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИред рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рдЙрджрд╛рд╕ рд╣реИред

рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ? рд╣рдо @JvmField рдФрд░ @JvmStatic рдХреЛ рдЬреЛрдбрд╝рдХрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред

 val i = k + work2() companion object { @JvmField var k = 5 JvmStatic fun work2() : Int = 42 } 

рдореИрдВ рддреБрд░рдВрдд рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЖрдк @JvmStatic рд╕реЗ рджреВрд░ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдпрд╣ рдПрдХ рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдереА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рдВрдЯрди рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓ рд╣реЛрдЧрд╛ред

 private static int k = 5; public static final Test.Companion Companion = new Test.Companion((DefaultConstructorMarker)null); public static final class Companion { @JvmStatic public final int work2() { return 42; } private Companion() {} // $FF: synthetic method public Companion(DefaultConstructorMarker $constructor_marker) { this(); } } 

рд▓реЗрдХрд┐рди рдХреЙрд▓ рдХреЗрд╡рд▓ k рдХреЗ рд▓рд┐рдП рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ @JvmField рд╣реЛрдЧрд╛, рдЗрд╕реЗ рд╕реАрдзреЗ getstatic рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рдЕрдм рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди 2 рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред

  L2 LINENUMBER 21 L2 GETSTATIC kotlin/Test.k : I GETSTATIC kotlin/Test.Companion : Lkotlin/Test$Companion; INVOKEVIRTUAL kotlin/Test$Companion.work2 ()I IADD ISTORE 3 

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

 object A { fun test() = 53 } 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

 L3 LINENUMBER 23 L3 GETSTATIC kotlin/A.INSTANCE : Lkotlin/A; INVOKEVIRTUAL kotlin/A.test ()I POP 

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рд┐рдВрдЧрд▓реЗрдЯреЛрди рд╕реЗ рдПрдХ рдЕрд╕реНрдерд┐рд░ рдЙрджрд╛рд╣рд░рдг рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдареАрдХ рдЙрд╕реА рдЖрднрд╛рд╕реА рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЗрдиреЛрдХреИрд╕реНрдЯреИрдЯрд┐рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ рдЙрдЪреНрдЪ-рдСрд░реНрдбрд░ рдХрд╛рд░реНрдпред рдЬрдм рд╣рдо рд╕рд┐рд░реНрдл рдХрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд╣рд░ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдордЬреЗрджрд╛рд░ рдЯреЗрд╕реНрдЯ 2 рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

  fun test2() = 99 L4 LINENUMBER 24 L4 INVOKESTATIC kotlin/TestKt.test2 ()I POP 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдПрдХ рд╡рд╕реНрддреБ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ testKt, рдпрд╣ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рдЕрдм рдЗрд╕реЗ рдЗрдирд╡реЛрдХреИрд╕реНрдЯрд┐рдХ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

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

NULLABILITY


 fun test(first: String, second: String?) : String { second ?: return first return "$first $second" } 

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

рдпрд╣ рд╕рдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рд╡рд╛ рдХреЛрдб рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЬрд╛рдБрдЪ рд╣реЛрдЧреАред

 @NotNull public final String test(@NotNull String first,@Nullable String second) { Intrinsics.checkParameterIsNotNull(first, "first"); return second != null ? (first + " " + second) : first; } 

рд╣рдо рд╢реБрд░реВ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдорд┐рд▓реЗрдВрдЧреЗред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╣реИ

рдпрджрд┐ рдПрдХ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдордиреЗ рдпрд╣ рднреА рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЗрдВрдЯреНрд░рд┐рдВрд╕рд┐рдХреНрд╕ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдЬрд╛рдВрдЪреЛрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдореВрд╣ рд╣реИред рдФрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЧреИрд░-рдЕрд╢рдХреНрдд рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡реИрд╕реЗ рднреА рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдХреНрдпреЛрдВ? рдлрд┐рд░, рдХрд┐ рд╣рдо рдЗрдВрдЯрд░реЛрдк рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдБ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдпрд╣ рдХрд╣реАрдВ рд╕реЗ рдЖрдПрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдЧрд╛, рдФрд░ рдлрд┐рд░ 10-20 рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рдмрд╛рдж, рдЖрдк рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдпрд╣ рдирд┐рдХрд▓рд╛ред рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЖрдк рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ рдерд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдЕрд╢рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рднреА рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рд╣реЛрдЧреАред рдФрд░ рдЕрдЧрд░ рдпрд╣ рдЕрд╢рдХреНрдд рд╣реИ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реЛрдЧрд╛ред

рдпрд╣ рдЪреЗрдХ рднреА рдХреБрдЫ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдФрд░ рдЕрдЧрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

рдкреБрд░рд╛рддрди


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

  var a = 5 var b = 6 var bOption : Int? = 6 

рддреАрди рдирдВрдмрд░ рд╣реИрдВ, рдкрд╣рд▓реЗ рджреЛ рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рдШрдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рддреАрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

  private int a = 5; private int b = 6; @Nullable private Integer bOption = Integer.valueOf(6); 

рдпрджрд┐ рдЖрдк рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдЬрд╛рд╡рд╛ рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рджреЛ рдирдВрдмрд░ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╡реЗ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрджрд┐рдо рдореЗрдВ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддреАрд╕рд░реЗ рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред

autoboxing


рдЬрдм рдЖрдк рдЖрджрд┐рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЖрджрд┐рдо рдФрд░ рдЧреИрд░-рдЖрджрд┐рдо рдХреЗ рд╕рд╛рде рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЖрджрд┐рдо рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдФрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдЕрд╢рдХреНрдд рдФрд░ рдЕрд╢рдХреНрдд рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдереЛрдбрд╝рд╛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдРрд╕реЗ рдХрдИ рдСрдкрд░реЗрд╢рди рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╣реБрдд рдХреБрдЫ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред

  val a: String? = null var b = a?.isBlank() == true 

рджреЗрдЦреЗрдВ рдХрд┐ рдмреЙрдХреНрд╕рд┐рдВрдЧ / рдЕрдирдмреЙрдХреНрд╕рд┐рдВрдЧ рдпрд╣рд╛рдВ рдХрд╣рд╛рдВ рд╣реЛрдЧрд╛? рдореИрдВрдиреЗ рднреА рддрдм рддрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ред

 if (a != null && a.isBlank()) true else false 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдЗрд╕ рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛: рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдЭреВрдареЗ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ:

 String a = (String)null; boolean b = Intrinsics.areEqual(a != null ? Boolean.valueOf(StringsKt.isBlank((CharSequence)a)) : null, Boolean.valueOf(true)); 

рдЪрд▓реЛ рдЕрдВрджрд░ рджреЗрдЦреЛред рдЪрд░ рдХреЛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ CharSequence рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдбрд╛рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЬрд┐рд╕реЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЦрд░реНрдЪ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдФрд░ рдЪреЗрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - StringsKt.isBlank - рдпрд╣ рдХреИрд╕реЗ CharSequence рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХрд╛рд╕реНрдЯ рдФрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдкрд╣рд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕реЗ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдмреЙрдХреНрд╕рд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдмреВрд▓рд┐рдпрди.рд╡реЗрд▓реНрдпреВрдСрдл рдореЗрдВ рд▓рдкреЗрдЯрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рдЪреНрдЪрд╛ рдЖрджрд┐рдо рднреА рдПрдХ рд╡рд╕реНрддреБ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╕рддреНрдпрд╛рдкрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЛрддрд╛ рд╣реИ рдФрд░ Intrinsics.areEqual рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЫреЛрд░реЛрдВ


рдЕрдЧрд▓реА рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддред

рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдирдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╕реВрдЪреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЛ рддреБрд░рдВрдд рд▓рд┐рдЦреЗрдВред , work, it - .

 list.forEach { work(it * 2) } 

. , . , Google, , ArrayList for 3 , . .

, ArrayList, тАФ foreach.

 inline fun <reified T> List<T>.foreach(crossinline action: (T) -> Unit): Unit { val size = size var i = 0 while (i < size) { action(get(i)) i++ } } list.foreach { } 

API, - . , Kotlin: extension , ┬л┬╗, reified, .. , , , crossinline. , , . 3 , Android Google.

RANGES


Ranges.

 inline fun <reified T> List<T>.foreach(crossinline action: (T) -> Unit): Unit { val size = size for(i in 0..size) { work(i * 2) } } 

: Unit -. тИТ1, until , , . , , ranges. рдпрд╛рдиреА , . step. .

INTRINSICS


- Intrinsics, :

 class Test { fun concat(first: String, second: String) = "$first $second" } 

Intrinsics тАФ second, first.

 public final class Test { @NotNull public final String concat(@NotNull String first, @NotNull String second) { Intrinsics.checkParameterIsNotNull(first, "first"); Intrinsics.checkParameterIsNotNull(second, "second"); return first + " " + second; } } 

, gradle. , - 4 , . Kotlin UI, , nullable, Kotlin :

kotlinc -Xno-call-assertions -Xno-param-assertions Test.kt

Intrinsics, , .

, , . тАФ Xno-param-assertions тАФ Intrinsics, .

, , , , , . , , , .

REDEX


, , , Proguard. , 99% , , . Android 8.0 , . , .

, Proguard, Facebook, Redex . -, , . , Jvm Fields , .

, Redex . , , , Proguard, , . Redex 7% APK. , .

BENCHMARKS


. , , . , . , dumpsys gfxinfo , . github github.com/smred .

, Huawei.


. тАФ , . , , 0,04 . , , тАФ , .


Kotlin, . , , . - , Kotlin , Java. , , , , . .


, , , , Kotlin Java. , - , , , , , .


, : - Kotlin , .. . , . - - тАФ 2 , Galaxy S6, .


Google Pixel. , 0,1 .



, , ,

  • UI custom view.
  • onmeasure-onlayout-ondraw. autoboxing, not null ..
  • Kotlin, Java , .
  • тАФ .

, , . , , , , Kotlin, . , Kotlin .

, .

brand new AppsConf , Android . , . , 8 9 .

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


All Articles