Share E-Book
Scan to open this page

Scan with your phone to open this page

Author: Aleksei Sedunov

Rating No ratings yet

The book ‘Kotlin In-Depth, Second Edition’ updates all the essential parts of Kotlin and incorporates modern principles, methodologies, and approaches for achieving efficient solutions. The book will guide you to successfully utilize Kotlin in developing JVM apps for desktop, mobile, web platforms and transferring existing Java codebases to Kotlin. The book begins with an introduction to the language and its environment, which will help you to grasp the fundamental concepts underlying Kotlin's design. The readers will learn the Kotlin tooling and the language's core syntax and structures. The book teaches Kotlin's multi-paradigm nature, which enables the creation of powerful abstractions by mixing parts of functional and object-oriented programming. This book discusses how to use standard Kotlin APIs like the standard library, reflection, and coroutine-based concurrency, as well as how to create your flexible APIs using domain-specific languages. The book demonstrates how to use Kotlin for more specific tasks such as testing, developing Android applications, developing Web applications, and developing microservices. After reading this book, you'll be prepared to dive deeper into the Kotlin ecosystem's more specialized areas, including Android applications, server-side development, native programming, and code sharing across different platforms.

AI Reading Assistant

Whole-book reading guide from stratified index samples; jump to passages in the text

AI guide
# Kotlin In-Depth: A Guide to a Multipurpose Programming Language ## 【One-Line Pitch】 A comprehensive, hands-on guide for Java developers and aspiring Kotlin programmers who want to master Kotlin's multi-paradigm design—from core syntax to coroutines, DSLs, and multiplatform development—with practical examples for Android, web, and server-side applications. ## 【Book Arc】 - **Opening (~0%–9%)**: Introduces Kotlin's design philosophy—safety, conciseness, and interoperability—alongside tooling setup (IntelliJ IDEA, Eclipse, Kotlin Playground) and the language's ecosystem. Establishes why Kotlin matters across JVM, Android, JavaScript, and native platforms. - **Early (~9%–25%)**: Covers fundamental syntax: variables, primitive types, numeric literals (including underscores and binary/hex notation), strings, functions with named/default arguments, vararg parameters, and the Nothing type. Builds the foundation for writing idiomatic Kotlin. - **Early-to-Middle (~25%–38%)**: Explores control flow (break/continue), classes and constructors (primary/secondary), properties, null-safety with smart casts, and object declarations. Introduces functional programming concepts—lambdas, higher-order functions, and functional types—with IDE tips for parameter inspection. - **Middle (~38%–47%)**: Delves into advanced functional patterns: non-local returns, anonymous functions, inline functions/properties, extension functions with multiple receivers, and enum classes with comparison operators and implicit methods. Highlights experimental features like inline classes and unsigned integers. - **Late (~47%–end)**: The excerpts suggest continued coverage of advanced topics including coroutine-based concurrency, reflection, domain-specific languages, testing, and platform-specific development (Android, web, microservices), though detailed content for these sections is not fully represented in the sample. ## 【Key Takeaways】 - **Kotlin prioritizes safety through nullability** (Early): The type system explicitly distinguishes nullable and non-nullable types, with smart casts automatically refining types after null checks—reducing entire categories of runtime errors common in Java. - **Functions are flexible and expressive** (Early): Named arguments, default values, and vararg parameters give callers clarity and reduce boilerplate, but mixing defaults with vararg requires careful placement—put vararg last and use named arguments when needed. - **The Nothing type enables elegant control flow** (Early): Since Nothing is a subtype of every type, it allows early returns in expression contexts (like the renamePackage example), making code more concise without sacrificing type safety. - **Classes balance simplicity with power** (Early): Primary constructors embedded in the class header simplify common cases, while secondary constructors and delegation handle complex initialization—with init blocks ensuring consistent setup across all construction paths. - **Functional programming is first-class** (Middle): Lambdas and higher-order functions enable powerful abstractions like the aggregate() pattern, but non-local returns require anonymous functions or inline functions to work around JVM limitations. - **Extension functions create domain-specific APIs** (Middle): By adding methods to existing classes—including multiple receivers in nested contexts—Kotlin enables flexible DSLs and cleaner code organization without modifying original classes. - **Enums are more capable than Java's** (Middle): Kotlin enums support comparison operators (based on ordinal), valueOf()/values() methods, and generic alternatives like enumValues()/enumValueOf(), making them more ergonomic for everyday use. - **Experimental features signal Kotlin's evolution** (Middle): Inline classes and unsigned integers (since 1.3) show the language's direction toward performance optimization and broader numeric support, though they require explicit opt-in and may change. ## 【Reading Tips】 - **Skim the tooling chapters** (Opening): If you're already comfortable with IntelliJ IDEA, the setup sections are straightforward—focus instead on the design principles and ecosystem overview to understand Kotlin's philosophy. - **Deep-read the function and class chapters** (Early): These form the backbone of idiomatic Kotlin. Pay special attention to vararg/default parameter interactions and secondary constructor delegation—these trip up many newcomers. - **Practice smart casts and null-safety** (Early): The smart cast examples (when expressions, &&/|| operators) are worth re-reading and experimenting with in the Kotlin Playground—they're the most impactful safety feature. - **Work through lambda and inline function examples** (Middle): The non-local return problem is subtle; trace through the forEach() example carefully and understand why anonymous functions solve it. This will save you hours of debugging later. - **Treat experimental features as optional** (Middle): Inline classes and unsigned integers are interesting but not essential for most readers—skim these sections and return when you need them for performance-critical code. ## 【Coverage Limits】 This guide is based on excerpts covering approximately the first half of the book (through ~47%). Detailed content on coroutines, reflection, DSLs, testing, Android development, web applications, and microservices—mentioned in the book's description—is not represented in the sampled material. ##
Page 12
h catalogue of books and videos available at https://github.com/bpbpublications. Check them out! Errata We take immense pride in our work at BPB Publications...
View in text
Excerpt 2
parameter is not the last one, values for parameters coming after it can only be passed with the named arguments notation. Similar to default values, it’s co...
View in text
Excerpt 3
without limitations since they can’t change the value after initialization. Mutable variables, however, may prevent smart casts when modified between the nul...
View in text
Excerpt 4
Y, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } private val weekDays = WeekDay.values()val WeekDay.nextDay get() = weekDays[(ordinal + 1) % weekD...
View in text
Excerpt 5
n(list.windowed(3) { it.sum() }) // [5, 14, 29, 50] // 1, 3, 9, 27, 81, 243 val seq = generateSequence(1) { if (it > 100) null else it*3 } println(se...
View in text
Excerpt 6
y using a slightly more elaborate syntax of type constraint. Suppose that we have a pair of interfaces: interface Named { val name: String } interface Identi...
View in text
Excerpt 7
e lateinit has a more concise syntax and better performance. An exception is a case of primitve types which are not supported by lateinit: import kotlin.prop...
View in text
Excerpt 8
threads while the calling thread itself is left unblocked. That’s why we had to insert sleep() into our launch() example as the main thread had little work t...
View in text
Tags
AI categories
Programming LanguagekotlinBackend
ISBN: 9391030637
Publisher: BPB Publications
Publish Year: 2022
Language: English
Pages: 767
File Format: PDF
File Size: 6.4 MB
Text Preview (First 20 pages)
Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

Generating text preview…