ݺߣ

ݺߣShare a Scribd company logo
Kotlin
Начало
whoami
Мамыров Дастан
КГТУ им. Раззакова ПОВТиАС
выпуск 2015 года
Практикую моб разработку с 2014 года
Сейчас работаю в MadDevs 🤘
Kotlin.
Начало.
За эти годы создатели упростили|улучшили многое, и сегодня мы с вами разберем одно из
последних добавлений.
Kotlin - статически типизированный язык программирования, работающий поверх JVM и
разрабатываемый компанией JetBrains.
Который с выходом Android Studio 3.0 является официальным языком программирования
для платформы Android.
Немного скучной информации…
Язык разрабатывается с 2010 года, представлен общественности в июле 2011.
Исходный код реализации языка был открыт в феврале 2012.
В феврале был выпущен milestone 1, включающий плагин для IDEA.
В июне — milestone 2 с поддержкой Android.
В декабре 2012 года вышел milestone 4, включающий, в частности, поддержку Java 7.
В феврале 2016 года вышел официальный релиз-кандидат версии 1.0, а 15 февраля 2016 года
— релиз 1.0. 1 марта 2017 вышел релиз 1.1.
В мае 2017 года компания Google сообщила, что инструменты языка Kotlin, основанные на
JetBrains IDE, будут по стандарту включены в Android Studio 3.0 — официальный инструмент
разработки для ОС Android
Полная двусторонняя совместимость с Java
То есть можно конвертировать код туда и обратно
● Null Safety
● Nullable Types and Non-Null Types
● Safe Calls (Безопасные вызовы)
Безопасные вызовы
shareActionProvider?.setShareIntent(shareIntent)
Если вы точно уверены в отсутствии null то можете использовать “!!”
И по умолчанию переменные создаются не null, если нужен то в обьявлении надо указывать ?
Оператор Элвис
! но это не тинарный оператор
val len = coverId?.length ?: 0
Также можно не указывать тип при создании переменной, но порой все же
лучше подстраховаться.
private var imageURL = ""
val maxRetryCount = 3
Еще можно перестать париться с блоками и использовать лямбды.🤘
fruits
.filter { it.startsWith("a") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { println(it) }
Лямбда, вложенная в лямбду
val months: List<Date> = ...
val hallsRents: Map<Date, Map<String, Int?>> = months
.map { month ->
month to halls
.map { it.name to rent(month, it) }
.toMap()
}
.toMap()
Расширения для функций
fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
val tmp = this[index1] // 'this' ссылка на List
this[index1] = this[index2]
this[index2] = tmp
}
Но при этом они не расширяют и не меняют исходный класс, а просто являются статичными
функциями для него.
А если хотите добавить внутрь своего класса статичную функцию то придется добавить его
внутрь companion object
class MyClass {
companion object { }
}
Параметры по умолчанию
data class User (
val name: String,
val birthDate: Date,
val created: Date = Date(),
val disabled: Boolean = false
)
val newUser = User("test", SEPTEMBER_1970)
apply - блок функции передающий себя в качестве параметра и возвращающий
себя
// Как было
fun createIntent(intentData: String, intentAction: String): Intent {
val intent = Intent()
intent.action = intentAction
intent.data=Uri.parse(intentData)
return intent
}
// Как стало
fun createIntent(intentData: String, intentAction: String) =
Intent().apply { action = intentAction }
.apply { data = Uri.parse(intentData) }
геттеры и сеттеры
Kotlin автоматически генерирует геттеры и сеттеры по умолчанию.
В Котлине, вы должны указать специальный сеттер или геттер, только если он у вас есть.
В противном случае, Kotlin автогенерирует его для вас
var a = 1
set(value) { field = Math.abs(value) }
И вправду. Очень схож с свифт и Айосникам легче будет перейти на kotlin
пример: Swift is like Kotlin
Всем спасибо.
Увидимся еще. ;)
Ad

