ุฃุฏุงุก Kotlin ุนู„ู‰ Android

ู„ู†ุชุญุฏุซ ุงู„ูŠูˆู… ุนู† ุฃุฏุงุก Kotlin ุนู„ู‰ Android ููŠ ุงู„ุฅู†ุชุงุฌ. ู„ู†ู„ู‚ ู†ุธุฑุฉ ุชุญุช ุบุทุงุก ุงู„ู…ุญุฑูƒ ูˆู†ู‚ูˆู… ุจุชุญุณูŠู†ุงุช ุตุนุจุฉ ูˆู†ู‚ุงุฑู† ูƒูˆุฏ ุงู„ุจุงูŠุช. ุฃุฎูŠุฑู‹ุง ุŒ ุณู†ุชู†ุงูˆู„ ุจุฌุฏูŠุฉ ุงู„ู…ู‚ุงุฑู†ุฉ ูˆู†ู‚ูŠุณ ุงู„ู…ุนุงูŠูŠุฑ.

ุชุณุชู†ุฏ ู‡ุฐู‡ ุงู„ู…ู‚ุงู„ุฉ ุฅู„ู‰ ุชู‚ุฑูŠุฑ ุฃู„ูƒุณู†ุฏุฑ ุณู…ูŠุฑู†ูˆู ููŠ AppsConf 2017 ูˆุณูŠุณุงุนุฏ ุนู„ู‰ ู…ุนุฑูุฉ ู…ุง ุฅุฐุง ูƒุงู† ู…ู† ุงู„ู…ู…ูƒู† ูƒุชุงุจุฉ ุงู„ุชุนู„ูŠู…ุงุช ุงู„ุจุฑู…ุฌูŠุฉ ููŠ Kotlin ุŒ ูˆุงู„ุชูŠ ู„ู† ุชูƒูˆู† ุฃู‚ู„ ุดุฃู†ุงู‹ ู…ู† Java ููŠ ุงู„ุณุฑุนุฉ.


ุญูˆู„ ุงู„ู…ุชุญุฏุซ: ุฃู„ูƒุณู†ุฏุฑ ุณู…ูŠุฑู†ูˆู CTO ููŠ PapaJobs ุŒ ูŠุฏูŠุฑ ู…ุฏูˆู†ุฉ ุงู„ููŠุฏูŠูˆ Android in Faces ุŒ ูˆู‡ูˆ ุฃูŠุถู‹ุง ุฃุญุฏ ู…ู†ุธู…ูŠ ู…ุฌุชู…ุน Mosdroid.

ู„ู†ุจุฏุฃ ุจุชูˆู‚ุนุงุชูƒ.

ู‡ู„ ุชุนุชู‚ุฏ ุฃู† Kotlin ููŠ ูˆู‚ุช ุงู„ุชุดุบูŠู„ ุฃุจุทุฃ ู…ู† JavaุŸ ุฃูˆ ุฃุณุฑุนุŸ ุฃูˆ ุฑุจู…ุง ู„ุง ูŠูˆุฌุฏ ูุฑู‚ ูƒุจูŠุฑุŸ ุจุนุฏ ูƒู„ ุดูŠุก ุŒ ูŠุนู…ู„ ูƒู„ุงู‡ู…ุง ุนู„ู‰ ุงู„ุฑู…ุฒ ุงู„ุซุงู†ูˆูŠ ุงู„ุฐูŠ ุชูˆูุฑู‡ ู„ู†ุง ุงู„ุขู„ุฉ ุงู„ุงูุชุฑุงุถูŠุฉ.

ุฏุนู†ุง ู†ุญุตู„ ุนู„ู‰ ุญู‚. ุชู‚ู„ูŠุฏูŠุง ุŒ ุนู†ุฏู…ุง ูŠุทุฑุญ ุณุคุงู„ ู…ู‚ุงุฑู†ุฉ ุงู„ุฃุฏุงุก ุŒ ูŠุฑูŠุฏ ุงู„ุฌู…ูŠุน ุฑุคูŠุฉ ู…ุนุงูŠูŠุฑ ูˆุฃุฑู‚ุงู… ู…ุญุฏุฏุฉ. ู„ุณูˆุก ุงู„ุญุธ ุŒ ุจุงู„ู†ุณุจุฉ ุฅู„ู‰ Android ุŒ ู„ุง ูŠูˆุฌุฏ JMH ( Java Microbenchmark Harness ) ุŒ ู„ุฐู„ูƒ ู„ุง ูŠู…ูƒู†ู†ุง ูู‚ุท ู‚ูŠุงุณ ู…ุฏู‰ ุฑูˆุนุฉ ู…ุง ูŠู…ูƒู† ุงู„ู‚ูŠุงู… ุจู‡ ููŠ Java. ุฅุฐู† ู…ุง ุงู„ุฐูŠ ูŠู…ูƒู†ู†ุง ูุนู„ู‡ ู„ุฅุฌุฑุงุก ุงู„ู‚ูŠุงุณ ุŒ ูƒู…ุง ู‡ูˆ ู…ูˆุถุญ ุฃุฏู†ุงู‡ุŸ

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

ุฅุฐุง ุญุงูˆู„ุช ู‚ูŠุงุณ ุงู„ูƒูˆุฏ ุงู„ุฎุงุต ุจูƒ ุจู‡ุฐู‡ ุงู„ุทุฑูŠู‚ุฉ ุŒ ูุณูŠูƒูˆู† ุญุฒู†ู‹ุง ู…ู† ู…ุทูˆุฑูŠ JMH ูˆูŠุจูƒูŠ ูˆูŠุฃุชูŠ ุฅู„ูŠูƒ ููŠ ุงู„ู…ู†ุงู… - ู„ุง ุชูุนู„ ุฐู„ูƒ ุฃุจุฏู‹ุง.

ุนู„ู‰ Android ุŒ ูŠู…ูƒู†ูƒ ูˆุถุน ู…ุนุงูŠูŠุฑ ุŒ ุนู„ู‰ ูˆุฌู‡ ุงู„ุฎุตูˆุต ุŒ ุนุฑุถุช Google ุฐู„ูƒ ููŠ ู…ุคุชู…ุฑ I / O ุงู„ุนุงู… ุงู„ู…ุงุถูŠ. ู‚ุงู„ูˆุง ุฅู†ู‡ู… ู‚ุงู…ูˆุง ุจุชุญุณูŠู† ุงู„ุฌู‡ุงุฒ ุงู„ุธุงู‡ุฑูŠ ุจุดูƒู„ ูƒุจูŠุฑ ุŒ ููŠ ู‡ุฐู‡ ุงู„ุญุงู„ุฉ ART ุŒ ูˆุฅุฐุง ูƒุงู† ุนู„ู‰ Android 4.1 ุชุฎุตูŠุต ูˆุงุญุฏ ู„ูƒุงุฆู† ุงุณุชุบุฑู‚ ุญูˆุงู„ูŠ 600-700 ู†ุงู†ูˆ ุซุงู†ูŠุฉ ุŒ ุซู… ููŠ ุงู„ุฅุตุฏุงุฑ ุงู„ุซุงู…ู† ุณูŠุณุชุบุฑู‚ ุญูˆุงู„ูŠ 60 ู†ุงู†ูˆ ุซุงู†ูŠุฉ. ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ูƒุงู†ูˆุง ู‚ุงุฏุฑูŠู† ุนู„ู‰ ู‚ูŠุงุณู‡ ุจู‡ุฐู‡ ุงู„ุฏู‚ุฉ ููŠ ุฌู‡ุงุฒ ุงูุชุฑุงุถูŠ. ู„ู…ุงุฐุง ู„ุง ู†ุณุชุทูŠุน ุงู„ู‚ูŠุงู… ุจุฐู„ูƒ ุฃูŠุถู‹ุง - ู„ูŠุณ ู„ุฏูŠู†ุง ู…ุซู„ ู‡ุฐู‡ ุงู„ุฃุฏูˆุงุช.

ุฅุฐุง ู†ุธุฑู†ุง ุฅู„ู‰ ุฌู…ูŠุน ุงู„ูˆุซุงุฆู‚ ุŒ ูุฅู† ุงู„ุดูŠุก ุงู„ูˆุญูŠุฏ ุงู„ุฐูŠ ูŠู…ูƒู†ู†ุง ุงู„ุนุซูˆุฑ ุนู„ูŠู‡ ู‡ูˆ ุงู„ุชูˆุตูŠุฉ ุฃุนู„ุงู‡ ุŒ ูˆูƒูŠููŠุฉ ู‚ูŠุงุณ ูˆุงุฌู‡ุฉ ุงู„ู…ุณุชุฎุฏู…:

ู…ู‚ุงู„ุจ adb shell gfxinfoูช package_nameูช

ููŠ ุงู„ูˆุงู‚ุน ุŒ ุฏุนูˆู†ุง ู†ูุนู„ ุฐู„ูƒ ุจู‡ุฐู‡ ุงู„ุทุฑูŠู‚ุฉ ูˆู†ุฑู‰ ููŠ ุงู„ู†ู‡ุงูŠุฉ ู…ุง ุณูŠุนุทูŠู‡. ู„ูƒู† ุฃูˆู„ุงู‹ ุŒ ุณู†ุญุฏุฏ ู…ุง ุณู†ู‚ูŠุณู‡ ูˆู…ุง ูŠู…ูƒู†ู†ุง ูุนู„ู‡ ุฃูŠุถู‹ุง.

