SlideShare a Scribd company logo
Кирилл Розов
Android разработчик
Kotlin
Следующий язык после Java
К обязательно прочтению
Any language
Compiler
JVM языки
JVM языки
Переменные
val a: Int = 1
val a = 1
var b = 2
val c: Int
c = 3
Null Safety
Message message = queryMessage();
String text = “”
if (message != null) {
if (message.from != null) {
text = message.from;
}
}
Null Safety
Null Safety
val stringNotNull: String = "" // Valid
val stringNotNull: String = null // Error
val stringNullable: String? = null // Valid
val stringNullable: String? = "" // Valid
Null Safety
Message message = queryMessage();
String text = “”
if (message != null) {
if (message.from != null) {
text = message.from;
}
}
val text = queryMessage()?.from ?: “”
Data класс
public class Device {
private String id;
private String name;
private String cpu;
private long ramSize;
public Device(@NotNull String id, @NotNull String name, @NotNull String cpu, long ramSize) {
this.id = id;
this.name = name;
this.cpu = cpu;
this.ramSize = ramSize;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public long getRamSize() {
return ramSize;
}
public void setRamSize(long ramSize) {
this.ramSize = ramSize;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Device device = (Device) o;
return ramSize == device.ramSize && id.equals(device.id) && name.equals(device.name) && cpu.equals(device.cpu);
}
@Override
public int hashCode() {
int result = id.hashCode();
result = 31 * result + name.hashCode();
result = 31 * result + cpu.hashCode();
result = 31 * result + (int) (ramSize ^ (ramSize >>> 32));
return result;
}
@Override
public String toString() {
return "Device{" + "id='" + id + ''' + ", name='" + name + ''' + ", cpu='" + cpu + ''' + ", ramSize=" + ramSize + ‘}';
}
}
Data класс
data class Device(var id: String, var name: String)
Операции с коллекциями
Операции с коллекциями
List<Device> qualcommCpuDevices = new ArrayList<>();
for (Device device : devices)
if (device.getCpu().equals("Qualcomm"))
qualcommCpuDevices.add(device);
List<Device> largeRamQualcommDevices = new ArrayList<>();
for (Device device : qualcommCpuDevices)
if (isLargeRamDevice(device))
largeRamQualcommDevices.add(device);
List<String> deviceNames = new ArrayList<>();
for (Device device : largeRamQualcommDevices)
deviceNames.add(device.getName());
Операции с коллекциями
devices.stream()
.filter(device -> device.getCpu().equals("Qualcomm"))
.filter(Device::isLargeRamDevice)
.map(Device::getName)
.collect(Collectors.toList());
Операции с коллекциями
devices.filter { it.cpu == "Qualcomm" }
.filter(Device::isLargeRamDevice)
.map { it.name }
.toList()
Singletone
class Singletone {
private static Singletone inst;
public static Singletone getInstance() {
if (inst == null) {
synchronized (Singletone.class) {
if (inst == null) inst = new Singletone();
}
}
return instance;
}
}
Singletone
object Singletone
Lazy
public static Singletone getInstance() {
if (inst == null) {
synchronized (Singletone.class) {
if (inst == null) inst = new Singletone();
}
}
return instance;
}
Lazy
val instance by lazy { Singletone() }
Методы
String concat(String prefix, String postfix, String... values)
Методы
String concat(String prefix, String postfix, String... values)
String concat(String prefix, String... values) {
return concat(prefix, "", values);
}
Методы
String concat(String prefix, String postfix, String... values)
String concat(String prefix, String... values) {
return concat(prefix, "", values);
}
String concat(String... values) {
return concat("", values);
}
Методы
fun concat(
prefix: String = "",
postfix: String = "",
vararg values: String
)
Методы
concat(prefix=“[", postfix=“]", values=[“one","two",“three”])
Утилитные классы
public class StringUtils {
static String concat(
String prefix, String postfix, String... values)
static String concat(String... values)
}
String[] array = …;
StringUtils.concat(array);
Утилитные классы
Array<String> array = …
array.concat()
Утилитные классы
// Функция-расширение
fun Array<String>.concat(
divider: String, prefix: String, postfix: String)
Array<String> array = …
array.concat()
Строки
Object a = …;
Object b = …;
"[" + a + "," + b + "]";
Строки
Object a = …;
Object b = …;
"[" + a + "," + b + "]";
"[$a,$b]"
Самый быстрорастущий
язык
Официальный язык для
Android
Около 20% на Android
написаны на Kotlin
Официальная поддержка
Использование языка
крупнейшими компаниями
Будет большим плюсом

• Знание языка Kotlin
С чего начать изучение
• kotlinlang.org

На русском kotlinlang.ru

• Kotlin Koins: cерия заданий для изучения языка

• “Kotlin в действие” Жемеров, Исакова
Belarus Kotlin User Group
Q&A
Спасибо за внимание

More Related Content

What's hot

Михаил Давыдов: JavaScript. Асинхронность
Михаил Давыдов: JavaScript. АсинхронностьМихаил Давыдов: JavaScript. Асинхронность
Михаил Давыдов: JavaScript. АсинхронностьYandex
 
Экстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverЭкстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java Driver
Vitebsk DSC
 
Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Unsafe: to be or to be removed?
Unsafe: to be or to be removed?
Alexey Fyodorov
 
Stream API: рекомендации лучших собаководов
Stream API: рекомендации лучших собаководовStream API: рекомендации лучших собаководов
Stream API: рекомендации лучших собаководов
tvaleev
 
Reactive programming для успеха вашего стартапа
Reactive programming для успеха вашего стартапаReactive programming для успеха вашего стартапа
Reactive programming для успеха вашего стартапа
Vitebsk DSC
 
Java 8 puzzlers
Java 8 puzzlersJava 8 puzzlers
Java 8 puzzlers
Evgeny Borisov
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularization
Ivan Krylov
 
SOA: Строим свой service mesh
SOA: Строим свой service meshSOA: Строим свой service mesh
SOA: Строим свой service mesh
Ivan Kruglov
 
Живые приложения с Rx
Живые приложения с RxЖивые приложения с Rx
Живые приложения с Rx
GoSharp
 
Thread
ThreadThread
JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)Mikhail Davydov
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другу
CEE-SEC(R)
 
JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.
FDConf
 

What's hot (13)

Михаил Давыдов: JavaScript. Асинхронность
Михаил Давыдов: JavaScript. АсинхронностьМихаил Давыдов: JavaScript. Асинхронность
Михаил Давыдов: JavaScript. Асинхронность
 
Экстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverЭкстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java Driver
 
Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Unsafe: to be or to be removed?
Unsafe: to be or to be removed?
 
Stream API: рекомендации лучших собаководов
Stream API: рекомендации лучших собаководовStream API: рекомендации лучших собаководов
Stream API: рекомендации лучших собаководов
 
Reactive programming для успеха вашего стартапа
Reactive programming для успеха вашего стартапаReactive programming для успеха вашего стартапа
Reactive programming для успеха вашего стартапа
 
Java 8 puzzlers
Java 8 puzzlersJava 8 puzzlers
Java 8 puzzlers
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularization
 
SOA: Строим свой service mesh
SOA: Строим свой service meshSOA: Строим свой service mesh
SOA: Строим свой service mesh
 
Живые приложения с Rx
Живые приложения с RxЖивые приложения с Rx
Живые приложения с Rx
 
Thread
ThreadThread
Thread
 
JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другу
 
JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.
 

Similar to Kotlin - следующий язык после Java

Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
Technopark
 
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидахCodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидахCodeFest
 
Прикладная теория Application Security
Прикладная теория Application SecurityПрикладная теория Application Security
Прикладная теория Application Security
Vladimir Kochetkov
 
XML Magic
XML MagicXML Magic
XML Magic
Igor Khotin
 
Mera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-CMera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-C
Sergey Pronin
 
Groovy и Grails. Быстро и обо всём
Groovy и Grails. Быстро и обо всёмGroovy и Grails. Быстро и обо всём
Groovy и Grails. Быстро и обо всём
Ruslan Balkin
 
Intro to Swift techitout
Intro to Swift techitoutIntro to Swift techitout
Intro to Swift techitout
Alexandr Graschenkov
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
Vasil Remeniuk
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
metaform
 
Fiche Révision POO
Fiche Révision POOFiche Révision POO
Fiche Révision POO
Asmaa BENGUEDDACH
 
Statis code analysis
Statis code analysisStatis code analysis
Statis code analysis
chashnikov
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
Vasya Petrov
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
Noveo
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаAnton Arhipov
 
Подводные камни System.Security.Cryptography
Подводные камни System.Security.CryptographyПодводные камни System.Security.Cryptography
Подводные камни System.Security.Cryptography
Vladimir Kochetkov
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
Antonio
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
Vasya Petrov
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кодаAndrey Karpov
 

Similar to Kotlin - следующий язык после Java (20)

Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидахCodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
 
Прикладная теория Application Security
Прикладная теория Application SecurityПрикладная теория Application Security
Прикладная теория Application Security
 
XML Magic
XML MagicXML Magic
XML Magic
 
Mera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-CMera Dev Fest - Swift vs. Obj-C
Mera Dev Fest - Swift vs. Obj-C
 
Groovy и Grails. Быстро и обо всём
Groovy и Grails. Быстро и обо всёмGroovy и Grails. Быстро и обо всём
Groovy и Grails. Быстро и обо всём
 
Intro to Swift techitout
Intro to Swift techitoutIntro to Swift techitout
Intro to Swift techitout
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
Fiche Révision POO
Fiche Révision POOFiche Révision POO
Fiche Révision POO
 
Statis code analysis
Statis code analysisStatis code analysis
Statis code analysis
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
course js day 2
course js day 2course js day 2
course js day 2
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчика
 
Подводные камни System.Security.Cryptography
Подводные камни System.Security.CryptographyПодводные камни System.Security.Cryptography
Подводные камни System.Security.Cryptography
 
Bytecode
BytecodeBytecode
Bytecode
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кода
 

More from Kirill Rozov

Kotlin Coroutines. Flow is coming
Kotlin Coroutines. Flow is comingKotlin Coroutines. Flow is coming
Kotlin Coroutines. Flow is coming
Kirill Rozov
 
2 years without Java. Kotlin only
2 years without Java. Kotlin only2 years without Java. Kotlin only
2 years without Java. Kotlin only
Kirill Rozov
 
KOIN for dependency Injection
KOIN for dependency InjectionKOIN for dependency Injection
KOIN for dependency Injection
Kirill Rozov
 
Optimize APK size
Optimize APK sizeOptimize APK size
Optimize APK size
Kirill Rozov
 
ConstraintLayout. Fell the Power of constraints
ConstraintLayout. Fell the Power of constraintsConstraintLayout. Fell the Power of constraints
ConstraintLayout. Fell the Power of constraints
Kirill Rozov
 
Kotlin 1.2: Sharing code between platforms
Kotlin 1.2: Sharing code between platformsKotlin 1.2: Sharing code between platforms
Kotlin 1.2: Sharing code between platforms
Kirill Rozov
 
Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kotlin Advanced - Apalon Kotlin Sprint Part 3Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kirill Rozov
 
Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2
Kirill Rozov
 
Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1
Kirill Rozov
 
Тестирование на Android с Dagger 2
Тестирование на Android с Dagger 2Тестирование на Android с Dagger 2
Тестирование на Android с Dagger 2
Kirill Rozov
 
Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)
Kirill Rozov
 
What's new in Android O
What's new in Android OWhat's new in Android O
What's new in Android O
Kirill Rozov
 
Android service
Android serviceAndroid service
Android service
Kirill Rozov
 
Effective Java
Effective JavaEffective Java
Effective Java
Kirill Rozov
 
Dagger 2
Dagger 2Dagger 2
Dagger 2
Kirill Rozov
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
Kirill Rozov
 
REST
RESTREST
Kotlin для Android
Kotlin для AndroidKotlin для Android
Kotlin для Android
Kirill Rozov
 
What's new in Android M
What's new in Android MWhat's new in Android M
What's new in Android M
Kirill Rozov
 
Android Data Binding
Android Data BindingAndroid Data Binding
Android Data Binding
Kirill Rozov
 

More from Kirill Rozov (20)

Kotlin Coroutines. Flow is coming
Kotlin Coroutines. Flow is comingKotlin Coroutines. Flow is coming
Kotlin Coroutines. Flow is coming
 
2 years without Java. Kotlin only
2 years without Java. Kotlin only2 years without Java. Kotlin only
2 years without Java. Kotlin only
 
KOIN for dependency Injection
KOIN for dependency InjectionKOIN for dependency Injection
KOIN for dependency Injection
 
Optimize APK size
Optimize APK sizeOptimize APK size
Optimize APK size
 
ConstraintLayout. Fell the Power of constraints
ConstraintLayout. Fell the Power of constraintsConstraintLayout. Fell the Power of constraints
ConstraintLayout. Fell the Power of constraints
 
Kotlin 1.2: Sharing code between platforms
Kotlin 1.2: Sharing code between platformsKotlin 1.2: Sharing code between platforms
Kotlin 1.2: Sharing code between platforms
 
Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kotlin Advanced - Apalon Kotlin Sprint Part 3Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kotlin Advanced - Apalon Kotlin Sprint Part 3
 
Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2
 
Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1Why Kotlin - Apalon Kotlin Sprint Part 1
Why Kotlin - Apalon Kotlin Sprint Part 1
 
Тестирование на Android с Dagger 2
Тестирование на Android с Dagger 2Тестирование на Android с Dagger 2
Тестирование на Android с Dagger 2
 
Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)
 
What's new in Android O
What's new in Android OWhat's new in Android O
What's new in Android O
 
Android service
Android serviceAndroid service
Android service
 
Effective Java
Effective JavaEffective Java
Effective Java
 
Dagger 2
Dagger 2Dagger 2
Dagger 2
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
REST
RESTREST
REST
 
Kotlin для Android
Kotlin для AndroidKotlin для Android
Kotlin для Android
 
What's new in Android M
What's new in Android MWhat's new in Android M
What's new in Android M
 
Android Data Binding
Android Data BindingAndroid Data Binding
Android Data Binding
 

Kotlin - следующий язык после Java