Recommended

C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.
Igor Shkulipa
лек11 5
лек11 5
Anastasia Snegina
лек11 5
лек11 5
Anastasia Snegina
пр 14.docx
пр 14.docx
ssuser6d63bc1
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
Technopark
Ecma script 6 yevhen diachenko
Ecma script 6 yevhen diachenko
Denis Khabrenko
C++ теория
C++ теория
tank1975
C++ теория
C++ теория
tank1975
C++ теория
C++ теория
tank1975
введение
введение
anxesenpa
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
GlobalLogic Ukraine
Лекция 6
Лекция 6
itc73
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)
Andrey Gordienkov
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design Patterns
Andrey Gordienkov
VAMR ACADEMY Второе занятие
VAMR ACADEMY Второе занятие
mixARConference
1 Этапы развития языков программирования. Введение в язык программирования C#...
1 Этапы развития языков программирования. Введение в язык программирования C#...
yuay1991
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
UA Mobile
лек13 3
лек13 3
Anastasia Snegina
Изучение кода с использованием инструментов архитектуры в Visual Studio Ultim...
Изучение кода с использованием инструментов архитектуры в Visual Studio Ultim...
Александр Шамрай
Классы и объекты в Java
Классы и объекты в Java
metaform
Ruby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейс
Digital-агентство Мэйк
Java осень 2014 занятие 5
Java осень 2014 занятие 5
Technopark
Обзор SObjectizer 5.5
Обзор SObjectizer 5.5
Yauheni Akhotnikau
лек5 6
лек5 6
Anastasia Snegina
Tapestry it is simple
Tapestry it is simple
Anna Shymchenko
6
6
ssusera868ff
Javascript
Javascript
Vasya Petrov
Классы и объекты в Java
Классы и объекты в Java
metaform
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Mad Devs
Дружелюбнй онбординг: как с увеличением количества не потерять качество
Дружелюбнй онбординг: как с увеличением количества не потерять качество
Mad Devs

More Related Content

Similar to Kotlin Начало (20)

C++ теория
C++ теория
tank1975
введение
введение
anxesenpa
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
GlobalLogic Ukraine
Лекция 6
Лекция 6
itc73
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)
Andrey Gordienkov
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design Patterns
Andrey Gordienkov
VAMR ACADEMY Второе занятие
VAMR ACADEMY Второе занятие
mixARConference
1 Этапы развития языков программирования. Введение в язык программирования C#...
1 Этапы развития языков программирования. Введение в язык программирования C#...
yuay1991
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
UA Mobile
лек13 3
лек13 3
Anastasia Snegina
Изучение кода с использованием инструментов архитектуры в Visual Studio Ultim...
Изучение кода с использованием инструментов архитектуры в Visual Studio Ultim...
Александр Шамрай
Классы и объекты в Java
Классы и объекты в Java
metaform
Ruby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейс
Digital-агентство Мэйк
Java осень 2014 занятие 5
Java осень 2014 занятие 5
Technopark
Обзор SObjectizer 5.5
Обзор SObjectizer 5.5
Yauheni Akhotnikau
лек5 6
лек5 6
Anastasia Snegina
Tapestry it is simple
Tapestry it is simple
Anna Shymchenko
6
6
ssusera868ff
Javascript
Javascript
Vasya Petrov
Классы и объекты в Java
Классы и объекты в Java
metaform
C++ теория
C++ теория
tank1975
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
GlobalLogic Ukraine
Лекция 6
Лекция 6
itc73
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design Patterns
Andrey Gordienkov
VAMR ACADEMY Второе занятие
VAMR ACADEMY Второе занятие
mixARConference
1 Этапы развития языков программирования. Введение в язык программирования C#...
1 Этапы развития языков программирования. Введение в язык программирования C#...
yuay1991
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
Декларативное программирование клиент-серверных приложений на андроид - UA Mo...
UA Mobile
Изучение кода с использованием инструментов архитектуры в Visual Studio Ultim...
Изучение кода с использованием инструментов архитектуры в Visual Studio Ultim...
Александр Шамрай
Классы и объекты в Java
Классы и объекты в Java
metaform
Java осень 2014 занятие 5
Java осень 2014 занятие 5
Technopark
Классы и объекты в Java
Классы и объекты в Java
metaform