ุงู„ุณุคุงู„ ุงู„ุชุงู„ูŠ. ุฃูŠู† ุชุนุชู‚ุฏ ุฃู† ุงู„ุฃุฏุงุก ู…ู‡ู… ุนู†ุฏ ุฅู†ุดุงุก ุชุทุจูŠู‚ ู…ู† ุงู„ุฏุฑุฌุฉ ุงู„ุฃูˆู„ู‰ุŸ

  1. ุจุงู„ุชุฃูƒูŠุฏ ููŠ ูƒู„ ู…ูƒุงู†.
  2. ู…ูˆุถูˆุน ูˆุงุฌู‡ุฉ ุงู„ู…ุณุชุฎุฏู….
  3. ุนุฑุถ ู…ุฎุตุต + ุฑุณูˆู… ู…ุชุญุฑูƒุฉ.




ุฃู†ุง ุฃุญุจ ุงู„ุฎูŠุงุฑ ุงู„ุฃูˆู„ ุฃูƒุซุฑ ู…ู† ุฃูŠ ุดูŠุก ุขุฎุฑ ุŒ ูˆู„ูƒู† ุนู„ู‰ ุงู„ุฃุฑุฌุญ ูŠุนุชู‚ุฏ ุฃู†ู‡ ู…ู† ุงู„ู…ุณุชุญูŠู„ ุฌุนู„ ุฌู…ูŠุน ุงู„ุชุนู„ูŠู…ุงุช ุงู„ุจุฑู…ุฌูŠุฉ ุชุนู…ู„ ุจุณุฑุนุฉ ูƒุจูŠุฑุฉ ุฌุฏู‹ุง ูˆู…ู† ุงู„ู…ู‡ู… ุฃู†ู‡ ู„ุง ูŠูˆุฌุฏ ุนู„ู‰ ุงู„ุฃู‚ู„ UiThread ุฃูˆ ุทุฑูŠู‚ุฉ ุนุฑุถ ู…ุฎุตุตุฉ. ูƒู…ุง ุฃูˆุงูู‚ ุนู„ู‰ ุฐู„ูƒ - ุฅู†ู‡ ู…ู‡ู… ู„ู„ุบุงูŠุฉ. ุญู‚ูŠู‚ุฉ ุฃู†ู‡ ุณูŠุชู… ุฅู„ุบุงุก ุชุณู„ุณู„ ุชุฏูู‚ JSON ุงู„ู…ู†ูุตู„ ู„ู…ุฏุฉ 10 ู…ู„ู„ูŠ ุซุงู†ูŠุฉ ุฃุทูˆู„ ู„ู† ูŠู„ุงุญุธู‡ ุฃุญุฏ.

ูŠู‚ูˆู„ ุนู„ู… ุงู„ู†ูุณ ุงู„ุฌุดุทุงู„ุช ุฃู†ู‡ ุนู†ุฏู…ุง ู†ุบู…ุถ ุŒ ู„ุญูˆุงู„ูŠ 150-300 ู…ู„ู„ูŠ ุซุงู†ูŠุฉ ุŒ ุชูƒูˆู† ุงู„ุนูŠู† ุงู„ุจุดุฑูŠุฉ ุฎุงุฑุฌ ุงู„ุชุฑูƒูŠุฒ ูˆู„ุง ุชุฑู‰ ู…ุง ูŠุญุฏุซ ุจุงู„ูุนู„ ู‡ู†ุงูƒ. ูˆู…ู† ุซู… ู‡ุฐู‡ ุงู„ุนุดุฑ ู…ู„ู„ูŠ ุซุงู†ูŠุฉ ู…ู† ุงู„ุทู‚ุณ ู„ุง ุชูุนู„ ุฐู„ูƒ. ูˆู„ูƒู† ุฅุฐุง ุนุฏู†ุง ุฅู„ู‰ ุนู„ู… ู†ูุณ ุงู„ุฌุดุทุงู„ุช ุŒ ูู…ู† ุงู„ู…ู‡ู… ู„ูŠุณ ู…ุง ุฃุฑุงู‡ ุญู‚ู‹ุง ูˆู…ุง ูŠุญุฏุซ ุญู‚ู‹ุง ุŒ ูˆู„ูƒู† ู…ุง ุฃูู‡ู…ู‡ ูƒู…ุณุชุฎุฏู… ู…ู‡ู….

ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุฅุฐุง ุฌุนู„ู†ุง ุงู„ู…ุณุชุฎุฏู… ูŠุนุชู‚ุฏ ุฃู† ู„ุฏูŠู‡ ูƒู„ ุดูŠุก ุจุณุฑุนุฉ ูƒุจูŠุฑุฉ ุฌุฏู‹ุง ุŒ ูˆู„ูƒู† ููŠ ุงู„ูˆุงู‚ุน ุณูŠุชู… ุถุฑุจู‡ ุจุดูƒู„ ุฌู…ูŠู„ ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ุจู…ุณุงุนุฏุฉ ุงู„ุฑุณูˆู… ุงู„ู…ุชุญุฑูƒุฉ ุงู„ุฌู…ูŠู„ุฉ ุŒ ูุณูŠูƒูˆู† ุฑุงุถูŠุงู‹ ุŒ ุญุชู‰ ู„ูˆ ู„ู… ูŠูƒู† ูƒุฐู„ูƒ ููŠ ุงู„ูˆุงู‚ุน.

ูƒุงู†ุช ุฒุฎุงุฑู ุนู„ู… ุงู„ู†ูุณ ุงู„ุฌุดุทุงู„ุช ููŠ iOS ุชุชุญุฑูƒ ู„ุจุนุถ ุงู„ูˆู‚ุช. ู„ุฐู„ูƒ ุŒ ุฅุฐุง ูƒู†ุช ุชุฃุฎุฐ ุชุทุจูŠู‚ูŠู† ููŠ ู†ูุณ ูˆู‚ุช ุงู„ู…ุนุงู„ุฌุฉ ุŒ ูˆู„ูƒู† ุนู„ู‰ ู…ู†ุตุงุช ู…ุฎุชู„ูุฉ ุŒ ูˆูˆุถุนุชู‡ู…ุง ุฌู†ุจู‹ุง ุฅู„ู‰ ุฌู†ุจ ุŒ ูุณูŠุจุฏูˆ ุฃู† ูƒู„ ุดูŠุก ุนู„ู‰ iOS ุฃุณุฑุน. ุชุนู…ู„ ุงู„ุฑุณูˆู… ุงู„ู…ุชุญุฑูƒุฉ ููŠ iOS ุจุดูƒู„ ุฃุณุฑุน ู‚ู„ูŠู„ุงู‹ ุŒ ุชุจุฏุฃ ุงู„ุฑุณูˆู… ุงู„ู…ุชุญุฑูƒุฉ ุงู„ุณุงุจู‚ุฉ ุนู†ุฏ ุจุฏุก ุงู„ุชุดุบูŠู„ ูˆุงู„ุนุฏูŠุฏ ู…ู† ุงู„ุฑุณูˆู… ุงู„ู…ุชุญุฑูƒุฉ ุงู„ุฃุฎุฑู‰ ุŒ ุจุญูŠุซ ุชูƒูˆู† ุฌู…ูŠู„ุฉ.

ู„ุฐุง ุงู„ู‚ุงุนุฏุฉ ุงู„ุฃูˆู„ู‰ ู‡ูŠ ุงู„ุชููƒูŠุฑ ููŠ ุงู„ู…ุณุชุฎุฏู….

ูˆู„ู„ู‚ุงุนุฏุฉ ุงู„ุซุงู†ูŠุฉ ุŒ ุชุญุชุงุฌ ุฅู„ู‰ ุงู„ุงู†ุบู…ุงุณ ููŠ ุงู„ู…ุชุดุฏุฏูŠู†.

ู†ู…ุท ูƒูˆุชู„ู†


ู„ุชู‚ูŠูŠู… ุฃุฏุงุก Kotlin ุจุตุฏู‚ ุŒ ุณู†ู‚ุงุฑู†ู‡ ุจู€ Java. ู„ุฐู„ูƒ ุŒ ุงุชุถุญ ุฃู†ู‡ ู…ู† ุงู„ู…ุณุชุญูŠู„ ู‚ูŠุงุณ ุจุนุถ ุงู„ุฃุดูŠุงุก ุงู„ู…ูˆุฌูˆุฏุฉ ูู‚ุท ููŠ Kotlin ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„:

  • ู…ุฌู…ูˆุนุฉ Api.
  • ู…ุนู„ู…ุงุช ุงู„ุทุฑูŠู‚ุฉ ุงู„ุงูุชุฑุงุถูŠุฉ.
  • ูุฆุงุช ุงู„ุจูŠุงู†ุงุช.
  • ุฃู†ูˆุงุน Reified.
  • Coroutines.

