Course Outline
Introduction
Kotlin Basics Refresher
Leveraging Advanced Functions in Kotlin
- Utilizing Nested Functions to Reuse Functionality in Kotlin
- Applying Infix Notation to Call Functions in Kotlin
- Defining Anonymous Functions in Kotlin
- Employing the Inline Modifier for Performance Optimization in Kotlin
- Managing Returns and Local Returns with Advanced Functions in Kotlin
- Implementing Tail Recursion for Optimization in Kotlin
- Using Operator Overloading in Kotlin
- Utilizing Lambdas with Receivers to Impose Constraints on DSLs in Kotlin
- Invoking Instances in Kotlin
- Applying Functional Constructs in Kotlin
- Function Composition
- Currying
- Additional Constructs
- Summary of Advanced Functional Features in Kotlin
Exploring Class Scenarios in Kotlin
- Implementing Fields in Kotlin
- Using the "lateinit" Modifier in Kotlin
- Understanding Nested and Inner Classes in Kotlin
- Defining "Static Methods" in Kotlin via Companion Objects
- Hiding Class Constructors in Kotlin
- Marking Classes as Sealed in Kotlin
- Utilizing Type Aliases in Kotlin
- Summary of Advanced Class Features in Kotlin
Implementing Delegation in Kotlin
- Understanding Member Delegation Concepts in Kotlin
- Delegating Member Functions to Another Class in Kotlin
- Delegating Properties in Kotlin for Efficient Code Reuse
- Utilizing Built-in Delegated Properties in Kotlin
- Delegating Local Properties in Kotlin for Code Reuse
- Implementing Extension Properties in Classes in Kotlin
- Summary of Various Delegation Aspects in Kotlin
Deep Dive into Generics in Kotlin
- Understanding Generic Constraints
- Exploring Variance and Invariance in Generics
- Using the "out" Modifier to Express Covariance in Kotlin Generics
- Expressing Contravariance in Kotlin
- Exploring Type Projections and Star Projections in Kotlin
- Summary of Advanced Generics in Kotlin
Metaprogramming in Kotlin
- Overview of Reflection
- Using Java Reflection with Kotlin via the Reflection API
- Utilizing Kotlin's Reflection API
- Handling Type Erasure in Kotlin
- Using Reified Generics in Kotlin
- Defining Custom Annotations in Kotlin
- Summary of Metaprogramming and Introspection Techniques in Kotlin
Asynchronous Programming in Kotlin
- Understanding the Challenges of Asynchronous Programming
- Implementing Asynchronous Programming and Coroutines in Kotlin
- Implementing Async and Await in Kotlin Using Coroutines
- Implementing Yield in Kotlin
- Understanding the Advantages of Coroutines Over Reactive Extensions
- Summary of Coroutines in Kotlin
Summary and Conclusion
Requirements
- Familiarity with the fundamentals of Kotlin.
Target Audience
- Developers seeking to deepen their understanding of Kotlin programming.
Testimonials (7)
Intensity of a course, coverage of topics. Complicated topics are explained on a good level, so even though there are some white spots left in of them (like DSL) -- it won't be hard to go on by myself as I already have a common understanding of basis and at least know how to form my questions to Google.
Alexey Baryshnev - C.T.Co SIA
Course - Advanced Kotlin Programming
A format - lot of new info, but it felt pretty understandable and comfortable to learn, most of it I managed to remember and use when necessary at the next topics.
Alina Karpovich - C.T.Co SIA
Course - Advanced Kotlin Programming
Trainer competence, wide subject knowledge. I have learned a lot new stuff, received valuable comments and answers to my questions.
Ilya Ginter - C.T.Co SIA
Course - Advanced Kotlin Programming
live communication and good answers to questions
Alexander Semyonov - C.T.Co SIA
Course - Advanced Kotlin Programming
Execute exercises in mode online, it is cool. Fast answer about additional questions
Oleg Sushik - C.T.Co SIA
Course - Advanced Kotlin Programming
Positive approach
Arseniy - C.T.Co SIA
Course - Advanced Kotlin Programming
I liked exercises and questions where we should think like a compiler. Sometimes it feels like you understand topic we are discussing and with exercise we could make sure not only that we feel that way but really understood. In case exercise was difficult for someone, solution was provided by clear steps what and why we do to make this working. Also by going further with these exercises it was really nice that we looked at previous ones understanding how we can improve something that was already done by one solution.