More from Mad Devs (20)

Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Mad Devs
Дружелюбнй онбординг: как с увеличением количества не потерять качество
Дружелюбнй онбординг: как с увеличением количества не потерять качество
Mad Devs
Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101.
Mad Devs
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Devs
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
Mad Devs
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
Mad Devs
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
Mad Devs
Лайфхаки менеджмента на удаленке от Дмитрия Кононенко
Лайфхаки менеджмента на удаленке от Дмитрия Кононенко
Mad Devs
Mad Talks. Astashov_splitbrain
Mad Talks. Astashov_splitbrain
Mad Devs
Flutter vs Native App Development
Flutter vs Native App Development
Mad Devs
Mad Talks. Marketing tips for tech companies
Mad Talks. Marketing tips for tech companies
Mad Devs
The paradox of choice in design
The paradox of choice in design
Mad Devs
Git and Github for Beginners
Git and Github for Beginners
Mad Devs
How to hire freelancers
How to hire freelancers
Mad Devs
Ethereum blockchain
Ethereum blockchain
Mad Devs
"Outside In". Web application testing.
"Outside In". Web application testing.
Mad Devs
Asynchrony in python exists and why should you use it
Asynchrony in python exists and why should you use it
Mad Devs
Ethereum: аспекты разработки смарт-контрактов
Ethereum: аспекты разработки смарт-контрактов
Mad Devs
Why we sleep. Michael Ivashenko
Why we sleep. Michael Ivashenko
Mad Devs
Удаленное управление приложением и его аналитика
Удаленное управление приложением и его аналитика
Mad Devs
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Mad Devs
Дружелюбнй онбординг: как с увеличением количества не потерять качество
Дружелюбнй онбординг: как с увеличением количества не потерять качество
Mad Devs
Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101.
Mad Devs
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Devs
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
Mad Devs
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
Mad Devs
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
Mad Devs
Лайфхаки менеджмента на удаленке от Дмитрия Кононенко
Лайфхаки менеджмента на удаленке от Дмитрия Кононенко
Mad Devs
Mad Talks. Astashov_splitbrain
Mad Talks. Astashov_splitbrain
Mad Devs
Flutter vs Native App Development
Flutter vs Native App Development
Mad Devs
Mad Talks. Marketing tips for tech companies
Mad Talks. Marketing tips for tech companies
Mad Devs
The paradox of choice in design
The paradox of choice in design
Mad Devs
Git and Github for Beginners
Git and Github for Beginners
Mad Devs
How to hire freelancers
How to hire freelancers
Mad Devs
Ethereum blockchain
Ethereum blockchain
Mad Devs
"Outside In". Web application testing.
"Outside In". Web application testing.
Mad Devs
Asynchrony in python exists and why should you use it
Asynchrony in python exists and why should you use it
Mad Devs
Ethereum: аспекты разработки смарт-контрактов
Ethereum: аспекты разработки смарт-контрактов
Mad Devs
Why we sleep. Michael Ivashenko
Why we sleep. Michael Ivashenko
Mad Devs
Удаленное управление приложением и его аналитика
Удаленное управление приложением и его аналитика
Mad Devs
Ad