ูˆุงุฌู‡ุฉ ุจุฑู…ุฌุฉ ุชุทุจูŠู‚ุงุช ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุชูŠ ูŠูˆูุฑู‡ุง ู„ู†ุง Kotlin ุฑุงุฆุนุฉ ุฌุฏู‹ุง ูˆุณุฑูŠุนุฉ ุฌุฏู‹ุง. ููŠ Java ุŒ ู‡ุฐุง ุจุจุณุงุทุฉ ุบูŠุฑ ู…ูˆุฌูˆุฏ ุŒ ู‡ู†ุงูƒ ูู‚ุท ุชุทุจูŠู‚ุงุช ู…ุฎุชู„ูุฉ. ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ุณุชูƒูˆู† ู…ูƒุชุจุฉ Liteweight Stream API ุฃุจุทุฃ ู„ุฃู†ู‡ุง ุชูุนู„ ูƒู„ ุดูŠุก ู…ุซู„ Kotlin ุŒ ูˆู„ูƒู† ู…ุน ุชุฎุตูŠุต ูˆุงุญุฏ ุฃูˆ ุงุซู†ูŠู† ู…ู† ุงู„ุนู…ู„ูŠุงุช ุงู„ุฅุถุงููŠุฉ ุŒ ุญูŠุซ ูŠุชุญูˆู„ ูƒู„ ุดูŠุก ุฅู„ู‰ ูƒุงุฆู† ุฅุถุงููŠ.

ุฅุฐุง ุฃุฎุฐู†ุง Stream API ู…ู† Java 8 ุŒ ูุณุชุนู…ู„ ุจุดูƒู„ ุฃุจุทุฃ ู…ู† Kotlin Collection API ุŒ ูˆู„ูƒู† ุจุดุฑุท ูˆุงุญุฏ - ู„ุง ูŠูˆุฌุฏ ู…ุซู„ ู‡ุฐุง ุงู„ุดู„ู„ ููŠ Collection API ุŒ ุฅุฐุง ู‚ู…ู†ุง ุจุชุถู…ูŠู† ู…ูˆุงุฒู ุŒ ุนู„ู‰ ูƒู…ูŠุงุช ูƒุจูŠุฑุฉ ู…ู† ุจูŠุงู†ุงุช Stream API ุŒ ุณุชุชุฌุงูˆุฒ Java ูˆุงุฌู‡ุฉ ุจุฑู…ุฌุฉ ุชุทุจูŠู‚ุงุช ู…ุฌู…ูˆุนุฉ Kotlin. ู„ุฐู„ูƒ ุŒ ู„ุง ูŠู…ูƒู†ู†ุง ู…ู‚ุงุฑู†ุฉ ู…ุซู„ ู‡ุฐู‡ ุงู„ุฃุดูŠุงุก ุŒ ู„ุฃู†ู†ุง ู†ุฌุฑูŠ ุงู„ู…ู‚ุงุฑู†ุฉ ุจุฏู‚ุฉ ู…ู† ูˆุฌู‡ุฉ ู†ุธุฑ Android.

ุงู„ุดูŠุก ุงู„ุซุงู†ูŠ ุŒ ุงู„ุฐูŠ ุŒ ูƒู…ุง ูŠุจุฏูˆ ู„ูŠ ุŒ ู„ุง ูŠู…ูƒู† ู…ู‚ุงุฑู†ุชู‡ ุŒ ู‡ูˆ ู…ุนู„ู…ุงุช Method ุงู„ุงูุชุฑุงุถูŠุฉ - ูˆู‡ูŠ ู…ูŠุฒุฉ ุฑุงุฆุนุฉ ุฌุฏู‹ุง ุŒ ุจุงู„ู…ู†ุงุณุจุฉ ุŒ ููŠ Dart. ุนู†ุฏ ุงุณุชุฏุนุงุก ุจุนุถ ุงู„ุทุฑู‚ ุŒ ู‚ุฏ ูŠูƒูˆู† ู„ู‡ุง ุจุนุถ ุงู„ู…ุนู„ู…ุงุช ุงู„ุชูŠ ู‚ุฏ ุชุฃุฎุฐ ุจุนุถ ุงู„ู‚ูŠู…ุฉ ุŒ ูˆู„ูƒู† ู‚ุฏ ุชูƒูˆู† ูุงุฑุบุฉ. ูˆุจุงู„ุชุงู„ูŠ ุŒ ู„ุง ุชู‚ูˆู… ุจุนู…ู„ 10 ุทุฑู‚ ู…ุฎุชู„ูุฉ ุŒ ูˆู„ูƒู† ู‚ู… ุจุฃุณู„ูˆุจ ูˆุงุญุฏ ูˆุชู‚ูˆู„ ุฃู† ุฅุญุฏู‰ ุงู„ู…ุนู„ู…ุงุช ูŠู…ูƒู† ุฃู† ุชูƒูˆู† ูุงุฑุบุฉ ุŒ ูˆููŠ ุงู„ู…ุณุชู‚ุจู„ ุงุณุชุฎุฏุงู…ู‡ุง ุจุฏูˆู† ุฃูŠ ู…ุนู„ู…ุฉ. ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุณูŠู†ุธุฑ ุŒ ู‚ุฏ ุญุงู† ุงู„ู…ุนู„ู…ุฉ ุŒ ุฃูˆ ู„ู… ูŠุฃุช. ู…ู† ุงู„ู…ู„ุงุฆู… ุฌุฏู‹ุง ุฃู†ู‡ ูŠู…ูƒู†ูƒ ูƒุชุงุจุฉ ุฑู…ุฒ ุฃู‚ู„ ูƒุซูŠุฑู‹ุง ุŒ ูˆู„ูƒู† ุงู„ุฅุฒุนุงุฌ ู‡ูˆ ุฃู†ู‡ ูŠุฌุจ ุนู„ูŠูƒ ุงู„ุฏูุน ู…ู‚ุงุจู„ู‡. ู‡ุฐุง ู‡ูˆ ุงู„ุณูƒุฑ ุงู„ู†ุญูˆูŠ: ุฃู†ุช ุŒ ูƒู…ุทูˆุฑ ุŒ ุชุนุชู‚ุฏ ุฃู† ู‡ุฐู‡ ุทุฑูŠู‚ุฉ ูˆุงุญุฏุฉ ู„ูˆุงุฌู‡ุฉ ุจุฑู…ุฌุฉ ุงู„ุชุทุจูŠู‚ุงุช ุŒ ูˆู„ูƒู† ููŠ ุงู„ูˆุงู‚ุน ุŒ ุชุญุช ุบุทุงุก ุงู„ู…ุญุฑูƒ ุŒ ูŠุชู… ุฅู†ุดุงุก ูƒู„ ุดูƒู„ ู…ู† ุฃุดูƒุงู„ ุงู„ุทุฑูŠู‚ุฉ ู…ุน ุงู„ู…ุนู„ู…ุงุช ุงู„ู…ูู‚ูˆุฏุฉ ููŠ ุงู„ุฑู…ุฒ ุงู„ุซุงู†ูˆูŠ. ูˆุชู‚ูˆู… ูƒู„ ุทุฑูŠู‚ุฉ ู…ู† ู‡ุฐู‡ ุงู„ุทุฑู‚ ุฃูŠุถู‹ุง ุจุงู„ุชุญู‚ู‚ ุชุฏุฑูŠุฌูŠู‹ุง ู…ู† ูˆุตูˆู„ ู‡ุฐู‡ ุงู„ู…ุนู„ู…ุฉ. ุฅุฐุง ุฌุงุก ุŒ ุซู… ุญุณู†ู‹ุง ุŒ ุฅุฐุง ู„ู… ูŠุญุฏุซ ุฐู„ูƒ ุŒ ูุฅู†ู†ุง ู†ุตู†ุน ู‚ู†ุงุนู‹ุง ุตุบูŠุฑู‹ุง ุŒ ูˆุงุนุชู…ุงุฏู‹ุง ุนู„ู‰ ู‚ู†ุงุน ุงู„ุจุช ู‡ุฐุง ุŒ ูุฅู† ุงู„ุทุฑูŠู‚ุฉ ุงู„ุฃุตู„ูŠุฉ ุงู„ุชูŠ ูƒุชุจุชู‡ุง ุชุณู…ู‰ ูุนู„ุงู‹. ุนู…ู„ูŠุงุช Bitwise ุŒ ูƒู„ ุฐู„ูƒ ุฅุฐุง ูƒุงู† / ุขุฎุฑ ูŠูƒู„ู ุงู„ู‚ู„ูŠู„ ู…ู† ุงู„ู…ุงู„ ุŒ ูˆู„ูƒู† ุงู„ู‚ู„ูŠู„ ุฌุฏู‹ุง ุŒ ูˆู…ู† ุงู„ุทุจูŠุนูŠ ุฃู† ุชุฏูุน ู…ู‚ุงุจู„ ุงู„ุฑุงุญุฉ. ูŠุจุฏูˆ ู„ูŠ ุฃู† ู‡ุฐุง ุฃู…ุฑ ุทุจูŠุนูŠ ุชู…ุงู…ู‹ุง.

ุงู„ุนู†ุตุฑ ุงู„ุชุงู„ูŠ ุงู„ุฐูŠ ู„ุง ูŠู…ูƒู† ู…ู‚ุงุฑู†ุชู‡ ู‡ูˆ ูุฆุงุช ุงู„ุจูŠุงู†ุงุช .

