SlideShare a Scribd company logo
1 of 32
Kotlin для розробки Android
Артем Клєйншмідт,
Android developer, MindK
Що таке Kotlin
Kotlin - статично типізована мова програмування від компанії
JetBrains.
2011 - вперше представлена
2016 - перший стабільний реліз
2017 - компанія Google оголосила Kotlin офіційно підтримуваною
мовою програмування для платформи Android
Переваги Kotlin
● Повна зворотня зумісність з Java
● Null-safe на рівні компіляції
● Data класи
● Підтримка як ООП, так і функціональної парадигми
● Зручна стандартна бібліотека
● Малий розмір (додає приблизно 100КБ до android
додатків)
Базовий синтаксис
Функція
Read-only змінна
Змінна
Клас, інтерфейс
Data класи
Містить автоматично згенеровані getters, setters, toString(), copy(),
hashCode(), equals()
Зворотня сумісність з Java
Класи, написані на Kotlin можна використовувати в Java, і
навпаки
Null Safety
Кожне посилання має бути явно указано як nullable або non-null
Null Safety
Елвіс оператор ?:
Безпечні виклики ?.
Null Safety
Приклад
Java
Kotlin
Control Flow
If є виразом, повертає значення
When - заміна switch з Java
Функції
Лямбда - анонімна функція
Java 7
Kotlin
Функції
Функція вищого порядку - функція, що приймає іншу функцію як
аргумент, або повертає функцію
Функції
Inline operator
Функції
Параметри за замовчуванням
Делегація
Kotlin має вбудовану підримку паттерна Delegation.
Делегація
Delegated Properties
Можна створити власний делегат
Делегація
Lazy делегат
Результат:
computed!
Hello
Hello
Smart casts
Java
Kotlin
Collections
Kotlin collections API - по факту огортка над Java колекціями.
Collections
Колекції мають вбудовані зручні utils функції, такі як first(), last(),
filter(), sort(), zip() і т.п.
Стандартна бібліотека
Стандартна бібліотека містить також набір корисних функцій, які
можна застосовувати до об’єктів будь-яких типів
Стандартна бібліотека
Extension functions
В Kotlin є можливість додавати методи до класів, не створюючи
при цьому нащадків
Android SDK
Add some Kotlin magic
Wrapping 3d party API
Наприклад, обробка дерева View (Android SDK)
Java Kotlin
Wrapping 3d party API
Мінуси міграції на Kotlin
● Втрата історії git при конвертації файла
● Нестача Kotlin спеціалістів
● Менше інформації в мережі в порівнянні з Java
● Порушення null-safety при використанні Java і Kotlin разом
● Уповільнення швидкості зборки проекту за деяких умов
Менше інформації в мережі в порівнянні з Java
StackOverflow: Java ~1 300 000 питань, Kotlin ~5000
Менше тредів на форумах
Менше opensource проектів: github Java ~1 000 000, Kotlin ~2000
Менше книжок
Порушення null-safety
Уповільнення швидкості зборки проекту
Час білда проекта з чистими build папками
Простий проект:
Java ~25 с.
Kotlin ~27c.
+ Dagger 2 + Data binding
Java: 42 c., 29 c., 26 c.
Kotlin: 55 c., 33 c., 32 c.
Курси MindK
SINGLE PAGE APPLICATIONS
● REST API
● SPA
● Vue.js
● Webpack,
● Asynchronous Programming
● JSON Web Tokens
● Full Stack
Реєстрація триває до 10 жовтня -> learn.mindk.com
Sumy Tech Battles
Coming soon
Tech Battle #8:
?
Приєднуйтесь до нас в соц. мережах
facebook.com/mindklab
instagram.com/mindklab
twitter.com/mindklab
linkedin.com/company/mindk
Дякую за увагу!

More Related Content

Similar to Kotlin для розробки Android

ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...
ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...
ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...GoQA
 
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)Exoft LLC
 
Руйнуємо .NET Міфи
Руйнуємо .NET МіфиРуйнуємо .NET Міфи
Руйнуємо .NET МіфиSerhiy Kalinets
 
Global logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsGlobal logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsPavlo Iuriichuk
 
Павло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoПавло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoGlobalLogic Ukraine
 
Continious integration jet brains teamcity. Віталій Галушка
Continious integration jet brains teamcity. Віталій ГалушкаContinious integration jet brains teamcity. Віталій Галушка
Continious integration jet brains teamcity. Віталій ГалушкаHRdepartment
 
Lecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CLecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CMaksym Davydov
 