Kotlin Начало

  • 2. whoami Мамыров Дастан КГТУ им. Раззакова ПОВТиАС выпуск 2015 года Практикую моб разработку с 2014 года Сейчас работаю в MadDevs 🤘
  • 3. Kotlin. Начало. За эти годы создатели упростили|улучшили многое, и сегодня мы с вами разберем одно из последних добавлений. Kotlin - статически типизированный язык программирования, работающий поверх JVM и разрабатываемый компанией JetBrains. Который с выходом Android Studio 3.0 является официальным языком программирования для платформы Android.
  • 4. Немного скучной информации… Язык разрабатывается с 2010 года, представлен общественности в июле 2011. Исходный код реализации языка был открыт в феврале 2012. В феврале был выпущен milestone 1, включающий плагин для IDEA. В июне — milestone 2 с поддержкой Android. В декабре 2012 года вышел milestone 4, включающий, в частности, поддержку Java 7. В феврале 2016 года вышел официальный релиз-кандидат версии 1.0, а 15 февраля 2016 года — релиз 1.0. 1 марта 2017 вышел релиз 1.1. В мае 2017 года компания Google сообщила, что инструменты языка Kotlin, основанные на JetBrains IDE, будут по стандарту включены в Android Studio 3.0 — официальный инструмент разработки для ОС Android
  • 5. Полная двусторонняя совместимость с Java То есть можно конвертировать код туда и обратно
  • 6. ● Null Safety ● Nullable Types and Non-Null Types ● Safe Calls (Безопасные вызовы)
  • 7. Безопасные вызовы shareActionProvider?.setShareIntent(shareIntent) Если вы точно уверены в отсутствии null то можете использовать “!!” И по умолчанию переменные создаются не null, если нужен то в обьявлении надо указывать ?
  • 8. Оператор Элвис ! но это не тинарный оператор val len = coverId?.length ?: 0
  • 9. Также можно не указывать тип при создании переменной, но порой все же лучше подстраховаться. private var imageURL = "" val maxRetryCount = 3 Еще можно перестать париться с блоками и использовать лямбды.🤘 fruits .filter { it.startsWith("a") } .sortedBy { it } .map { it.toUpperCase() } .forEach { println(it) }
  • 10. Лямбда, вложенная в лямбду val months: List<Date> = ... val hallsRents: Map<Date, Map<String, Int?>> = months .map { month -> month to halls .map { it.name to rent(month, it) } .toMap() } .toMap()
  • 11. Расширения для функций fun <T> MutableList<T>.swap(index1: Int, index2: Int) { val tmp = this[index1] // 'this' ссылка на List this[index1] = this[index2] this[index2] = tmp } Но при этом они не расширяют и не меняют исходный класс, а просто являются статичными функциями для него. А если хотите добавить внутрь своего класса статичную функцию то придется добавить его внутрь companion object class MyClass { companion object { } }
  • 12. Параметры по умолчанию data class User ( val name: String, val birthDate: Date, val created: Date = Date(), val disabled: Boolean = false ) val newUser = User("test", SEPTEMBER_1970)
  • 13. apply - блок функции передающий себя в качестве параметра и возвращающий себя // Как было fun createIntent(intentData: String, intentAction: String): Intent { val intent = Intent() intent.action = intentAction intent.data=Uri.parse(intentData) return intent } // Как стало fun createIntent(intentData: String, intentAction: String) = Intent().apply { action = intentAction } .apply { data = Uri.parse(intentData) }
  • 14. геттеры и сеттеры Kotlin автоматически генерирует геттеры и сеттеры по умолчанию. В Котлине, вы должны указать специальный сеттер или геттер, только если он у вас есть. В противном случае, Kotlin автогенерирует его для вас var a = 1 set(value) { field = Math.abs(value) }
  • 15. И вправду. Очень схож с свифт и Айосникам легче будет перейти на kotlin пример: Swift is like Kotlin

Editor's Notes

  • #3: Меня зовут Дастан и я работаю в MadDevs Еще во время учебы в универе я начал изучать мобильное программирование и продолжаю по сей день. Мы с командой до сих пор вздрагиваем вспоминая те страшные времена с Eclipse.