ุงู„ูƒู„ ูŠุจูƒูŠ ููŠ ุฌุงูุง ุฃู† ู‡ู†ุงูƒ ู…ุนู„ู…ุงุช ู„ู‡ุง ูุฆุงุช ู†ู…ูˆุฐุฌูŠุฉ. ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุฃู†ุช ุชุฃุฎุฐ ุงู„ู…ุนู„ู…ุงุช ูˆุชูุนู„ ุงู„ู…ุฒูŠุฏ ู…ู† ุงู„ุฃุณุงู„ูŠุจ ูˆุงู„ุฑุณูˆู…ุงุช ูˆุงู„ู…ุณุงูƒู† ู„ุฌู…ูŠุน ู‡ุฐู‡ ุงู„ู…ุนู„ู…ุงุช. ุงุชุถุญ ุฃู†ู‡ ุจุงู„ู†ุณุจุฉ ู„ู„ูุตู„ ุงู„ุฐูŠ ูŠุญุชูˆูŠ ุนู„ู‰ ุนุดุฑุฉ ู…ุนู„ู…ุงุช ุŒ ู…ุง ุฒู„ุช ุจุญุงุฌุฉ ุฅู„ู‰ ู…ุณู†ุฏ ู‚ุฏู… ูƒุงู…ู„ ู…ู† ุงู„ุญุฑูˆู ูˆุงู„ู…ุณุชูˆุทู†ูŠู† ูˆู…ุฌู…ูˆุนุฉ ูƒุงู…ู„ุฉ ุฃุฎุฑู‰. ุนู„ุงูˆุฉ ุนู„ู‰ ุฐู„ูƒ ุŒ ุฅุฐุง ูƒู†ุช ู„ุง ุชุณุชุฎุฏู… ุงู„ู…ูˆู„ุฏุงุช ุŒ ูุนู„ูŠูƒ ุฃู† ุชูƒุชุจ ุจูŠุฏูŠูƒ ุŒ ูˆู‡ูˆ ุฃู…ุฑ ุฑู‡ูŠุจ ุจุดูƒู„ ุนุงู….

ูŠุชูŠุญ ู„ูƒ Kotlin ุงู„ุงุจุชุนุงุฏ ุนู† ูƒู„ ุดูŠุก. ุฃูˆู„ุงู‹ ุŒ ู†ุธุฑู‹ุง ู„ูˆุฌูˆุฏ ุนู‚ุงุฑุงุช ููŠ Kotlin ุŒ ู„ุง ุชุญุชุงุฌ ุฅู„ู‰ ูƒุชุงุจุฉ ุงู„ุฑุณุงุฆู„ ูˆุงู„ู…ุณุชูˆุทู†ูŠู†. ู„ูŠุณ ู„ุฏูŠู‡ุง ู…ุนู„ู…ุงุช ุงู„ูุฆุฉ ุŒ ุฌู…ูŠุน ุงู„ุฎุตุงุฆุต . ุนู„ู‰ ุฃูŠ ุญุงู„ ุŒ ู†ุนุชู‚ุฏ ุฐู„ูƒ. ุซุงู†ูŠู‹ุง ุŒ ุฅุฐุง ูƒุชุจุช ุฃู† ู‡ุฐู‡ ู‡ูŠ ูุฆุงุช ุงู„ุจูŠุงู†ุงุช ุŒ ูุณูŠุชู… ุฅู†ุดุงุก ู…ุฌู…ูˆุนุฉ ูƒุงู…ู„ุฉ ู…ู† ูƒู„ ุดูŠุก ุขุฎุฑ. ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ูŠุณุงูˆูŠ () ุŒ toStrung () / hasCode () ุŒ ุฅู„ุฎ.

ุจุงู„ุทุจุน ุŒ ู‡ุฐุง ู„ู‡ ุฃูŠุถู‹ุง ุนูŠูˆุจ. ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ู„ู… ุฃูƒู† ุจุญุงุฌุฉ ุฅู„ู‰ ู…ู‚ุงุฑู†ุฉ ุฌู…ูŠุน 20 ู…ุนู„ู…ุฉ ู„ูุฆุงุช ุงู„ุจูŠุงู†ุงุช ุงู„ุฎุงุตุฉ ุจูŠ ููŠ ู†ูุณ ุงู„ูˆู‚ุช ููŠ ู…ุชุณุงูˆูŠุฉ () ุŒ ูƒู†ุช ุจุญุงุฌุฉ ูู‚ุท ู„ู„ู…ู‚ุงุฑู†ุฉ 3. ู„ู… ูŠุนุฌุจ ุดุฎุต ู…ุง ูƒู„ ู‡ุฐุง ุจุณุจุจ ูู‚ุฏ ุงู„ุฃุฏุงุก ุนู„ู‰ ู‡ุฐุง ุŒ ุจุงู„ุฅุถุงูุฉ ุฅู„ู‰ ุฐู„ูƒ ุŒ ูŠุชู… ุฅู†ุดุงุก ุงู„ูƒุซูŠุฑ ูˆุธุงุฆู ุงู„ุฎุฏู…ุฉ ุŒ ูˆุงู„ุดูุฑุฉ ุงู„ู…ุชุฑุฌู…ุฉ ุถุฎู…ุฉ ู„ู„ุบุงูŠุฉ. ุจู…ุนู†ู‰ ุŒ ุฅุฐุง ูƒุชุจุช ูƒู„ ุดูŠุก ูŠุฏูˆูŠู‹ุง ุŒ ุณูŠูƒูˆู† ู‡ู†ุงูƒ ุฑู…ุฒ ุฃู‚ู„ ู…ู…ุง ู„ูˆ ูƒู†ุช ุชุณุชุฎุฏู… ูุฆุงุช ุงู„ุจูŠุงู†ุงุช.

ู„ุง ุฃุณุชุฎุฏู… ูุฆุงุช ุงู„ุจูŠุงู†ุงุช ู„ุณุจุจ ุขุฎุฑ. ููŠ ุงู„ุณุงุจู‚ ุŒ ูƒุงู†ุช ู‡ู†ุงูƒ ู‚ูŠูˆุฏ ุนู„ู‰ ุชูˆุณูŠุน ู‡ุฐู‡ ุงู„ูุฆุงุช ูˆุดูŠุก ุขุฎุฑ. ุงู„ุขู† ุงู„ุฌู…ูŠุน ุฃูุถู„ ู…ุน ู‡ุฐุง ุŒ ู„ูƒู† ู‡ุฐู‡ ุงู„ุนุงุฏุฉ ุจุงู‚ูŠุฉ.

ู…ุง ู‡ูˆ ุฑุงุฆุน ุฌุฏู‹ุง ููŠ Kotlin ุŒ ูˆู…ุงุฐุง ุณูŠูƒูˆู† ุฏุงุฆู…ู‹ุง ุฃุณุฑุน ู…ู† Java ููŠุŸ ู‡ุฐุง ู‡ูˆ ู†ูˆุน Reified ุŒ ูˆุงู„ุฐูŠ ุŒ ุจุงู„ู…ู†ุงุณุจุฉ ุŒ ู…ูˆุฌูˆุฏ ุฃูŠุถู‹ุง ููŠ Dart.

ุฃู†ุช ุชุนู„ู… ุฃู†ู‡ ุนู†ุฏ ุงุณุชุฎุฏุงู… ุงู„ุฃุฏูˆูŠุฉ ุงู„ุฌู†ูŠุณุฉ ุŒ ูŠุชู… ู…ุญูˆ ู†ูˆุน ุงู„ู…ุญูˆ ููŠ ู…ุฑุญู„ุฉ ุงู„ุชุฌู…ูŠุน ูˆููŠ ูˆู‚ุช ุงู„ุชุดุบูŠู„ ู„ู… ุชุนุฏ ุชุนุฑู ู…ุง ู‡ูˆ ูƒุงุฆู† ู‡ุฐุง ุงู„ุนุงู… ุงู„ู…ุณุชุฎุฏู… ุจุงู„ูุนู„.

ู…ุน ุฃู†ูˆุงุน Reified ุŒ ู„ุง ุชุญุชุงุฌ ุฅู„ู‰ ุงุณุชุฎุฏุงู… ุงู„ุงู†ุนูƒุงุณ ููŠ ุงู„ุนุฏูŠุฏ ู…ู† ุงู„ุฃู…ุงูƒู† ุนู†ุฏู…ุง ุชุญุชุงุฌ ุฅู„ูŠู‡ ููŠ Java ุŒ ู„ุฃู†ู‡ ู…ู† ุฎู„ุงู„ ุงู„ุฃุณุงู„ูŠุจ ุงู„ู…ุถู…ู†ุฉ ุŒ ู…ุน Reified ุŒ ุชุนุฑู ุนู† ุงู„ู†ูˆุน ุŒ ูˆุจุงู„ุชุงู„ูŠ ูŠุชุจูŠู† ุฃู†ูƒ ู„ุง ุชุณุชุฎุฏู… ุงู„ุงู†ุนูƒุงุณ ูˆูŠุนู…ู„ ุงู„ุฑู…ุฒ ุงู„ุฎุงุต ุจูƒ ุจุดูƒู„ ุฃุณุฑุน. ุงู„ุณุญุฑ.

ูˆู‡ู†ุงูƒ Coroutines . ุฅู†ู‡ู… ุฑุงุฆุนูˆู† ู„ู„ุบุงูŠุฉ ุŒ ูˆุฃู†ุง ุฃุญุจู‡ู… ูƒุซูŠุฑู‹ุง ุŒ ูˆู„ูƒู† ููŠ ูˆู‚ุช ุงู„ุฃุฏุงุก ุชู… ุชุถู…ูŠู†ู‡ู… ูู‚ุท ููŠ ุฅุตุฏุงุฑ ุฃู„ูุง ุŒ ู„ุฐู„ูƒ ู„ู… ูŠูƒู† ู…ู† ุงู„ู…ู…ูƒู† ุฅุฌุฑุงุก ู…ู‚ุงุฑู†ุงุช ุตุญูŠุญุฉ ู…ุนู‡ู….

