42
Новый язык программирования от JetBrains Андрей Лапшин KSI 2015-12-25

Новый язык программирования от JetBrains

Embed Size (px)

Citation preview

Page 1: Новый язык программирования от  JetBrains

Новый язык программирования от JetBrains

Андрей Лапшин

KSI

2015-12-25

Page 2: Новый язык программирования от  JetBrains

Что это?

Cтатический типизированный язык программирования для JVM, Android и Javascript от JetBrains:

� AppCode �IntelliJ IDEA

.., Android Studio

Page 3: Новый язык программирования от  JetBrains

Зачем нужен новый язык?

Android 1.0 Android 4.4

На Android на данный момент доступна Java 6 (Java 7, если minSdkVersion=19), в то время как уже выпущена Java 8 и разрабатывается Java 9 ( сентябрь 2016)

Java 6 Java 7 Java 8

2006 2008 2011 2013 2014 20xx

Android ???

Marshmallow (0.5 %)

Lollipop (29.5 %)

Kitkat (36.6 %)

Jelly Bean (26.9

%)

Ice Cream Sandwich (2.9 %)

Gingerbread + Froyo (3.6

%)

Page 4: Новый язык программирования от  JetBrains

Зачем нужен новый язык?

Недостатки Java 6 �Нет javax.time �Нет Streams API �Нет лямбд �Нет try-with-

resources

Page 5: Новый язык программирования от  JetBrains

Зачем нужен новый язык?

Недостатки Java 6 �Нет javax.time

ThreeTenABP �Нет Streams API �Нет лямбд �Нет try-with-

resources

Page 6: Новый язык программирования от  JetBrains

Зачем нужен новый язык?

Недостатки Java 6 �Нет javax.time

ThreeTenABP �Нет Streams API

StreamSupport/RxJava

�Нет лямбд �Нет try-with-

resources

Page 7: Новый язык программирования от  JetBrains

Зачем нужен новый язык?

Недостатки Java 6 �Нет javax.time ThreeTenABP �Нет Streams API StreamSupport/RxJava �Нет лямбд Retrolambda �Нет try-with-resources

Page 8: Новый язык программирования от  JetBrains

Зачем нужен новый язык?

Недостатки Java 6 �Нет javax.time ThreeTenABP �Нет Streams API StreamSupport/RxJava �Нет лямбд Retrolambda � Нет try-with-resources Retrolambda/minSdkVersion=19

Page 9: Новый язык программирования от  JetBrains

Зачем нужен новый язык?

Недостатки Java в целом � Необходимость наследования от системных классов

Page 10: Новый язык программирования от  JetBrains

Зачем нужен новый язык?

Недостатки Java в целом � Необходимость наследования от системных классов

� Невозможность расширения функциональности существующих классов (накапливается множество мелких Util-классов)

Page 11: Новый язык программирования от  JetBrains

Зачем нужен новый язык?

Недостатки Java в целом � Необходимость наследования от системных классов

� Невозможность расширения функциональности существующих классов (накапливается множество мелких Util-классов)

�Проблемы при работе c null

Page 12: Новый язык программирования от  JetBrains

Зачем нужен новый язык?

Недостатки Java в целом � Необходимость наследования от системных классов

� Невозможность расширения функциональности существующих классов (накапливается множество мелких Util-классов)

�Проблемы при работе c null � Многословие

Page 13: Новый язык программирования от  JetBrains

Почему именно Kotlin

�100% совместим с Java �Отличные инструменты разработки

� Сравнительно небольшой размер рантайма (≈950K) и количество методов (≈7900)

Page 14: Новый язык программирования от  JetBrains

Базовый синтаксФункцииfun sum(a: I n t , b : I n t ) : I n t {

return a + b}

Page 15: Новый язык программирования от  JetBrains

Базовый синтаксФункцииfun sum(a: I n t , b : I n t ) : I n t {

return a + b}

fun d i f f ( a : I n t , b : I n t ) = a - b

Page 16: Новый язык программирования от  JetBrains

Базовый синтаксФункцииfun sum(a: I n t , b : I n t ) : I n t {

return a + b}

fun d i f f ( a : I n t , b : I n t ) = a - b

Переменныеva l a : I n t = 1va l b = 1 / / Автовыведение типа

var x = 5 / / Изменяемая переменнаяx += 1

Page 17: Новый язык программирования от  JetBrains

Классы, свойстваclass Person {

va l name = "Vasya Pupkin"}

Page 18: Новый язык программирования от  JetBrains

Классы, свойстваclass Person const ruc tor (name: S t r i n g ) {

va l name = name}

Page 19: Новый язык программирования от  JetBrains

Классы, свойстваclass Person c o n s t r u c t o r ( v a l name: S t r i n g ) {}

Page 20: Новый язык программирования от  JetBrains

