IsThereKotlinAfterJava8
Download
Report
Transcript IsThereKotlinAfterJava8
Is there Kotlin after Java 8
Ivan Turčinović & Igor Buzatović
What is Kotlin?
Statically typed, JVM-targeted language
Design principles: Industrial use, tooling, safety
Compiles to JVM byte code and JavaScript
Runtime size 800K
2
General
General
No release date, no spec yet
Roadmap
M1 → M2 → … → Beta → Jetbrains project → V1.0
Latest milestone → M7
Some frameworks/libraries already appeared
Kara Web Framework – Statically typed HTML/CSS
Spek – Specification/test framework
Kannotator – Infer annotations from bytecode
KotlinPrimavera - Kotlin libraries to Spring projects
3
Current status, plans, release date
General
Advantages over Java 7 are overwhelming
Java 8 introduced
Lambdas
Null safety (“Optional” class)
Default methods
Streams API
New Date & Time API
4
Java strikes back with Java 8
But even with Java 8 Kotlin still...
Is more elegant, concise and safe
Has more cool stuff
5
General
Basic syntax and rules
Functions - definition in
package or in class
Immutable/mutable
variables
No „new” keyword
Type inference
No checked exceptions
No primitive types
No static members
6
More elegant?
Basic syntax and rules cont’d
Primary constructors
No fields, just properties
Bean style classes easy to declare
By default, all classes are final
7
More elegant?
More elegant?
Null safety
• Null reference – Billion dollar mistake
8
• Kotlin is designed in a way that aims to
eliminate NPE from our code
More elegant?
Java
Generics
Not co-variant by default, reason?
Wildcards, use-site variance
Co-variance price, producers
Contra-variance, consumers
Bloch: "PECS: Producer extend,
Consumer super“
Kotlin
Declaration-site variance
out / in generics modifiers
Supports use-site variance also
9
No wildcard syntax, out / in used
Java survey: 39% of wildcards usage can be replaced by declaration-site variance
Default arguments, named arguments
Default argument values can
be defined
Arguments with default
values are optional
No more need for function
overloading (almost)
Kotlin classes can have only
one constructor
Arguments can be called by
name
When passing arguments by
name ordering doesn’t
matter
10
More cool stuff
Ranges
Simpler “is it in range” check
Can be used for any type
that implements
Comparable
“both ends“ included
“..” operator is translated to
“rangeTo” function
“rangeTo” function is
implemented as extension
function on Comparable
Numerical ranges can be
iterated over
In both directions and in
arbitrary steps
11
More cool stuff
Pattern matching
Java’s instaceof not very practical
No !instanceof
Meet Kotlin’s "is“
"is" negation "!is“
Automatic type cast when “is”
evaluates true inside if / when
blocks
12
More cool stuff
More cool stuff
Data classes
Classes very easy to declare
Data annotation changes
behavior of hashCode,
equals, toString functions
Default implementation uses
all properties
javacro.User@41a7d9e7
1101519335
1926426205
false
Off course we can override
13
Output
More cool stuff
Data classes
Classes very easy to declare
Data annotation changes
behavior of hashCode,
equals, toString functions
Default implementation uses
all properties
User(firstName=John,lastName=Doe)
71819599
71819599
true
Off course we can override
14
Output
Operator overloading
Operators are translated to
corresponding functions
Operator set is fixed
Operator overloading is achieved by
overriding corresponding functions of
specific class
By adding extension functions we can
enable certain operator for classes that
don’t support it originally
On our own classes we can enable
certain operator by implementing
corresponding functions
15
More cool stuff
Extension functions
What to do if we want to add features
to existing classes
Java: extending or utility classes
Kotlin: add functions to existing
classes without changing their code
Example: implement BigDecimal +
operator
How does it work “behind the scene”?
16
More cool stuff
More cool stuff
Kotlin collections
Read-only traits on top, co-variant
Extended by mutable traits
Implemented by JDK classes (compile time modifications)
Read-only traits do not guarantee immutability
Top level package functions for instantiating collections:
Read-only: setOf, listOf, mapOf
Mutable: hashSetOff, arrayListOf, hashMapOf
17
More cool stuff
Type-safe Groovy-style builders
Tree-like syntax – better insight in what is being generated
Functions create, initialize and return builder specific objects
Better then xml: no scheme required, type safe, interoperable with other code
18
For generating tree-like structures (UI layouts, 3D scene graphs)
Type-safe Groovy-style builders
Objects initialized using
function literal argument
Extension function literal
allows referencing to object
enclosing element
Kara web framework using it
for HTML layouts, CSS
Android apps, XML layouts
19
More cool stuff
20
Thank You!