ุงู„ุญู‚ูˆู„


ู„ุฐู„ูƒ ุฏุนูˆู†ุง ู†ู…ุถูŠ ู‚ุฏู…ู‹ุง ุŒ ู†ู†ุชู‚ู„ ุฅู„ู‰ ู…ุง ูŠู…ูƒู†ู†ุง ู…ู‚ุงุฑู†ุชู‡ ุจู€ Java ูˆู…ุง ูŠู…ูƒู†ู†ุง ุงู„ุชุฃุซูŠุฑ ุนู„ูŠู‡ ุจุดูƒู„ ุนุงู….

 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 ู„ูุฆุชู†ุง ุงู„ุฎุงุตุฉ ูˆ ู‚ูŠู… ุงู„ุญู‚ู„ ุฃ ูˆุงู„ุญู‚ู„ ุจ ู„ู„ูุฆุฉ ุงู„ุฎุงุฑุฌูŠุฉ ุŒ ูˆุงู„ุชูŠ ุชุชู… ูƒุชุงุจุชู‡ุง ููŠ ุงู„ุญู‚ู„ ุงู„ุซุงุจุช.

ุงู„ุณุคุงู„ ู‡ูˆ ู…ุง ุงู„ุฐูŠ ุณูŠุชู… ุงุณุชุฏุนุงุคู‡ ููŠ ุงู„ูˆุงู‚ุน d = a + b. ู†ุนู„ู… ุฌู…ูŠุนู‹ุง ุฃู† ู‡ุฐู‡ ุงู„ุฎุงุตูŠุฉ ู…ุฑุฉ ูˆุงุญุฏุฉ ุŒ ุณูŠุชู… ุงุณุชุฏุนุงุก getter ู„ู‡ุฐู‡ ุงู„ูุฆุฉ ู„ู‡ุฐู‡ ุงู„ู…ุนู„ู…ุฉ.

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

ูˆู„ูƒู† ุฅุฐุง ู†ุธุฑู†ุง ุฅู„ู‰ ุงู„ุฑู…ุฒ ุงู„ุซุงู†ูˆูŠ ุŒ ูุณูˆู ู†ุฑู‰ ุฃู†ู‡ ูŠุชู… ุงู„ูˆุตูˆู„ ุฅู„ู‰ getfield ุจุงู„ูุนู„. ุฃูŠ ุฃู† ู‡ุฐุง ููŠ ุงู„ุฑู…ุฒ ุงู„ุซุงู†ูˆูŠ ู„ูŠุณ ุงุณุชุฏุนุงุก ู„ูˆุธูŠูุฉ InvokeVirtual ุŒ ุจู„ ู‡ูˆ ูˆุตูˆู„ ู…ุจุงุดุฑ ุฅู„ู‰ ุงู„ุญู‚ู„. ู„ุง ูŠูˆุฌุฏ ุดูŠุก ูˆุนุฏู†ุง ุจู‡ ููŠ ุงู„ุจุฏุงูŠุฉ ุŒ ุฃู† ู„ุฏูŠู†ุง ูƒู„ ุงู„ุฎุตุงุฆุต ุŒ ูˆู„ูŠุณ ุงู„ุญู‚ูˆู„. ุงุชุถุญ ุฃู† Kotlin ูŠุฎุฏุนู†ุง ุŒ ู‡ู†ุงูƒ ุฌุงุฐุจูŠุฉ ู…ุจุงุดุฑุฉ.

ู…ุงุฐุง ูŠุญุฏุซ ุฅุฐุง ุฑุฃูŠู†ุง ู…ุง ู‡ูˆ ุงู„ุฑู…ุฒ ุงู„ุซุงู†ูˆูŠ ุงู„ุฐูŠ ุชู… ุฅู†ุดุงุคู‡ ู„ุฎุท ุขุฎุฑ: val e = ca + cbุŸ

  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. GetField ุฃุณุฑุน ุจูƒุซูŠุฑ ู…ู† InvokeVirtual ุŒ ูˆุชุฒุนู… ุงู„ู…ูˆุงุตูุงุช ุงู„ูˆุงุฑุฏุฉ ู…ู† Android ุฃู† ุงู„ูˆุตูˆู„ ุฅู„ู‰ ุญู‚ู„ ู…ุจุงุดุฑ ุฃุณุฑุน 3-7 ู…ุฑุงุช. ู„ุฐู„ูƒ ุŒ ูŠูู†ุตุญ ุฏุงุฆู…ู‹ุง ุจุงู„ุฑุฌูˆุน ุฅู„ู‰ ุงู„ุญู‚ู„ ุŒ ูˆู„ูŠุณ ู…ู† ุฎู„ุงู„ ุงู„ุฑุณุงุฆู„ ุฃูˆ ุงู„ู…ุณุชูˆุทู†ูŠู†. ุงู„ุขู† ุŒ ุฎุงุตุฉ ููŠ ุงู„ุฌู‡ุงุฒ ุงู„ุธุงู‡ุฑูŠ ART ุงู„ุซุงู…ู† ุŒ ุณูŠูƒูˆู† ู‡ู†ุงูƒ ุจุงู„ูุนู„ ุฃุฑู‚ุงู… ู…ุฎุชู„ูุฉ ุŒ ูˆู„ูƒู† ุฅุฐุง ูƒู†ุช ู„ุง ุชุฒุงู„ ุชุฏุนู… 4.1 ุŒ ูุณูŠูƒูˆู† ู‡ุฐุง ุตุญูŠุญู‹ุง.

ู„ุฐู„ูƒ ุŒ ุงุชุถุญ ุฃู†ู‡ ู„ุง ูŠุฒุงู„ ู…ู† ุงู„ู…ููŠุฏ ุจุงู„ู†ุณุจุฉ ู„ู†ุง ุงู„ุญุตูˆู„ ุนู„ู‰ GetField ุŒ ูˆู„ูŠุณ InvokeVirtual.

ุงู„ุขู† ุŒ ูŠู…ูƒู†ูƒ ุชุญู‚ูŠู‚ GetField ุฅุฐุง ูƒู†ุช ุชู‚ูˆู… ุจุงู„ูˆุตูˆู„ ุฅู„ู‰ ุฎุงุตูŠุฉ ู…ู† ูุฆุชูƒ ุงู„ุฎุงุตุฉ ุŒ ุฃูˆ ุฅุฐุง ูƒุงู†ุช ู‡ุฐู‡ ู…ู„ูƒูŠุฉ ุนุงู…ุฉ ุŒ ูŠุฌุจ ุนู„ูŠูƒ ุชุนูŠูŠู†JvmField. ุจุนุฏ ุฐู„ูƒ ุŒ ุณูŠูƒูˆู† ู†ูุณ ุงู„ุดูŠุก ุจุงู„ุถุจุท ููŠ ุงู„ุฑู…ุฒ ุงู„ุจุงูŠุช ู‡ูˆ ุงุณุชุฏุนุงุก GetField ุŒ ูˆู‡ูˆ ุฃุณุฑุน 3-7 ู…ุฑุงุช.

ู…ู† ุงู„ูˆุงุถุญ ุฃู†ู†ุง ู‡ู†ุง ู†ุชุญุฏุซ ุจุงู„ุซูˆุงู†ูŠ ุงู„ู†ุงู†ูˆูŠุฉ ุŒ ูˆู…ุน ุนุฑุด ูˆุงุญุฏ ุŒ ูู‡ูŠ ุตุบูŠุฑุฉ ุฌุฏู‹ุง. ูˆู„ูƒู† ุŒ ู…ู† ู†ุงุญูŠุฉ ุฃุฎุฑู‰ ุŒ ุฅุฐุง ู‚ู…ุช ุจุฐู„ูƒ ููŠ ู…ุคุดุฑ ุชุฑุงุจุท ูˆุงุฌู‡ุฉ ุงู„ู…ุณุชุฎุฏู… ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ููŠ ุทุฑูŠู‚ุฉ ุงู„ุณุญุจ ูŠู…ูƒู†ูƒ ุงู„ูˆุตูˆู„ ุฅู„ู‰ ู†ูˆุน ู…ุง ู…ู† ุงู„ุนุฑุถ ุŒ ูุฅู† ุฐู„ูƒ ุณูŠุคุซุฑ ุนู„ู‰ ุนุฑุถ ูƒู„ ุฅุทุงุฑ ุŒ ูˆูŠู…ูƒู†ูƒ ุงู„ู‚ูŠุงู… ุจุฐู„ูƒ ุจุดูƒู„ ุฃุณุฑุน ู‚ู„ูŠู„ุงู‹.

ุฅุฐุง ู‚ู…ู†ุง ุจุฌู…ุน ูƒู„ ุงู„ุชุญุณูŠู†ุงุช ุŒ ูุจุฅุฌู…ุงู„ู‡ุง ูŠู…ูƒู† ุฃู† ุชุนุทูŠ ุดูŠุฆู‹ุง.

ุซุงุจุช!ุŸ