Классы, свойстваclass Person(val name: S t r i n g ) {}va l person = Person("Joe Smi th " )

Page 21: Новый язык программирования от  JetBrains

Работа с null

var a : S t r i n g = " abc"a = n u l l / / ошибка компиляции

Page 22: Новый язык программирования от  JetBrains

Работа с null

var a : S t r i n g = " abc"a = n u l l / / ошибка компиляции

var b : S t r i ng ? = "abc" b = n u l l / / ok

Page 23: Новый язык программирования от  JetBrains

Работа с null

var a : S t r i n g = "abc"a = n u l l / / ошибка компиляции

var b : S t r i n g? = "abc" b = n u l l / / ok

va l l 1 = a . l e n g t h / / okva l l 2 = b . l e n g t h / / ошибка: ' b ' может быть n u l l

Page 24: Новый язык программирования от  JetBrains

Работа с nullЯвная проверка на nullva l l = i f ( b ! = n u l l ) b . l e n g t h else - 1

Page 25: Новый язык программирования от  JetBrains

Работа с nullЯвная проверка на nullva l l = i f ( b ! = n u l l ) b . l e n g t h else - 1Использование оператора ?va l l = b? . l eng t hva l name = bob?.department?.head?.name

Page 26: Новый язык программирования от  JetBrains

Работа с nullЯвная проверка на nullva l l = i f ( b ! = n u l l ) b . l e n g t h else - 1Использование оператора ?va l l = b? . l eng t hva l name = bob?.department?.head?.nameИспользование оператора !!va l l = b ! ! . l e n g t h ( )

Page 27: Новый язык программирования от  JetBrains

Extension functions

s t a t i c boolean i sVeryLong (St r ing s ) {return s . l e n g t h ( ) > 80 ;

}boolean tooLong = Te x t U t i l s . i s To o L o n g ( s ) ;

Page 28: Новый язык программирования от  JetBrains

Extension functions

s t a t i c boolean i sVeryLong (St r ing s ) {return s . l e n g t h ( ) > 80 ;

}boolean tooLong = Te x t U t i l s . i s To o L o n g ( s ) ;

fun St r i ng . i sTo oLon g ( ) {return l e n g t h ( ) > 80

}va l tooLong = s . i sTooLong( )

Page 29: Новый язык программирования от  JetBrains

Лямбды

but ton .setOnCl ickL is tener (new View .OnC l i c k L is tene r ( ) {public void onCLick(View v )

{ Toas t . mak eTex t ( My Ac t i v i t y . t h i s , "Some t e x t " , Toast.LENGTH_SHORT).show();

}} ) ;

Page 30: Новый язык программирования от  JetBrains

Лямбды

but ton .setOnCl ickL is tener (new View .OnC l i c k L is tene r ( ) {public void onCLick(View v )

{ Toas t . mak eTex t ( My Ac t i v i t y . t h i s , "Some t e x t " , Toast.LENGTH_SHORT).show();

}} ) ;

bu t ton .s e t On Cl i c k L i s te ne r ( v -> Toas t . mak eTex t ( My Ac t i v i t y . t h i s , "Some t e x t " , Toast.LENGTH_SHORT).show();

} ) ;

Page 31: Новый язык программирования от  JetBrains

Лямбды

but ton .setOnCl ickL is tener (new View .OnC l i c k L is tene r ( ) {public void onCLick(View v )

{ Toas t . mak eTex t ( My Ac t i v i t y . t h i s , "Some t e x t " , Toast.LENGTH_SHORT).show();

}} ) ;

bu t ton .s e t On Cl i c k L i s te ne r ( v -> Toas t . mak eTex t ( My Ac t i v i t y . t h i s , "Some t e x t " , Toast.LENGTH_SHORT).show();

} ) ;

b u t t o n . s e t O nC l i c k L i s t e ne r ( { v : View -> Toas t .mak eTex t (My Ac t i v i t y. th is , "Some t e x t " , Toast.LENGTH_SHORT).show()

} )

Page 32: Новый язык программирования от  JetBrains

Лямбды

but ton .setOnCl ickL is tener (new View .OnC l i c k L is tene r ( ) {public void onCLick(View v )

{ Toas t . mak eTex t ( My Ac t i v i t y . t h i s , "Some t e x t " , Toast.LENGTH_SHORT).show();

}} ) ;

bu t ton .s e t On Cl i c k L i s te ne r ( v -> Toas t . mak eTex t ( My Ac t i v i t y . t h i s , "Some t e x t " , Toast.LENGTH_SHORT).show();

} ) ;

b u t t o n . s e t O nC l i c k L i s t e ne r ( { v : View -> Toas t .mak eTex t (My Ac t i v i t y. th is , "Some t e x t " , Toast.LENGTH_SHORT).show()

} )