Alexey Borisenko - Network Programmability using Python
Alexey Borisenko - Network Programmability using PythonAlexey Borisenko - Network Programmability using Python
Alexey Borisenko - Network Programmability using PythonPyCon Odessa
 
"Elements of functional programming in C# based on Language-Ext library as an...
"Elements of functional programming in C# based on Language-Ext library as an..."Elements of functional programming in C# based on Language-Ext library as an...
"Elements of functional programming in C# based on Language-Ext library as an...Fwdays
 
.NET Platform. C# Basics
.NET Platform. C# Basics.NET Platform. C# Basics
.NET Platform. C# Basicseleksdev
 

Similar to Kotlin для розробки Android (13)

ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...
ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...
ЮРІЙ СЕРДЮК «Патерни проектування в автоматизації. Практичний досвід з Python...
 
Practices
PracticesPractices
Practices
 
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
 
Руйнуємо .NET Міфи
Руйнуємо .NET МіфиРуйнуємо .NET Міфи
Руйнуємо .NET Міфи
 
Global logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsGlobal logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.js
 
Павло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoПавло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. Howto
 
Continious integration jet brains teamcity. Віталій Галушка
Continious integration jet brains teamcity. Віталій ГалушкаContinious integration jet brains teamcity. Віталій Галушка
Continious integration jet brains teamcity. Віталій Галушка
 
Lecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CLecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-C
 
Alexey Borisenko - Network Programmability using Python
Alexey Borisenko - Network Programmability using PythonAlexey Borisenko - Network Programmability using Python
Alexey Borisenko - Network Programmability using Python
 
Patterns.pptx
Patterns.pptxPatterns.pptx
Patterns.pptx
 
"Elements of functional programming in C# based on Language-Ext library as an...
"Elements of functional programming in C# based on Language-Ext library as an..."Elements of functional programming in C# based on Language-Ext library as an...
"Elements of functional programming in C# based on Language-Ext library as an...
 
.NET Platform. C# Basics
.NET Platform. C# Basics.NET Platform. C# Basics
.NET Platform. C# Basics
 
Vue.js
Vue.jsVue.js
Vue.js
 

More from UP2IT

Microservices. Mastering Chaos
Microservices. Mastering ChaosMicroservices. Mastering Chaos
Microservices. Mastering ChaosUP2IT
 
Сочетание классической и гибкой методологий управления проектами
Сочетание классической и гибкой методологий управления проектамиСочетание классической и гибкой методологий управления проектами
Сочетание классической и гибкой методологий управления проектамиUP2IT
 
Go для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчикаGo для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчикаUP2IT
 
Дизайнер в эпоху цифровых перемен
Дизайнер в эпоху цифровых переменДизайнер в эпоху цифровых перемен
Дизайнер в эпоху цифровых переменUP2IT
 
Продуктовий дизайн і UX / UI дизайн процеси при розробці цифрових продуктів
Продуктовий дизайн і UX / UI дизайн процеси при розробці цифрових продуктівПродуктовий дизайн і UX / UI дизайн процеси при розробці цифрових продуктів
Продуктовий дизайн і UX / UI дизайн процеси при розробці цифрових продуктівUP2IT
 
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITION
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITIONМодели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITION
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITIONUP2IT
 
VR/AR в бизнесе
VR/AR в бизнесеVR/AR в бизнесе
VR/AR в бизнесеUP2IT
 
Native DB transactions
Native DB transactionsNative DB transactions
Native DB transactionsUP2IT
 
Hell 2 Heaven or Choosing Cloud Provider
Hell 2 Heaven or Choosing Cloud ProviderHell 2 Heaven or Choosing Cloud Provider
Hell 2 Heaven or Choosing Cloud ProviderUP2IT
 
Automation pyramid within CI process
Automation pyramid within CI processAutomation pyramid within CI process
Automation pyramid within CI processUP2IT
 
Containers, containers, containers...
Containers, containers, containers...Containers, containers, containers...
Containers, containers, containers...UP2IT
 
React. Learn once, write anywhere
React. Learn once, write anywhereReact. Learn once, write anywhere
React. Learn once, write anywhereUP2IT
 
Сложности и специфика построения систем раздачи адалт видео контента
Сложности и специфика построения систем раздачи адалт видео контентаСложности и специфика построения систем раздачи адалт видео контента
Сложности и специфика построения систем раздачи адалт видео контентаUP2IT
 
H2H Communication in IT
H2H Communication in ITH2H Communication in IT
H2H Communication in ITUP2IT
 