ู…ุงุฐุง ุนู† ุงู„ุงุณุชุงุชูŠูƒุงุŸ ู†ุนู„ู… ุฌู…ูŠุนู‹ุง ุฃู† ุซุงุจุช Kotlin ู‡ูˆ ูƒุงุฆู† ู…ุตุงุญุจ. ููŠ ุงู„ุณุงุจู‚ ุŒ ุฑุจู…ุง ุฃุถูุช ู†ูˆุนู‹ุง ู…ู† ุงู„ุนู„ุงู…ุงุช ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ุซุงุจุช ุนุงู… ุŒ ุซุงุจุช ู†ู‡ุงุฆูŠ ุŒ ูˆู…ุง ุฅู„ู‰ ุฐู„ูƒ ุŒ ุฅุฐุง ู‚ู…ุช ุจุชุญูˆูŠู„ ู‡ุฐุง ุฅู„ู‰ ูƒูˆุฏ Kotlin ุŒ ูุณุชุญุตู„ ุนู„ู‰ ูƒุงุฆู† ู…ุตุงุญุจ ุŒ ูˆุงู„ุฐูŠ ุณูŠูƒุชุจ ุดูŠุฆู‹ุง ู…ุซู„ ู…ุง ูŠู„ูŠ:

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

ู‡ู„ ุชุนุชู‚ุฏ ุฃู† ู‡ุฐุง ุงู„ุฅุฏุฎุงู„ ู…ุทุงุจู‚ ู„ู„ุฅุนู„ุงู† ุงู„ู†ู‡ุงุฆูŠ ุงู„ู‚ูŠุงุณูŠ ุงู„ุซุงุจุช ููŠ JavaุŸ ู‡ู„ ู‡ูˆ ุซุงุจุช ุนู„ู‰ ุงู„ุฅุทู„ุงู‚ ุฃู… ู„ุงุŸ

ู†ุนู… ุŒ ููŠ ุงู„ูˆุงู‚ุน ุŒ ูŠุนู„ู† Kotlin ุฃู†ู‡ ู‡ู†ุง ููŠ Kotlin - ุซุงุจุช ุŒ ูŠู‚ูˆู„ ู‡ุฐุง ุงู„ูƒุงุฆู† ุฃู†ู‡ ุซุงุจุช. ููŠ ุงู„ูˆุงู‚ุน ุŒ ู‡ุฐุง ู„ูŠุณ ุซุงุจุชู‹ุง.

ุฅุฐุง ู†ุธุฑู†ุง ุฅู„ู‰ ุงู„ุฑู…ุฒ ุงู„ุฐูŠ ุชู… ุฅู†ุดุงุคู‡ ุŒ ูุณูˆู ู†ุฑู‰ ู…ุง ูŠู„ูŠ:

  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 ุนู„ูŠู‡ุง ุŒ ูˆุงู„ุดูŠุก ู†ูุณู‡ ุชู…ุงู…ู‹ุง ู„ูˆุธูŠูุฉ work2. ู„ุฐู„ูƒ ู†ุญุตู„ ุนู„ู‰ ุฃู†ู‡ุง ู„ูŠุณุช ุซุงุจุชุฉ.

ู‡ุฐุง ู…ู‡ู… ุŒ ู„ุฃู†ู‡ ููŠ JVMs ุงู„ุฃู‚ุฏู… ุŒ ูƒุงู† ุงู„ุงุณุชู‚ู„ุงู„ูŠ ุฃุณุฑุน ุจู†ุณุจุฉ 30 ูช ู…ู† Invokevirtual. ุงู„ุขู† ุŒ ุจุงู„ุทุจุน ุŒ ููŠ HotSpot ุŒ ุฃุตุจุญุช ุงู„ู…ุญุงูƒุงุฉ ุงู„ุงูุชุฑุงุถูŠุฉ ุงู„ู…ุญุณู†ุฉ ุฑุงุฆุนุฉ ุญู‚ู‹ุง ุŒ ูˆู‡ูŠ ุบูŠุฑ ู…ุฑุฆูŠุฉ ุชู‚ุฑูŠุจู‹ุง. ูˆู…ุน ุฐู„ูƒ ุŒ ุนู„ูŠูƒ ุฃู† ุชุถุน ุฐู„ูƒ ููŠ ุงู„ุงุนุชุจุงุฑ ุŒ ุฎุงุตุฉ ูˆุฃู† ู‡ู†ุงูƒ ุชุฎุตูŠุตู‹ุง ุฅุถุงููŠู‹ุง ูˆุงุญุฏู‹ุง ุŒ ูˆุงู„ู…ูˆู‚ุน ุงู„ุฅุถุงููŠ ุนู„ู‰ 4ST1 ู‡ูˆ 700 ู†ุงู†ูˆ ุซุงู†ูŠุฉ ุŒ ูƒุซูŠุฑู‹ุง.

ุฏุนู†ุง ู†ู„ู‚ูŠ ู†ุธุฑุฉ ุนู„ู‰ ูƒูˆุฏ Java ุงู„ุฐูŠ ูŠุธู‡ุฑ ุฅุฐุง ู‚ู…ุช ุจู†ุดุฑ ุงู„ุฑู…ุฒ ุงู„ุจุงูŠุช ุงู„ุนูƒุณูŠ:

 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 ุŒ ู„ู† ูŠุชู… ุฅู†ุดุงุก ุงู„ุญุฑูˆู ูˆุงู„ู…ุณุชูˆุทู†ูŠู†. ูˆู„ูƒู† ุจุงู„ู†ุณุจุฉ ู„ู„ูˆุธูŠูุฉ work2 ู„ู† ูŠุชุบูŠุฑ ุดูŠุก.

  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 

ูŠุชู… ุงู‚ุชุฑุงุญ ุงู„ุฎูŠุงุฑ ุงู„ุซุงู†ูŠ ุญูˆู„ ูƒูŠููŠุฉ ุฅู†ุดุงุก ุซุงุจุช ููŠ ูˆุซุงุฆู‚ Kotlin ุŒ ู„ุฐู„ูƒ ูŠู‚ุงู„ ุฃู†ู‡ ูŠู…ูƒู†ู†ุง ูู‚ุท ุฅู†ุดุงุก ูƒุงุฆู† ุŒ ูˆุณูŠูƒูˆู† ู‡ุฐุง ุฑู…ุฒ ุซุงุจุช.

 object A { fun test() = 53 } 

ููŠ ุงู„ูˆุงู‚ุน ุŒ ุงู„ุฃู…ุฑ ู„ูŠุณ ูƒุฐู„ูƒ.

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

ุงุชุถุญ ุฃู†ู†ุง ู†ุฌุฑูŠ ู…ูƒุงู„ู…ุฉ ู…ุซูŠู„ getstatic ู…ู† singletone ุŒ ูˆุงู„ุชูŠ ูŠุชู… ุฅู†ุดุงุคู‡ุง ุŒ ูˆู†ุฏุนูˆ ู†ูุณ ุงู„ุฃุณุงู„ูŠุจ ุงู„ุงูุชุฑุงุถูŠุฉ ุจุงู„ุถุจุท.

ุงู„ุทุฑูŠู‚ุฉ ุงู„ูˆุญูŠุฏุฉ ุงู„ุชูŠ ูŠู…ูƒู†ู†ุง ู…ู† ุฎู„ุงู„ู‡ุง ุชุญู‚ูŠู‚ Invokestatic ู‡ูŠ ูˆุธุงุฆู ุนุงู„ูŠุฉ ุงู„ุชุฑุชูŠุจ. ุนู†ุฏู…ุง ู†ูƒุชุจ ูู‚ุท ุจุนุถ ุงู„ูˆุธุงุฆู ุฎุงุฑุฌ ุงู„ูุตู„ ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ุณูŠุชู… ุงุณุชุฏุนุงุก ุงุฎุชุจุงุฑ test2 ุงู„ู…ู…ุชุน ุนู„ู‰ ุฃู†ู‡ ุซุงุจุช.

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

ุนู„ุงูˆุฉ ุนู„ู‰ ุฐู„ูƒ ุŒ ูุฅู† ุงู„ุดูŠุก ุงู„ุฃูƒุซุฑ ุฅุซุงุฑุฉ ู„ู„ุงู‡ุชู…ุงู… ู‡ูˆ ุฃู†ู‡ ุณูŠุชู… ุฅู†ุดุงุก ูุฆุฉ ุŒ ูƒุงุฆู† ุŒ ููŠ ู‡ุฐู‡ ุงู„ุญุงู„ุฉ testKt ุŒ ูุฅู†ู‡ ุณูŠูˆู„ุฏ ูƒุงุฆู†ู‹ุง ู„ู†ูุณู‡ ุŒ ูˆุณูˆู ูŠูˆู„ุฏ ูˆุธูŠูุฉ ูŠุถุนู‡ุง ููŠ ู‡ุฐุง ุงู„ูƒุงุฆู† ุŒ ูˆุงู„ุขู† ุณูŠุชู… ุชุณู…ูŠุชู‡ ุจุงุณู… Invokestatic.

ู„ู…ุงุฐุง ุชู… ุฐู„ูƒ ุบูŠุฑ ู…ูู‡ูˆู…. ูƒุซูŠุฑูˆู† ุบูŠุฑ ุฑุงุถูŠู† ุนู† ุฐู„ูƒ ุŒ ูˆู„ูƒู† ู‡ู†ุงูƒ ู…ู† ูŠุนุชุจุฑูˆู† ุฃู† ู…ุซู„ ู‡ุฐุง ุงู„ุชุทุจูŠู‚ ุฃู…ุฑ ุทุจูŠุนูŠ ุชู…ุงู…ู‹ุง. ู…ู†ุฐ ุงู„ุฌู‡ุงุฒ ุงู„ุธุงู‡ุฑูŠ ุŒ ู…ุฏููˆุน. ุงู„ูู† ูŠุชุญุณู† ุŒ ุงู„ุขู† ู„ูŠุณ ุญุฑุฌู‹ุง. ููŠ ุงู„ุฅุตุฏุงุฑ ุงู„ุซุงู…ู† ู…ู† Android ุŒ ุชู…ุงู…ู‹ุง ู…ุซู„ HotSpot ุŒ ุชู… ุชุญุณูŠู† ูƒู„ ุดูŠุก ุŒ ูˆู„ูƒู† ู„ุง ุชุฒุงู„ ู‡ุฐู‡ ุงู„ุฃุดูŠุงุก ุงู„ุตุบูŠุฑุฉ ุชุคุซุฑ ู‚ู„ูŠู„ุงู‹ ุนู„ู‰ ุงู„ุฃุฏุงุก ุงู„ุนุงู….

