Kotlin Online Training Course Content
Introducing Kotlin on the JVM
- 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
- 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
- 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
- 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
- Introducing the Kotlin collections library
- Working with mutable and immutable collections
- Support for de structuring types and collections
- 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
- 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
- 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
- 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
- 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