JHUG February Meetup – Kotlin Notes

print

Past Meetup

JHUG February Meetup – Kotlin / Istio Service Mesh

JHUG Meetup

February 2018

A short introduction

to the Kotlin language

for Java developers

 

 

Antonis Lilis

Mobile Engineer @

Some History

 

2011: JetBrains unveiled Project Kotlin, a new language for the JVM

2012: JetBrains open sourced the project under the Apache 2 license

2016: Kotlin v1.0 is released

2017: Google announced first-class support for Kotlin on Android

Kotlin is technically 7, but in reality 2 years old

 

 

 

 

 

 

Trivia: The name comes from a small island in the Baltic Sea, near St.Petersburg. The language team decided to name it after an island just like Java (though Java was perhaps named after the coffee)

The Kotlin Language

 

 

Statically Typed

Type validation at compile time

Supports Type Inference

Type automatically determined from the context

Both Object Oriented and Functional

First-class functions

You can store them in variables, pass them as parameters, or return them

from other functions

Was designed with Java Interoperability in mind

Constants and Variables

 

 

 

 

val (from value)

No

semicolon

here 😉

Immutable reference

var (from variable)

Mutable reference

Nullable Types

Defined Explicitly

Control Flow

 

 

Classic loops:

if

for

while / do-while

when

Replaces the switch operator

No breaks, no errors

Functions

 

Named arguments

Can be declared at the top level of a file (without belonging to a class)

Can be Nested

Can have a block or expression body

Functions

 

Default parameter values

Avoids method overloading and boilerplate code

 

 

 

 

 

 

 

 

 

 

 

Simple string Interpolation

Classes

 

 

 

 

 

 

"Any" is the

analogue of java

Object: a superclass

of all classes

 

 

 

 

data classes:

autogenerated

implementations of universal methods (equals, hashCode

etc)

 

Properties

 

 

first-class language feature

combination of the field

and its accessors

Modifiers

 

 

 

 

 

 

 

 

 

 

 

 

Access modifiers final (default)

open

abstract

 

 

Visibility modifiers public (default)

internal

protected

private

 

 

 

 

 

 

 

"Design and document for inheritance

or else prohibit it"

Joshua J. Bloch, Effective Java

 

 

 

 

ps. Lukas Lechner has written a series of articles on "How Effective Java influenced Kotlin" (http://lukle.at)

 

No static keyword

 

 

Top-level functions and properties

(e.g. for utility classes)

Companion objects The object keyword:

declaring a class and creating an instance

combined (Singleton)

Extensions

 

Enable adding methods and properties to other people's classes

Of Course without access to private or protected members of the class

Null Checks

 

 

Safe-call operator ?.

Elvis operator ?:

The let function

 

 

 

 

 

 

 

 

 

 

 

"I call it my billion-dollar mistake.

It was the invention of the null reference in 1965"

Tony Hoare

Not-null assertion operator !!

Safe Casting

 

 

Safe cast operator as?

Smart cast

combining type checks

and casts

Collections

 

 

Kotlin enhances the Java collection classes (List, Set, Map)

 

 

 

 

 

 

 

 

 

 

 

 

Chained

Calls

Delegation

 

Composition over Inheritance

design pattern

Native support for delegation

(implicit delegation)

Zero Boilerplate code

Supports both Class Delegation and

Delegated Properties

 

 

 

 

 

Class Car inherits from an interface Nameable

and delegates all of its public methods to a

delegate object defined with the by keyword

Lamdas and Higher Order Functions

Domain-specific language construction

 

Kotlin provides mechanisms for creating internal DSLs that use exactly the

same syntax as all language features and are fully statically typed

Coroutines

 

Introduced in Kotlin 1.1 (March 2017)

A way to write asynchronous code sequentially

Multithreading in a way that is easily debuggable and maintainable

Based on the idea of suspending function execution

More lightweight and efficient than threads

Source Code Layout

 

 

Packages (similar to that in Java)

Multiple classes can fit in the same file

You can choose any name for files (not restricted to class name)

The import keyword is not restricted to importing classes

Top-level functions and properties can be imported

Kotlin does not impose any restrictions on the layout of source files on disk

Good practice to follow Java's directory layout

Especially if mixed with java

Kotlin IDEs

 

 

You can write Kotlin next to Java in

your favorite IDE

Kotlin works with JDK 1.6+

IntelliJ IDEA (and Android Studio)

support Kotlin out of the Box

There is a plugin for Eclipse too

Hello World

 

 

Kotlin files have .kt extension

You can also try your code in

REPL (Read-Eval-Print-Loop)

Let's Mix with some Java

Java from Kotlin

 

 

You can call Java code from you Kotlin files transparently

Convert Java to Kotlin

Code size

 

According to Jetbrains converting a Java application to Kotlin is expected

to reduce the line count by 40%

 

 

More concise language (eg. Kotlin data classes can replace 50 line

classes with a single line)

The Kotlin standard library enhances existing Java classes with

extensions that trivialize common usage (eg. collections)

Kotlin allows you to extract more re-usable patterns than what Java

allows

Utility

 

Top-level computed property

String extension

Kotlin from Java

 

In most cases the

integration is Seamless

Some Kotlin features do

not exist in Java (e.g. top

level functions or

properties)

In such cases conventions

are used

In our case a static class is

generated for the top-level

declarations

Libraries & Resources

 

You can use Any Java Library since Java and Kotlin are 100% interoperable

Kotlin libraries: a nice curated list at https://kotlin.link

Kotlin popularity is growing and resources become more abundant

Kotlin also lives outside the JVM

 

Kotlin 1.1 (March 2017): officially

released the JavaScript target,

allowing you to compile Kotlin code

to JS and to run it in your browser

Kotlin 1.2 (November 2017): adding

the possibility to reuse code

between the JVM and JavaScript

Kotlin/Native v0.6 (Valentine's Day

release 2018): Better support for

native targets (e.g. iOS,

WebAssembly, Windows)

Any Disadvantages?

 

An app built with Kotlin will likely result in a larger file package size than one

built purely in Java

The build time for Kotlin is a little slower

Final Thoughts I am HERE!

[REF: Pinterest Engineering]

The learning curve

IMHO comparatively small

Not so popular yet

44th in TIOBE Index for

February but competed

with C for language of the

year 2017

Development Stability

Tools still in Beta

Static Analysis Tools

Reversibility

Once you Go Kotlin

IMHO Kotlin is here to stay

Thank you!

 

 

 

 

 

 

Questions?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://antonis.me/

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.