ุจุทู„ุงู†


 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; } 

ุณู†ุญุตู„ ุนู„ู‰ ุงู„ุฌูˆู‡ุฑุฉ ููŠ ุงู„ุจุฏุงูŠุฉ. ุฏุนู†ุง ู†ู‚ูˆู„ ุฃู† ุฃู‚ูˆู„ ู‡ุฐุง

ุฅุฐุง ูƒุงู† ุณูŠุชู… ุชูˆุณูŠุนู‡ ุฅู„ู‰ ุนุงู…ู„ ุซู„ุงุซูŠ. ูˆู„ูƒู† ุจุงู„ุฅุถุงูุฉ ุฅู„ู‰ ุฐู„ูƒ ุŒ ุนู„ู‰ ุงู„ุฑุบู… ู…ู† ุฃู†ู†ุง ุฃุตู„ุญู†ุง ุฃู† ุงู„ู…ุนู„ู…ุฉ ุงู„ุฃูˆู„ู‰ ู„ุง ูŠู…ูƒู† ุฃู† ุชูƒูˆู† ู‚ุงุจู„ุฉ ู„ู„ุฅู„ุบุงุก ุŒ ูุณูŠุชู… ุงู„ุชุญู‚ู‚ ู…ู†ู‡ุง ู…ู† ุฎู„ุงู„ Intrinsics.

Intrinsics ู‡ูŠ ูุฆุฉ ุฏุงุฎู„ูŠุฉ ููŠ Kotlin ุชุญุชูˆูŠ ุนู„ู‰ ู…ุฌู…ูˆุนุฉ ู…ุนูŠู†ุฉ ู…ู† ุงู„ู…ุนู„ู…ุงุช ูˆุงู„ุดูŠูƒุงุช. ูˆููŠ ูƒู„ ู…ุฑุฉ ุชุฌุนู„ ู…ุนู„ู…ุฉ ุงู„ุฃุณู„ูˆุจ ุบูŠุฑ ู‚ุงุจู„ุฉ ู„ู„ุฅู„ุบุงุก ุŒ ูุฅู†ู‡ุง ุชุชุญู‚ู‚ ู…ู† ุฐู„ูƒ ุนู„ู‰ ุฃูŠ ุญุงู„. ู„ู…ุงุฐุงุŸ ุจุนุฏ ุฐู„ูƒ ุŒ ู†ุนู…ู„ ููŠ Interop Java ุŒ ูˆู‚ุฏ ูŠุญุฏุซ ุฃู†ูƒ ุชุชูˆู‚ุน ุฃู†ู‡ ู„ู† ูŠูƒูˆู† ู„ุงุบูŠุงู‹ ู‡ู†ุง ุŒ ูˆู„ูƒู† ู…ุน Java ุณูŠุฃุชูŠ ู…ู† ู…ูƒุงู† ู…ุง.

ุฅุฐุง ู‚ู…ุช ุจุงู„ุชุญู‚ู‚ ู…ู† ุฐู„ูƒ ุŒ ูุณูˆู ูŠุฐู‡ุจ ุฃุจุนุฏ ู…ู† ุฐู„ูƒ ุนู„ู‰ ุทูˆู„ ุงู„ูƒูˆุฏ ุŒ ุซู… ุจุนุฏ 10-20 ู…ูƒุงู„ู…ุงุช ุงู„ุฃุณู„ูˆุจ ุŒ ุณุชูุนู„ ุดูŠุฆู‹ุง ู…ุน ู…ุนู„ู…ุฉ ุŒ ุนู„ู‰ ุงู„ุฑุบู… ู…ู† ุฃู†ู‡ุง ู‚ุฏ ู„ุง ุชูƒูˆู† ู‚ุงุจู„ุฉ ู„ู„ุฅู„ุบุงุก ุŒ ูˆู„ูƒู† ู„ุณุจุจ ู…ุง ุชุจูŠู† ุฃู†ู‡ุง. ูƒู„ ุดูŠุก ุณูŠุณู‚ุท ุนู„ูŠูƒ ุŒ ูˆู„ู† ุชูƒูˆู† ู‚ุงุฏุฑู‹ุง ุนู„ู‰ ูู‡ู… ู…ุง ุญุฏุซ ุจุงู„ูุนู„. ู„ุชุฌู†ุจ ู‡ุฐุง ุงู„ู…ูˆู‚ู ุŒ ููŠ ูƒู„ ู…ุฑุฉ ุชุฌุชุงุฒ ููŠู‡ุง ุงู„ู…ุนู„ู…ุฉ ุงู„ูุงุฑุบุฉ ุŒ ุณูŠุธู„ ุนู„ูŠูƒ ุงู„ุชุญู‚ู‚ ู…ู†ู‡ุง. ูˆุฅุฐุง ูƒุงู†ุช ู„ุงุบูŠุฉ ุŒ ูุณูŠูƒูˆู† ู‡ู†ุงูƒ ุงุณุชุซู†ุงุก.

ู‡ุฐุง ุงู„ูุญุต ูŠุณุชุญู‚ ุดูŠุฆู‹ุง ุฃูŠุถู‹ุง ุŒ ูˆุฅุฐุง ูƒุงู† ู‡ู†ุงูƒ ุงู„ูƒุซูŠุฑ ู…ู†ู‡ู… ุŒ ูู„ู† ูŠูƒูˆู† ุฌูŠุฏู‹ุง ุฌุฏู‹ุง.

ูˆู„ูƒู† ููŠ ุงู„ูˆุงู‚ุน ุŒ ุฅุฐุง ุชุญุฏุซู†ุง ุนู† HotSpot ุŒ ูุณุชุณุชุบุฑู‚ 10 ู…ูƒุงู„ู…ุงุช ู…ู† ู‡ุฐู‡ ุงู„ุฌูˆู‡ุฑ ุญูˆุงู„ูŠ ุฃุฑุจุนุฉ ู†ุงู†ูˆ ุซุงู†ูŠุฉ. ู‡ุฐุง ุตุบูŠุฑ ุฌุฏู‹ุง ุฌุฏู‹ุง ุŒ ูˆู„ุง ุฏุงุนูŠ ู„ู„ู‚ู„ู‚ ุจุดุฃู† ู‡ุฐุง ุŒ ูˆู„ูƒู† ู‡ุฐุง ุนุงู…ู„ ู…ุซูŠุฑ ู„ู„ุงู‡ุชู…ุงู….

ุงู„ุจุฏุงุฆู„


ูŠูˆุฌุฏ ููŠ ุฌุงูˆุง ุดูŠุก ู…ุซู„ ุงู„ุจุฏุงุฆูŠูŠู†. ููŠ Kotlin ุŒ ูƒู…ุง ู†ุนู„ู… ุฌู…ูŠุนู‹ุง ุŒ ู„ุง ุชูˆุฌุฏ ุจุฏุงุฆูŠุฉ ุŒ ู†ุนู…ู„ ุฏุงุฆู…ู‹ุง ู…ุน ุงู„ุฃุดูŠุงุก. ููŠ Java ุŒ ูŠุชู… ุงุณุชุฎุฏุงู…ู‡ุง ู„ุชูˆููŠุฑ ุฃุฏุงุก ุฃุนู„ู‰ ู„ู„ูƒุงุฆู†ุงุช ููŠ ุจุนุถ ุงู„ุนู…ู„ูŠุงุช ุงู„ุญุณุงุจูŠุฉ ุงู„ุตุบูŠุฑุฉ. ุฅู† ุฅุถุงูุฉ ุดูŠุฆูŠู† ุฃุบู„ู‰ ุจูƒุซูŠุฑ ู…ู† ุฅุถุงูุฉ ุจุฏุงุฆูŠูŠู†. ุชุฃู…ู„ ููŠ ู…ุซุงู„.

  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); 

ุฅุฐุง ู†ุธุฑุช ุฅู„ู‰ ุงู„ุฑู…ุฒ ุงู„ุซุงู†ูˆูŠ ูˆุฑุฃูŠุช ุฑู…ุฒ Java ุงู„ุฐูŠ ุชู… ุฅู†ุดุงุคู‡ ุŒ ูู„ู† ูŠูƒูˆู† ุงู„ุฑู‚ู…ุงู† ุงู„ุฃูˆู„ุงู† ุฎุงู„ูŠูŠู† ุŒ ูˆุจุงู„ุชุงู„ูŠ ูŠู…ูƒู† ุฃู† ูŠูƒูˆู†ุง ุจุฏุงุฆูŠูŠู†. ู„ูƒู† ุงู„ุจุฏุงุฆูŠ ู„ุง ูŠู…ูƒู† ุฃู† ูŠุญุชูˆูŠ ุนู„ู‰ Null ุŒ ูู‚ุท ูƒุงุฆู† ูŠู…ูƒู† ุฃู† ูŠูุนู„ ุฐู„ูƒ ุŒ ู„ุฐู„ูƒ ุณูŠุชู… ุฅู†ุดุงุก ูƒุงุฆู† ู„ู„ุฑู‚ู… ุงู„ุซุงู„ุซ.