Как я не стал барабанщиком или Как менеджер создает ценность
Как я не стал барабанщиком или Как менеджер создает ценностьКак я не стал барабанщиком или Как менеджер создает ценность
Как я не стал барабанщиком или Как менеджер создает ценностьUP2IT
 
Epic Sales Fails Compilation
Epic Sales Fails CompilationEpic Sales Fails Compilation
Epic Sales Fails CompilationUP2IT
 
Design Thinking
Design ThinkingDesign Thinking
Design ThinkingUP2IT
 
Как настроенные процессы повышают прибыльность и снижают стресс
Как настроенные процессы повышают прибыльность и снижают стрессКак настроенные процессы повышают прибыльность и снижают стресс
Как настроенные процессы повышают прибыльность и снижают стрессUP2IT
 

More from UP2IT (18)

Microservices. Mastering Chaos
Microservices. Mastering ChaosMicroservices. Mastering Chaos
Microservices. Mastering Chaos
 
Сочетание классической и гибкой методологий управления проектами
Сочетание классической и гибкой методологий управления проектамиСочетание классической и гибкой методологий управления проектами
Сочетание классической и гибкой методологий управления проектами
 
Go для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчикаGo для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчика
 
Дизайнер в эпоху цифровых перемен
Дизайнер в эпоху цифровых переменДизайнер в эпоху цифровых перемен
Дизайнер в эпоху цифровых перемен
 
Продуктовий дизайн і UX / UI дизайн процеси при розробці цифрових продуктів
Продуктовий дизайн і UX / UI дизайн процеси при розробці цифрових продуктівПродуктовий дизайн і UX / UI дизайн процеси при розробці цифрових продуктів
Продуктовий дизайн і UX / UI дизайн процеси при розробці цифрових продуктів
 
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITION
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITIONМодели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITION
Модели OPEN SOURCE компаний и можно ли выжить без OPEN CORE и ENTERPRISE EDITION
 
VR/AR в бизнесе
VR/AR в бизнесеVR/AR в бизнесе
VR/AR в бизнесе
 
Native DB transactions
Native DB transactionsNative DB transactions
Native DB transactions
 
Hell 2 Heaven or Choosing Cloud Provider
Hell 2 Heaven or Choosing Cloud ProviderHell 2 Heaven or Choosing Cloud Provider
Hell 2 Heaven or Choosing Cloud Provider
 
Automation pyramid within CI process
Automation pyramid within CI processAutomation pyramid within CI process
Automation pyramid within CI process
 
Containers, containers, containers...
Containers, containers, containers...Containers, containers, containers...
Containers, containers, containers...
 
React. Learn once, write anywhere
React. Learn once, write anywhereReact. Learn once, write anywhere
React. Learn once, write anywhere
 
Сложности и специфика построения систем раздачи адалт видео контента
Сложности и специфика построения систем раздачи адалт видео контентаСложности и специфика построения систем раздачи адалт видео контента
Сложности и специфика построения систем раздачи адалт видео контента
 
H2H Communication in IT
H2H Communication in ITH2H Communication in IT
H2H Communication in IT
 
Как я не стал барабанщиком или Как менеджер создает ценность
Как я не стал барабанщиком или Как менеджер создает ценностьКак я не стал барабанщиком или Как менеджер создает ценность
Как я не стал барабанщиком или Как менеджер создает ценность
 
Epic Sales Fails Compilation
Epic Sales Fails CompilationEpic Sales Fails Compilation
Epic Sales Fails Compilation
 
Design Thinking
Design ThinkingDesign Thinking
Design Thinking
 
Как настроенные процессы повышают прибыльность и снижают стресс
Как настроенные процессы повышают прибыльность и снижают стрессКак настроенные процессы повышают прибыльность и снижают стресс
Как настроенные процессы повышают прибыльность и снижают стресс
 

Kotlin для розробки Android

Editor's Notes

  1. Код проекту є у вільному доступі на github Може використовуватись як мова для JVM - компілиться в Java 6/8 байткод, також може бути скомпільована в JavaScript, і в native code Android studio 3.0
  2. IDE дають можливість згенерувати toString, equals, hashcode. Але коли ви додаєте, прибираєте, або змінюєте одне з полей класа, то ви маєте згенерувати ці методи наново. І якщо ви забудете це зробити, то матимете дуже цікавий баг.
  3. Зверніть увагу, в Kotlin властивості класів завжди доступні через поля, а не через методи
  4. Тернарного оператора в Kotlin не існує, так як if повертає значення
  5. При використовуванні іменованих параметрів, порядок можна змінювати