Introduction to Kotlin

This is a comprehensive course for developers switching from Java, C# or other similar languages to Kotlin. This course is planned to be delivered over 4 days, but it can be customized according to your company’s needs. Attendees will be spending the majority of their time solving real-life challenges and developing sample applications in the workshop.

 

What You’ll Learn

➜ Kotlin’s null safety and mutability guarantees

➜ Programming with the functional and object-oriented features of Kotlin

➜ Unit test and refactor Kotlin code via KotlinTest, Mockito and IntelliJ

➜ Advanced collection operations in Kotlin

➜ Create responsive mobile applications using Kotlin and Android Studio

➜ Write RESTful services in Kotlin via Spring Boot, MVC and WebFlux

Prerequisites

➜ Delegates must have experience in languages like Java, Groovy or Clojure.

➜ Knowledge of Functional Programming concepts is very helpful, although not required.

 

Course Outline

Introduction to Kotlin

  • Four coding paradigms within Java 9
  • Limits imposed by backwards compatability
  • The new consenses in language design
  • A brief history of the Kotlin language
  • Comparing Kotlin to Scala and Clojure
  • Comparing Kotlin to Swift and TypeScript 
 
  • Declarations and type inference
  • The Kotlin type system and conversions
  • Packages, access levels and default imports
  • Nullable types and operators for null safety
  • Keywords for selection and iteration
  • Options for declaring basic functions
  • Overloading, infix functions and ranges
Object Orientation
  • Decompiling Kotlin classes using ‘javap’
  • Understanding properties and backing fields
  • A detailed explanation of primary constructors
  • Adding extra fields and secondary constructors
  • Extra features automatically added to data classes
  • Overriding, abstract classes and interfaces
  • Using object expressions as event handlers
  • Object declarations and companion objects
Agile Development
  • Review of core principles of Agile development
  • Refactoring Kotlin code within IntelliJ
  • Performing TDD in Kotlin using KotlinTest
  • Using Mockito to separate types from dependencies
  • Options for BDD and Property Based Testing
Generics and Type Parameters
  • Revision of covariance and contravariance
  • Common issues with bounded wildcards in Java
  • How declaration site variance simplifies generics
  • Support for use-site variance (aka type projection)
  • Declaring single and multiple constraints on types
Working with Collections Part 1
  • Introducing the Kotlin collections library
  • Working with mutable and immutable collections
  • Support for destructuring types and collections
Functional Programming
  • Working with function references and code blocks
  • Declaring functions as parameters and return types
  • Using higher order functions for internal iteration
  • Creating your own versions of ‘filter’, ‘map’ etc…
  • Using higher order functions to prevent duplication
  • Understanding partial invocation and currying
  • Choosing between code blocks and local functions
  • Common misunderstandings regarding enclosure
Working with Collections Part 2
  • Basic coding using ‘filter’, ‘map’ and ‘forEach’
  • Testing against a predicate using ‘all’, ‘any’ etc…
  • Why ‘flatMap’ is such as valuable operation in FP
  • Distinguishing between ‘fold’, ‘foldRight’ and ‘reduce’
  • Converting between collection types within FP
Interoperability Between Kotlin and Java
  • General guidelines for mixed language codebases
  • Considerations when calling Java libraries from Kotlin
  • Obtaining and using java.lang.Class objects in Kotlin
  • Tips and idioms for calling Kotlin libraries from Java code
Creating Spring Microservices in Kotlin
  • Revision of the Spring Framework and RESTful architecture
  • Creating Spring Boot projects in Kotlin via the Spring Initializr
  • Declaring Spring MVC based RESTful services using annotations
  • Injecting dependencies and configuring exception handling
  • Creating reactive microservices using Spring WebFlux
  • Taking advantage of the Kotlin specific routing DSL
Creating Mobile Applications in Kotlin
  • Revision of the Android platform and Dalvik VM
  • Installing Android Studio and configuring emulators
  • Introducing the sample project for tracking expenses
  • Reverse engineering the sample activities and layouts
  • Performing dependency injection on Android with Dagger 2
  • Persisting application state using the Realm database