AUTOBOXING


ุนู†ุฏู…ุง ุชุนู…ู„ ู…ุน ุจุฏุงุฆูŠูŠู† ูˆุชุฌุฑูŠ ุนู…ู„ูŠุฉ ุจุฏุงุฆูŠุฉ ูˆุบูŠุฑ ุจุฏุงุฆูŠุฉ ุŒ ุณุชุญุชุงุฌ ุฅู…ุง ุฅู„ู‰ ุชุฑุฌู…ุฉ ุฃุญุฏู‡ู… ุฅู„ู‰ ุจุฏุงุฆูŠ ุฃูˆ ุฅู„ู‰ ูƒุงุฆู†.

ูˆูŠุจุฏูˆ ุŒ ุฃู†ู‡ ู„ูŠุณ ู…ู† ุงู„ู…ุณุชุบุฑุจ ุฃู†ู‡ ุฅุฐุง ู‚ู…ุช ุจุฅุฌุฑุงุก ุนู…ู„ูŠุงุช ู„ุงุบูŠุฉ ูˆู„ุง ูŠู…ูƒู† ุฅุจุทุงู„ู‡ุง ููŠ Kotlin ุŒ ูุณุชูู‚ุฏ ุงู„ู‚ู„ูŠู„ ู…ู† ุงู„ุฃุฏุงุก. ุนู„ุงูˆุฉ ุนู„ู‰ ุฐู„ูƒ ุŒ ุฅุฐุง ูƒุงู† ู‡ู†ุงูƒ ุงู„ุนุฏูŠุฏ ู…ู† ู‡ุฐู‡ ุงู„ุนู…ู„ูŠุงุช ุŒ ูุณุชุฎุณุฑ ุงู„ูƒุซูŠุฑ.

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

ุชุฑู‰ ุฃูŠู† ุณุชูƒูˆู† ุงู„ู…ู„ุงูƒู…ุฉ / ุฃูˆู†ุจูˆูƒุณูŠู†ุบ ู‡ู†ุงุŸ ูƒู…ุง ุฃู†ู†ูŠ ู„ู… ุฃุฑ ุญุชู‰ ู†ุธุฑุช ุฅู„ู‰ ุงู„ุฑู…ุฒ ุงู„ูุฑุนูŠ.

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

ููŠ ุงู„ูˆุงู‚ุน ุŒ ุชูˆู‚ุนุช ุฃู†ู‡ ุณูŠูƒูˆู† ู‡ู†ุงูƒ ุดูŠุก ู…ุซู„ ู‡ุฐู‡ ุงู„ู…ู‚ุงุฑู†ุฉ: ุฅุฐุง ู„ู… ุชูƒู† ุงู„ุณู„ุณู„ุฉ ูุงุฑุบุฉ ูˆุฅุฐุง ูƒุงู†ุช ูุงุฑุบุฉ ุŒ ูู‚ู… ุจุชุนูŠูŠู†ู‡ุง ุนู„ู‰ true ุŒ ูˆุฅู„ุง ุชู… ุชุนูŠูŠู†ู‡ุง ุนู„ู‰ false. ูŠุจุฏูˆ ุฃู† ูƒู„ ุดูŠุก ุจุณูŠุท ุŒ ูˆู„ูƒู† ููŠ ุงู„ูˆุงู‚ุน ูŠุชู… ุฅู†ุดุงุก ุงู„ุชุนู„ูŠู…ุงุช ุงู„ุจุฑู…ุฌูŠุฉ ุงู„ุชุงู„ูŠุฉ:

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

ุฏุนูˆู†ุง ู†ู†ุธุฑ ููŠ ุงู„ุฏุงุฎู„. ูŠุชู… ุฃุฎุฐ ุงู„ู…ุชุบูŠุฑ a ุŒ ูˆูŠุชู… ุทุฑุญู‡ ููŠ CharSequence ุŒ ุจุนุฏ ุทุฑุญู‡ ุŒ ูˆุงู„ุฐูŠ ุชู… ุฅู†ูุงู‚ู‡ ุฃูŠุถู‹ุง ู„ุจุนุถ ุงู„ูˆู‚ุช ุŒ ูˆูŠุณู…ู‰ ุงู„ุงุฎุชูŠุงุฑ ุงู„ุขุฎุฑ - StringsKt.isBlank - ู‡ุฐู‡ ู‡ูŠ ุงู„ุทุฑูŠู‚ุฉ ุงู„ุชูŠ ุชุชู… ุจู‡ุง ูƒุชุงุจุฉ ูˆุธูŠูุฉ ุงู„ุชู…ุฏูŠุฏ ู„ู€ CharSequence ุŒ ู„ุฐู„ูƒ ูŠุชู… ุฅุฑุณุงู„ู‡ุง ูˆุฅุฑุณุงู„ู‡ุง. ู†ุธุฑู‹ุง ู„ุฃู† ุงู„ุชุนุจูŠุฑ ุงู„ุฃูˆู„ ูŠู…ูƒู† ุฃู† ูŠูƒูˆู† ู„ุงุบูŠุงู‹ ุŒ ูุฅู†ู‡ ูŠุฃุฎุฐู‡ ูˆูŠู‚ูˆู… ุจุงู„ู…ู„ุงูƒู…ุฉ ุŒ ูˆูŠู„ูู‡ุง ูƒู„ู‡ุง ููŠ Boolean.valueOf. ู„ุฐู„ูƒ ุŒ ูŠุตุจุญ ุงู„ุจุฏุงุฆูŠ ุงู„ุญู‚ูŠู‚ูŠ ุฃูŠุถู‹ุง ูƒุงุฆู†ู‹ุง ุŒ ูˆูู‚ุท ุจุนุฏ ุฐู„ูƒ ูŠุชู… ุงู„ุชุญู‚ู‚ ุจุงู„ูุนู„ ูˆูŠุชู… ุงุณุชุฏุนุงุก Intrinsics.areEqual.

ู‚ุฏ ุชุจุฏูˆ ู‡ุฐู‡ ุงู„ุนู…ู„ูŠุฉ ุจุณูŠุทุฉ ุŒ ูˆู„ูƒู† ู‡ุฐู‡ ู†ุชูŠุฌุฉ ุบูŠุฑ ู…ุชูˆู‚ุนุฉ. ููŠ ุงู„ูˆุงู‚ุน ุŒ ู‡ู†ุงูƒ ุนุฏุฏ ู‚ู„ูŠู„ ุฌุฏุง ู…ู† ู‡ุฐู‡ ุงู„ุฃุดูŠุงุก. ูˆู„ูƒู† ุนู†ุฏู…ุง ูŠูƒูˆู† ู„ุฏูŠูƒ ุฅุจุทุงู„ / ู„ุง ุฅุจุทุงู„ ุŒ ูŠู…ูƒู†ูƒ ุฅู†ุดุงุก ุงู„ูƒุซูŠุฑ ู…ู† ู‡ุฐู‡ ุงู„ุฃุดูŠุงุก ุŒ ูˆุฃุฎุฑู‰ ู„ู… ุชูƒู† ู„ุชุชูˆู‚ุนู‡ุง ุฃุจุฏู‹ุง. ู„ุฐู„ูƒ ุŒ ุฃูˆุตูŠูƒ ุจุงู„ุงุจุชุนุงุฏ ุนู† ุงู„ุบู…ูˆุถ ููŠ ุฃู‚ุฑุจ ูˆู‚ุช ู…ู…ูƒู†. ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุชุฃุชูŠ ุฅู„ู‰ ุญุตุงู†ุฉ ุงู„ู‚ูŠู… ููŠ ุฃู‚ุฑุจ ูˆู‚ุช ู…ู…ูƒู† ูˆุงู„ุงุจุชุนุงุฏ ุนู† ุงู„ุฅุจุทุงู„ ุญุชู‰ ู„ุง ุชุนู…ู„ ููŠ ุฃุณุฑุน ูˆู‚ุช ู…ู…ูƒู†.

ุญู„ู‚ุงุช


ุงู„ุดูŠุก ุงู„ุชุงู„ูŠ ุงู„ู…ุซูŠุฑ ู„ู„ุงู‡ุชู…ุงู….

ูŠู…ูƒู†ูƒ ุงุณุชุฎุฏุงู… ุงู„ู…ุนุชุงุฏ ู„ู€ ุŒ ูˆู‡ูˆ ููŠ Java ุŒ ูˆู„ูƒู† ูŠู…ูƒู†ูƒ ุฃูŠุถู‹ุง ุงุณุชุฎุฏุงู… ูˆุงุฌู‡ุฉ ุจุฑู…ุฌุฉ ุงู„ุชุทุจูŠู‚ุงุช ุงู„ู…ู†ุงุณุจุฉ ุงู„ุฌุฏูŠุฏุฉ - ูƒุชุงุจุฉ ุชุนุฏุงุฏ ุงู„ุนู†ุงุตุฑ ููŠ ุงู„ู‚ุงุฆู…ุฉ ุนู„ู‰ ุงู„ููˆุฑ. , 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/ar420143/


All Articles