bu t ton .s e tOnC l i c k L is tene r { Toas t .mak eTex t (MyAc t i v i t y. th is , "Some t e x t " , Toast.LENGTH_SHORT).show()

}

Page 33: Новый язык программирования от  JetBrains

Функции высшего порядкаfun<T> L i s t < T > . f i l t e r ( p r e d i c a t e : ( T ) - > Boo lean) :

/ / . . .}

Page 34: Новый язык программирования от  JetBrains

Функции высшего порядкаfun<T> L i s t < T > . f i l t e r ( p r e d i c a t e : ( T ) - > Boo lean) :

va l r e s u l t L i s t = A r r ayL i s t <T >( )f o r ( i t e m i n t h i s ) {

i f ( p r e d i c a t e ( i t e m ) ) { r e s u l t L i s t . a d d ( i te m )

}}

return r e s u l t L i s t}

Page 35: Новый язык программирования от  JetBrains

Функции высшего порядкаfun<T> L i s t < T > . f i l t e r ( p r e d i c a t e : ( T ) - > Boo lean) :

va l r e s u l t L i s t = A r r a yL i s t < T> ( )f o r ( i t e m i n t h i s ) {

i f ( p r e d i c a t e ( i t e m ) ) { r e s u l t L i s t . a d d ( i te m )

}}

return r e s u l t L i s t}

va l numbers = l i s t O f ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 )va l oddNumbers = n u m b e r s . f i l t e r { i t % 2 ! = 0 }

Page 36: Новый язык программирования от  JetBrains

Функции высшего порядкаdb . beg inTr ans ac t io n ( ) ;t r y {

d b . d e l e t e ( " u s e r s " , " f i r s t _name = ? " , new S t r i n g [ ] {} f i n a l l y {

db .endTr ans ac t i on ( ) ;}

Page 37: Новый язык программирования от  JetBrains

Функции высшего порядкаdb . beg inTr ans ac t io n ( ) ;t r y {

d b . d e l e t e ( " u s e r s " , " f i r s t _name = ? " , new S t r i n g [ ] { db . s e t Tr ans ac t io nSu c c es s fu l ( ) ;

} f i n a l l y {db .endTr ans ac t i on ( ) ;

}

Page 38: Новый язык программирования от  JetBrains

Функции высшего порядкаfun SQLi teDatabase. inTransact ion( func : ( ) - > U n i t )

{ beg inTrans ac t ion( )t r y {

f u n c ( ) se tTransac t ionSucc ess fu l ( )

} f i n a l l y {endTransac t ion( )

}}

db . i nTrans ac t i on {d b . d e l e t e ( " u s e r s " , " f i r s t _name

= ? " , ar rayOf( "Vasya"}

Page 39: Новый язык программирования от  JetBrains

Функции высшего порядкаfun SQLi teDatabase . inTransact ion(

f u n c : (SQLiteDatabase) -> U n i t ) { beg inTrans ac t ion( )

t r y {f u n c ( t h i s )

se tTransac t ionSucc ess fu l ( )} f i n a l l y {

endTransac t ion( )}

}

db . inTrans ac t ion {i t . d e l e t e ( " u s e r s " ,

" f i r s t _name = ? " , ar rayOf ( "Vasya"

}

Page 40: Новый язык программирования от  JetBrains

Функции высшего порядкаfun SQLi teDatabase . inTransact ion(

f u n c : SQLi teDatabase. ( ) - > U n i t ) { beg inTrans ac t ion( )

t r y {t h i s . f u n c ( )

se tTransac t ionSucc ess fu l ( )} f i n a l l y {

endTransac t ion( )}

}

db . inTrans ac t ion {d e l e t e ( " u s e r s " ,

" f i r s t _name = ? " , a r rayOf ( "Vasya" )}

Page 41: Новый язык программирования от  JetBrains

Функции высшего порядкаi n l i n e fun

SQLi teDatabase . inTransact ion( f u nc : SQLi teDatabase. ( ) - > U n i t ) {

beg inTransac t ion( )t r y {t h i s . f u n c ( )

se tTransac t ionSucc ess fu l ( )} f i n a l l y {endTransac t ion( )}}

db . i nTrans ac t i on {d e l e t e ( " u s e r s " , " f i r s t _name = ? " ,

a r rayOf ( "Vasya" )}

Page 42: Новый язык программирования от  JetBrains

Документация и полезные ссылки

Сайт и документация:h t t p s : / / k o t l i n l a n g . o r gОнлайн IDE:h t t p : / / t r y . k o t l i n l a n g . o r gПрезентация Джейка Уортона (Jake Wharton) о языке (англ.):Android Development with KotlinМотивации для использования и сравнение с другими языками под JVM (англ.):Using Project Kotlin for Android