Introduction
- Who is this book for?
- What will be covered?
- The Kotlin for Developers series
- My story
- Conventions
- Code conventions
- Exercises and solutions
- Acknowledgments
What is Kotlin?
- Kotlin platforms
- The Kotlin IDE
- Where do we use Kotlin?
Your first program in Kotlin
- Live templates
- What is under the hood on JVM?
- Packages and importing
- Summary
- Exercise: Your first program
Variables
Basic types, their literals and operations
- Numbers
- Booleans
- Characters
- Strings
- Summary
- Exercise: Basic values operations
Conditional statements
- if-statement
- when-statement
- when-statement with a value
- is check
- Explicit casting
- Smart-casting
- While and do-while statements
- Summary
- Exercise: Using when
- Exercise: Pretty time display
Functions
- Single-expression functions
- Functions on all levels
- Parameters and arguments
Unitreturn type- Vararg parameters
- Named parameter syntax and default arguments
- Function overloading
- Infix syntax
- Function formatting
- Summary
- Exercise: Person details display
The power of the for-loop
- Ranges
- Break and continue
- Use cases
- Summary
- Exercise: Range Operations
Nullability
- Safe calls
- Not-null assertion
- Smart-casting
- The Elvis operator
- Extensions on nullable types
nullis our friend- lateinit
- Summary
- Exercise: User Information Processor
Classes
- Member functions
- Properties
- Constructors
- Classes representing data in Kotlin and Java
- Inner classes
- Summary
- Exercise: Implementing the Product class
Inheritance
- Overriding elements
- Parents with non-empty constructors
- Super call
- Abstract class
- Interfaces
- Visibility
Any- Summary
- Exercise: GUI View Hierarchy Simulation
Data classes
- Transforming to a string
- Objects equality
- Hash code
- Copying objects
- Destructuring
- When and how should we use destructuring?
- Data class limitations
- Prefer data classes instead of tuples
- Summary
- Exercise: Data class practice
Objects
- Object expressions
- Object declaration
- Companion objects
- Data object declarations
- Constant values
- Summary
- Exercise: Pizza factory
Exceptions
- Throwing exceptions
- Defining exceptions
- Catching exceptions
- A try-catch block used as an expression
- The finally block
- Important exceptions
- The hierarchy of exceptions
- Summary
- Exercise: Catching exceptions
Enum classes
- Data in enum values
- Enum classes with custom methods
- Summary
- Exercise: Days of the week enum
Sealed classes and interfaces
- Sealed classes and
whenexpressions - Sealed vs enum
- Use cases
- Summary
Annotation classes
- Meta-annotations
- Annotating the primary constructor
- List literals
- Summary
Extensions
- Extension functions under the hood
- Extension properties
- Extensions vs members
- Extension functions on object declarations
- Member extension functions
- Use cases
- Summary
- Exercise: Conversion and measurement unit creation
Collections
- The hierarchy of interfaces
- Mutable vs read-only types
- Creating collections
- Lists
- Sets
- Maps
- Using arrays in practice
- Summary
- Exercise: Inventory management
Operator overloading
- An example of operator overloading
- Arithmetic operators
- The
inoperator - The iterator operator
- The equality and inequality operators
- Comparison operators
- The indexed access operator
- Augmented assignments
- Unary prefix operators
- Increment and decrement
- The invoke operator
- Precedence
- Summary
- Exercise: Money operations
The beauty of Kotlin’s type system
- What is a type?
- Why do we have types?
- The relation between classes and types
- Class vs type in practice
- The relationship between types
- The subtype of all the types: Nothing
- The result type from return and throw
- When is some code not reachable?
- The type of null
- Summary
- Exercise: The closest supertype of types
Generics
- Generic functions
- Generic classes
- Generic classes and nullability
- Generic interfaces
- Type parameters and inheritance
- Type erasure
- Generic constraints
- Star projection
- Underscore operator for type arguments
- Summary
- Exercise: Stock
Final words
- Final Project: Workout manager
