Functional Kotlin by Marcin Moskała

207 21 15MB

English

Report DMCA / Copyright

DOWNLOAD FILE

Functional Kotlin by Marcin Moskała

Table of contents :
Table of Contents
Introduction
Who is this book for?
What will be covered?
The Kotlin for Developers series
Code conventions
Acknowledgments
Introduction to functional programming with Kotlin
Why do we need to use functions as objects?
Function types
Defining function types
Using function types
Named parameters
Type aliases
A function type is an interface
Anonymous functions
Lambda expressions
Tricky braces
Parameters
Trailing lambdas
Result values
Lambda expression examples
An implicit name for a single parameter
Closures
Lambda expressions vs anonymous functions
Function references
Top-level functions references
Method references
Extension function references
Method references and generic types
Bounded function references
Constructor references
Bounded object declaration references
Function overloading and references
Property references
SAM Interface support in Kotlin
Support for Java SAM interfaces in Kotlin
Functional interfaces
Inline functions
Inline functions
Inline functions with functional parameters
Non-local return
Crossinline and noinline
Reified type parameters
Inline properties
Costs of the inline modifier
Using inline functions
Collection processing
forEach and onEach
filter
map
flatMap
fold
reduce
sum
withIndex and indexed variants
take, takeLast, drop, dropLast and subList
Getting elements at certain positions
Finding an element
Counting: count
any, all and none
partition
groupBy
Associating: associate, associateBy and associateWith
distinct and distinctBy
Sorting: sorted, sortedBy and sortedWith
Sorting mutable collections
Maximum and minimum
shuffled and random
zip and zipWithNext
Windowing
joinToString
Map, Set and String processing
Using them all together
Sequences
What is a sequence?
Order is important
Sequences do the minimum number of operations
Sequences can be infinite
Sequences do not create collections at every processing step
When aren't sequences faster?
What about Java streams?
Kotlin Sequence debugging
Summary
Type Safe DSL Builders
A function type with a receiver
Simple DSL builders
Using apply
Multi-level DSLs
DslMarker
A more complex example
When should we use DSLs?
Summary
Scope functions
let
also
takeIf and takeUnless
apply
The dangers of careless receiver overloading
with
run
Using scope functions
Context receivers
Extension function problems
Introducing context receivers
Use cases
Classes with context receivers
Concerns
Summary
A birds-eye view of Arrow
Functions and Arrow Core
Testing higher-order functions
Error Handling
Data Immutability with Arrow Optics

Polecaj historie