<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Concepts on Advanced Beginner</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/</link><description>Recent content in Concepts on Advanced Beginner</description><generator>Hugo</generator><language>en-US</language><managingEditor>d8lzz1gpw@mozmail.com (kimbenji)</managingEditor><webMaster>d8lzz1gpw@mozmail.com (kimbenji)</webMaster><lastBuildDate>Tue, 19 May 2026 18:30:17 +0900</lastBuildDate><atom:link href="https://advanced-beginner.github.io/en/docs/kotlin/concepts/index.xml" rel="self" type="application/rss+xml"/><item><title>Basic Syntax</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/basics/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/basics/</guid><description>&lt;h2 id="overall-analogy-sheet-music-and-performance"&gt;Overall Analogy: Sheet Music and Performance&lt;a class="anchor" href="#overall-analogy-sheet-music-and-performance"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kotlin&amp;rsquo;s basic syntax is easier to understand if you compare it to &lt;strong&gt;sheet music and performance&lt;/strong&gt;. Sheet music has rules, but good sheet music boldly omits unnecessary symbols. Kotlin is the same: it omits semicolons, returns results directly with a single expression, and brings the intent of the code to the forefront.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Sheet Music Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Concept&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Opening symbol of sheet music&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;package&lt;/code&gt; declaration&lt;/td&gt;
 &lt;td&gt;Defines the namespace the file belongs to&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Instrument arrangement chart&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;import&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Brings in external symbols to be used&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Direction to start performance&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;fun main&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Program entry point&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Omitted bar lines&lt;/td&gt;
 &lt;td&gt;Omitted semicolons&lt;/td&gt;
 &lt;td&gt;A line break means end of statement&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Musical expression (a melody in a single note)&lt;/td&gt;
 &lt;td&gt;Expression body&lt;/td&gt;
 &lt;td&gt;Return a result with a single expression&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Target Audience&lt;/strong&gt;: Learners who know basic programming concepts (variables, functions)
&lt;strong&gt;Prerequisites&lt;/strong&gt;: Basic understanding of variables and functions
&lt;strong&gt;Time Required&lt;/strong&gt;: About 20 minutes
&lt;strong&gt;After Reading&lt;/strong&gt;: You will understand the structure of Kotlin source files, write code without semicolons, and start programs with &lt;code&gt;fun main&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Variables and Types</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/variables-types/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/variables-types/</guid><description>&lt;h2 id="overall-analogy-boxes-and-labels"&gt;Overall Analogy: Boxes and Labels&lt;a class="anchor" href="#overall-analogy-boxes-and-labels"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kotlin variables and types are easy to understand by analogy to &lt;strong&gt;boxes and labels&lt;/strong&gt;. A box holds items (values), and the label (type) tells you what kind of item it can hold. &lt;code&gt;val&lt;/code&gt; is a locked box that can&amp;rsquo;t be replaced once filled; &lt;code&gt;var&lt;/code&gt; is a regular box whose contents can be swapped.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Concept&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Locked box&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;val&lt;/code&gt; (immutable)&lt;/td&gt;
 &lt;td&gt;Cannot be replaced once filled&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Regular box&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;var&lt;/code&gt; (mutable)&lt;/td&gt;
 &lt;td&gt;Contents can be replaced any time&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Box label&lt;/td&gt;
 &lt;td&gt;Type declaration&lt;/td&gt;
 &lt;td&gt;Defines the kind of value it can hold&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Auto-labeling machine&lt;/td&gt;
 &lt;td&gt;Type inference&lt;/td&gt;
 &lt;td&gt;Compiler decides the type automatically&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Viewing window&lt;/td&gt;
 &lt;td&gt;String template&lt;/td&gt;
 &lt;td&gt;Insert a value directly into a string&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Target Audience&lt;/strong&gt;: Learners who have read &lt;a href="../basics/"&gt;Basic Syntax&lt;/a&gt;
&lt;strong&gt;Prerequisites&lt;/strong&gt;: Kotlin basic syntax (packages, entry point, expressions)
&lt;strong&gt;Estimated Time&lt;/strong&gt;: About 25 minutes
&lt;strong&gt;What You&amp;rsquo;ll Learn&lt;/strong&gt;: You&amp;rsquo;ll choose between &lt;code&gt;val&lt;/code&gt; and &lt;code&gt;var&lt;/code&gt; correctly, use basic types, and print values with string templates.&lt;/p&gt;</description></item><item><title>Functions</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/functions/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/functions/</guid><description>&lt;h2 id="overall-analogy-recipes-and-cooking"&gt;Overall Analogy: Recipes and Cooking&lt;a class="anchor" href="#overall-analogy-recipes-and-cooking"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kotlin functions are easy to understand by analogy to &lt;strong&gt;recipes and cooking&lt;/strong&gt;. Like a recipe, a function takes ingredients (parameters) and produces a result (return value). When ingredients have default values, you don&amp;rsquo;t need to list them all every time. You can even pass a recipe as an ingredient — that&amp;rsquo;s exactly what lambdas and higher-order functions are.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Concept&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Recipe&lt;/td&gt;
 &lt;td&gt;Function (&lt;code&gt;fun&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;A unit that takes input and produces output&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Default ingredient&lt;/td&gt;
 &lt;td&gt;Default argument&lt;/td&gt;
 &lt;td&gt;Use the default value when an argument is omitted&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;Sugar first&amp;rdquo; instruction&lt;/td&gt;
 &lt;td&gt;Named argument&lt;/td&gt;
 &lt;td&gt;Specify the argument name to change the order&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;As much as you want&amp;rdquo; ingredient&lt;/td&gt;
 &lt;td&gt;vararg&lt;/td&gt;
 &lt;td&gt;Variable number of arguments&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Recipe as an ingredient&lt;/td&gt;
 &lt;td&gt;Lambda / higher-order function&lt;/td&gt;
 &lt;td&gt;Pass a function as a value&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Target Audience&lt;/strong&gt;: Learners who have read &lt;a href="../variables-types/"&gt;Variables and Types&lt;/a&gt;
&lt;strong&gt;Prerequisites&lt;/strong&gt;: Kotlin val/var, basic types
&lt;strong&gt;Estimated Time&lt;/strong&gt;: About 30 minutes
&lt;strong&gt;What You&amp;rsquo;ll Learn&lt;/strong&gt;: You&amp;rsquo;ll be able to declare functions in various forms and create lambdas to pass to higher-order functions.&lt;/p&gt;</description></item><item><title>Null Safety</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/null-safety/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/null-safety/</guid><description>&lt;h2 id="overall-analogy-receiving-a-parcel-and-handling-absences"&gt;Overall Analogy: Receiving a Parcel and Handling Absences&lt;a class="anchor" href="#overall-analogy-receiving-a-parcel-and-handling-absences"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kotlin&amp;rsquo;s Null Safety is easy to understand by analogy to &lt;strong&gt;receiving a parcel and handling absences&lt;/strong&gt;. Inside the box, the item may or may not be present. Kotlin marks the possibility of &amp;ldquo;the item might be missing&amp;rdquo; in the type system. It forces you to handle the missing case safely before trying to take the item out.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Concept&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Box that may or may not have an item&lt;/td&gt;
 &lt;td&gt;Nullable type (&lt;code&gt;T?&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;Marks possible null in the type&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Check before opening the box&lt;/td&gt;
 &lt;td&gt;Safe call (&lt;code&gt;?.&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;Returns null if null, otherwise proceeds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;If none, use this instead&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;Elvis operator (&lt;code&gt;?:&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;Use default value when null&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Forcing the box open&lt;/td&gt;
 &lt;td&gt;Non-null assertion (&lt;code&gt;!!&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;Throws NullPointerException on null&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Checking if the box is the right kind&lt;/td&gt;
 &lt;td&gt;Safe casting (&lt;code&gt;as?&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;Returns null on conversion failure&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Target Audience&lt;/strong&gt;: Learners who have read &lt;a href="../functions/"&gt;Functions&lt;/a&gt;
&lt;strong&gt;Prerequisites&lt;/strong&gt;: Kotlin basic types, function declarations
&lt;strong&gt;Estimated Time&lt;/strong&gt;: About 25 minutes
&lt;strong&gt;What You&amp;rsquo;ll Learn&lt;/strong&gt;: You&amp;rsquo;ll handle nullable types correctly, use &lt;code&gt;?.&lt;/code&gt;, &lt;code&gt;?:&lt;/code&gt;, &lt;code&gt;!!&lt;/code&gt; in the right contexts, and safely interoperate with Java APIs.&lt;/p&gt;</description></item><item><title>Classes and Objects</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/classes-objects/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/classes-objects/</guid><description>&lt;h2 id="overall-analogy-blueprints-molds-and-products"&gt;Overall Analogy: Blueprints, Molds, and Products&lt;a class="anchor" href="#overall-analogy-blueprints-molds-and-products"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kotlin classes are easier to understand if you compare them to &lt;strong&gt;blueprints, molds, and products&lt;/strong&gt;. A &lt;code&gt;class&lt;/code&gt; is a blueprint, and a constructor is a mold. Without a &lt;code&gt;new&lt;/code&gt; keyword, calling the mold directly creates a product (instance). &lt;code&gt;object&lt;/code&gt; is a special product that exists only once, and &lt;code&gt;companion object&lt;/code&gt; is a shared toolbox attached to the mold.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Concept&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Blueprint&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;class&lt;/code&gt; declaration&lt;/td&gt;
 &lt;td&gt;Defines the structure and behavior of instances&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Mold&lt;/td&gt;
 &lt;td&gt;Constructor (primary/secondary)&lt;/td&gt;
 &lt;td&gt;Defines how to create instances&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Product&lt;/td&gt;
 &lt;td&gt;Instance&lt;/td&gt;
 &lt;td&gt;A concrete instance of the class&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Special limited edition (only one)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;object&lt;/code&gt; declaration&lt;/td&gt;
 &lt;td&gt;Singleton instance&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Shared toolbox next to the mold&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;companion object&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Class-level functions and constants&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Access level&lt;/td&gt;
 &lt;td&gt;Visibility modifier&lt;/td&gt;
 &lt;td&gt;Controls who can use it from where&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Target Audience&lt;/strong&gt;: Learners who have read &lt;a href="../null-safety/"&gt;Null Safety&lt;/a&gt;
&lt;strong&gt;Prerequisites&lt;/strong&gt;: Kotlin basic syntax, functions, null safety
&lt;strong&gt;Time Required&lt;/strong&gt;: About 30 minutes
&lt;strong&gt;After Reading&lt;/strong&gt;: You will be able to define Kotlin classes, use constructors and properties, and appropriately apply singleton patterns and companion objects.&lt;/p&gt;</description></item><item><title>Data/Sealed Class</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/data-sealed-classes/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/data-sealed-classes/</guid><description>&lt;h2 id="overall-analogy-stamped-documents-and-a-fixed-menu"&gt;Overall Analogy: Stamped Documents and a Fixed Menu&lt;a class="anchor" href="#overall-analogy-stamped-documents-and-a-fixed-menu"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A &lt;code&gt;data class&lt;/code&gt; is like a &lt;strong&gt;stamped official document&lt;/strong&gt;, and a &lt;code&gt;sealed class&lt;/code&gt; is like a &lt;strong&gt;menu with fixed items&lt;/strong&gt;. An official document is treated as identical when its contents match (equals), and it has a hash code attached for quick classification (hashCode). A fixed menu only allows registered items to be ordered, so the compiler verifies that &amp;ldquo;all cases have been handled&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Collections</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/collections/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/collections/</guid><description>&lt;h2 id="overall-analogy-warehouse-list-and-map"&gt;Overall Analogy: Warehouse, List, and Map&lt;a class="anchor" href="#overall-analogy-warehouse-list-and-map"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Kotlin collections are easier to understand if you compare them to a &lt;strong&gt;warehouse, a list, and a map&lt;/strong&gt;. &lt;code&gt;List&lt;/code&gt; is an ordered list (a numbered waiting line), &lt;code&gt;Set&lt;/code&gt; is a warehouse without duplicates (a unique guest list), and &lt;code&gt;Map&lt;/code&gt; is a labeled storage box (key-to-value map). Read-only (immutable) warehouses can only be browsed, while mutable warehouses allow items to be added and removed.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Concept&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Numbered waiting line&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;List&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Ordered, duplicates allowed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Unique guest list&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Set&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Unordered, no duplicates&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Labeled storage box&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Map&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Stores key-value pairs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Browse-only warehouse&lt;/td&gt;
 &lt;td&gt;read-only collection&lt;/td&gt;
 &lt;td&gt;Cannot be modified, default choice&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Warehouse for adding/removing items&lt;/td&gt;
 &lt;td&gt;mutable collection&lt;/td&gt;
 &lt;td&gt;Can be modified&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Cook when an order comes in&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Sequence&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Lazy evaluation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Target Audience&lt;/strong&gt;: Learners who have read &lt;a href="../data-sealed-classes/"&gt;Data/Sealed Class&lt;/a&gt;
&lt;strong&gt;Prerequisites&lt;/strong&gt;: Kotlin basic types, lambdas, and higher-order functions
&lt;strong&gt;Time Required&lt;/strong&gt;: About 30 minutes
&lt;strong&gt;After Reading&lt;/strong&gt;: You will be able to create and transform Kotlin collections, use core operations like map/filter/fold, and efficiently process large data with Sequence.&lt;/p&gt;</description></item><item><title>Extension Functions</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/extension-functions/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/extension-functions/</guid><description>&lt;h2 id="overall-analogy-adding-an-elevator-to-an-existing-building"&gt;Overall Analogy: Adding an Elevator to an Existing Building&lt;a class="anchor" href="#overall-analogy-adding-an-elevator-to-an-existing-building"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Extension functions are easy to understand by analogy with &lt;strong&gt;remodeling construction&lt;/strong&gt;. Without changing the structure of the existing building (the class), you can attach an elevator (new functionality) from the outside.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Remodeling Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Concept&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Existing building&lt;/td&gt;
 &lt;td&gt;Receiver type (&lt;code&gt;String&lt;/code&gt;, &lt;code&gt;List&lt;/code&gt;, etc.)&lt;/td&gt;
 &lt;td&gt;Target to add functionality to&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Elevator design&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;fun Type.method()&lt;/code&gt; definition&lt;/td&gt;
 &lt;td&gt;Extension function declaration&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Inside the elevator&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;this&lt;/code&gt; (receiver object)&lt;/td&gt;
 &lt;td&gt;Access members of the existing type&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;External contractor&lt;/td&gt;
 &lt;td&gt;File/module where the extension is defined&lt;/td&gt;
 &lt;td&gt;Add functionality without ownership&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Building blueprint&lt;/td&gt;
 &lt;td&gt;Original class&lt;/td&gt;
 &lt;td&gt;Cannot be modified, only viewed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Just as you can add functionality from the outside without changing the existing building blueprint, extension functions &lt;strong&gt;add features to a type without requiring source code access&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Scope Functions</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/scope-functions/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/scope-functions/</guid><description>&lt;h2 id="overall-analogy-how-a-kitchen-handles-ingredients"&gt;Overall Analogy: How a Kitchen Handles Ingredients&lt;a class="anchor" href="#overall-analogy-how-a-kitchen-handles-ingredients"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Scope functions are easy to understand by analogy to &lt;strong&gt;cooking actions in a kitchen&lt;/strong&gt;. The same ingredient (object) is handled in different ways depending on the goal.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Kitchen Analogy&lt;/th&gt;
 &lt;th&gt;Scope Function&lt;/th&gt;
 &lt;th&gt;Context&lt;/th&gt;
 &lt;th&gt;Return Value&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Pick up an ingredient and return a result&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;let&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;it&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Lambda result&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Do several things in the pot, then return a result&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;run&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;this&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Lambda result&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Place on the counter and do several things&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;with&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;this&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Lambda result&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Set up the ingredient (configure) and keep it&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;apply&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;this&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Receiver object&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Use the ingredient, do something extra, and keep it&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;also&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;it&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Receiver object&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;All five provide ways to &lt;strong&gt;work with an object inside a lambda block&lt;/strong&gt;, but differ in how the context object is referenced (it vs this) and in the return value.&lt;/p&gt;</description></item><item><title>Generics and Variance</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/generics-variance/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/generics-variance/</guid><description>&lt;h2 id="overall-analogy-dedicated-boxes-and-sorting-rules"&gt;Overall Analogy: Dedicated Boxes and Sorting Rules&lt;a class="anchor" href="#overall-analogy-dedicated-boxes-and-sorting-rules"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Generics are easy to understand by analogy to &lt;strong&gt;dedicated boxes by purpose&lt;/strong&gt;.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Box Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Concept&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Fruit-only box&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Box&amp;lt;Fruit&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Container holding only a specific type&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;Apples are OK in the fruit box&amp;rdquo; rule&lt;/td&gt;
 &lt;td&gt;Covariance (&lt;code&gt;out&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;Allows substitution with a subtype&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;Must accept any fruit&amp;rdquo; rule&lt;/td&gt;
 &lt;td&gt;Contravariance (&lt;code&gt;in&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;Allows substitution with a supertype&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;Any fruit is fine&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;Star projection (&lt;code&gt;*&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;Type unspecified, read-only&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;At least it must be fruit&amp;rdquo; rule&lt;/td&gt;
 &lt;td&gt;Type bound (&lt;code&gt;&amp;lt;T : Fruit&amp;gt;&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;Restricts the allowed type range&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Target Audience&lt;/strong&gt;: Developers familiar with Kotlin basic syntax
&lt;strong&gt;Prerequisites&lt;/strong&gt;: Classes, interfaces, basic inheritance
&lt;strong&gt;Estimated Time&lt;/strong&gt;: About 35 minutes
&lt;strong&gt;What You&amp;rsquo;ll Learn&lt;/strong&gt;: You&amp;rsquo;ll be able to write generic classes and functions yourself, and understand &lt;code&gt;in&lt;/code&gt;/&lt;code&gt;out&lt;/code&gt; variance to use collection APIs correctly.&lt;/p&gt;</description></item><item><title>Delegation</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/delegation/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/delegation/</guid><description>&lt;h2 id="overall-analogy-secretary-and-a-team-of-experts"&gt;Overall Analogy: Secretary and a Team of Experts&lt;a class="anchor" href="#overall-analogy-secretary-and-a-team-of-experts"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Delegation is easier to understand if you compare it to &lt;strong&gt;a boss delegating work to a secretary&lt;/strong&gt;.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Workplace Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Concept&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Boss&lt;/td&gt;
 &lt;td&gt;Delegating class&lt;/td&gt;
 &lt;td&gt;Implements an interface but delegates the actual work&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Secretary&lt;/td&gt;
 &lt;td&gt;Delegate object&lt;/td&gt;
 &lt;td&gt;Performs the actual work&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;Ask the secretary&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;by&lt;/code&gt; keyword&lt;/td&gt;
 &lt;td&gt;Compiler auto-generates the delegation code&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Tasks the boss handles directly&lt;/td&gt;
 &lt;td&gt;Override&lt;/td&gt;
 &lt;td&gt;Process only some parts of the delegation directly&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Expert called only when needed&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;by lazy&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Initialize only on first use&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Change notification service&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Delegates.observable&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Tracks property changes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Target Audience&lt;/strong&gt;: Developers who understand Kotlin basic classes/interfaces
&lt;strong&gt;Prerequisites&lt;/strong&gt;: Interfaces, properties, basic generics
&lt;strong&gt;Time Required&lt;/strong&gt;: About 30 minutes
&lt;strong&gt;After Reading&lt;/strong&gt;: You will be able to freely use &lt;code&gt;by lazy&lt;/code&gt;, &lt;code&gt;Delegates.observable&lt;/code&gt;, Map delegation, and write your own Delegates.&lt;/p&gt;</description></item><item><title>Inline / Reified</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/inline-reified/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/inline-reified/</guid><description>&lt;h2 id="overall-analogy-copying-the-recipe-vs-ordering-from-the-restaurant"&gt;Overall Analogy: Copying the Recipe vs Ordering from the Restaurant&lt;a class="anchor" href="#overall-analogy-copying-the-recipe-vs-ordering-from-the-restaurant"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;inline&lt;/code&gt; functions are easy to understand by analogy to &lt;strong&gt;copying a recipe directly&lt;/strong&gt;.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Concept&lt;/th&gt;
 &lt;th&gt;Effect&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Copying the recipe from the cookbook&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;inline&lt;/code&gt; function&lt;/td&gt;
 &lt;td&gt;Insert the code with no call overhead&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ordering from the restaurant each time&lt;/td&gt;
 &lt;td&gt;Regular function call&lt;/td&gt;
 &lt;td&gt;Call overhead is incurred&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ingredient list (type) copied as-is&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;reified T&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Type information preserved at runtime&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;Copy everything except this ingredient&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;noinline&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Exclude a specific lambda from inlining&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;OK to pass it to another chef&amp;rdquo;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;crossinline&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Allow the lambda to be called from another scope&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Target Audience&lt;/strong&gt;: Kotlin developers who understand generics and lambdas
&lt;strong&gt;Prerequisites&lt;/strong&gt;: Generics, lambdas, generics and variance
&lt;strong&gt;Estimated Time&lt;/strong&gt;: About 30 minutes
&lt;strong&gt;What You&amp;rsquo;ll Learn&lt;/strong&gt;: You&amp;rsquo;ll be able to use &lt;code&gt;inline&lt;/code&gt;/&lt;code&gt;reified&lt;/code&gt; appropriately to write type-safe utility functions.&lt;/p&gt;</description></item><item><title>Coroutines Basics</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/coroutines-basics/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/coroutines-basics/</guid><description>&lt;h2 id="overall-analogy-the-cafe-cashier-and-order-numbers"&gt;Overall Analogy: The Cafe Cashier and Order Numbers&lt;a class="anchor" href="#overall-analogy-the-cafe-cashier-and-order-numbers"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This can be likened to a cafe employee who takes a drink order: instead of leaving the register idle until the drink is finished, the cashier hands out an order number and serves the next customer.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Cafe Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Coroutine&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Request to make a drink&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;launch { }&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Start an asynchronous task (no result needed)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Pick up the drink once ready&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;async { }.await()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Asynchronous task + receive result&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;The cashier (pause/resume)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;suspend&lt;/code&gt; function&lt;/td&gt;
 &lt;td&gt;Waits without occupying a thread&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Making area&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Dispatcher&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Thread pool that processes tasks&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Cafe manager&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;CoroutineScope&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Manages the lifecycle of all coroutines&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Just as a single cashier can handle multiple orders at once, coroutines efficiently process many asynchronous tasks with few threads.&lt;/p&gt;</description></item><item><title>Flow and Asynchronous Streams</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/flow-async-streams/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/flow-async-streams/</guid><description>&lt;h2 id="overall-analogy-water-pipes-and-faucets"&gt;Overall Analogy: Water Pipes and Faucets&lt;a class="anchor" href="#overall-analogy-water-pipes-and-faucets"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Flow&lt;/code&gt; can be compared to a water pipe. Water doesn&amp;rsquo;t flow through the pipe (Flow) until you turn on the faucet (&lt;code&gt;collect&lt;/code&gt;); once you turn it on, data flows out one piece at a time.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Plumbing Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Flow&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Water pipe&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Flow&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Defines the data stream&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Turning on the faucet&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;collect { }&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Starts collection (Cold flow)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Filter / purifier&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;filter&lt;/code&gt;, &lt;code&gt;map&lt;/code&gt;, &lt;code&gt;transform&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Transforms / filters data&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Reservoir (always latest level)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;StateFlow&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Always holds the latest value (Hot)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Broadcast speaker&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SharedFlow&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Delivers to multiple subscribers simultaneously (Hot)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Anti-clogging valve&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;buffer&lt;/code&gt;, &lt;code&gt;conflate&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Controls backpressure&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Target Audience&lt;/strong&gt;: Developers who understand coroutine basics (launch/async/suspend)
&lt;strong&gt;Prerequisites&lt;/strong&gt;: Completion of &lt;a href="../coroutines-basics/"&gt;Coroutine Basics&lt;/a&gt;
&lt;strong&gt;Estimated Time&lt;/strong&gt;: About 40–50 minutes
&lt;strong&gt;What You&amp;rsquo;ll Learn&lt;/strong&gt;: You&amp;rsquo;ll be able to create and collect Flows, combine operators, and use StateFlow/SharedFlow on Android or backend systems.&lt;/p&gt;</description></item><item><title>Coroutines Advanced</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/coroutines-advanced/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/coroutines-advanced/</guid><description>&lt;h2 id="overall-analogy-airline-flight-operations"&gt;Overall Analogy: Airline Flight Operations&lt;a class="anchor" href="#overall-analogy-airline-flight-operations"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In an airline flight operations system, a single flight delay can affect the entire schedule. However, by managing each route independently like a &lt;code&gt;SupervisorJob&lt;/code&gt;, a cancellation of one flight does not affect the others.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Airline Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Coroutine&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Air traffic control data&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;CoroutineContext&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bundle of coroutine execution info&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Flight identifier&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;CoroutineName&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Naming a coroutine&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Independent schedule per route&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SupervisorJob&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Failure of a child does not affect siblings&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Boarding gate channel&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Channel&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Safe data delivery between coroutines&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Process the first flight to arrive&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;select { }&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Process whichever channel arrives first&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Target Audience&lt;/strong&gt;: Developers who understand coroutine basics and Flow
&lt;strong&gt;Prerequisites&lt;/strong&gt;: &lt;a href="../coroutines-basics/"&gt;Coroutines Basics&lt;/a&gt;, &lt;a href="../flow-async-streams/"&gt;Flow and Async Streams&lt;/a&gt;
&lt;strong&gt;Time Required&lt;/strong&gt;: About 45-55 minutes
&lt;strong&gt;After Reading&lt;/strong&gt;: You will be able to compose CoroutineContext yourself, control exception propagation structures, and design complex asynchronous communication with Channel and select.&lt;/p&gt;</description></item><item><title>DSL Builders</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/dsl-builders/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/dsl-builders/</guid><description>&lt;h2 id="overall-analogy-a-lego-assembly-manual"&gt;Overall Analogy: A LEGO Assembly Manual&lt;a class="anchor" href="#overall-analogy-a-lego-assembly-manual"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A LEGO assembly manual only lets you attach blocks within specific rules. When assembling a castle set, only castle blocks fit; for a spaceship set, only spaceship blocks fit. &lt;code&gt;@DslMarker&lt;/code&gt; is exactly this &amp;ldquo;set distinction rule&amp;rdquo;.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;LEGO Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin DSL&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Assembly manual block&lt;/td&gt;
 &lt;td&gt;Lambda with receiver&lt;/td&gt;
 &lt;td&gt;Access the receiver&amp;rsquo;s members inside the block&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Set distinction sticker&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;@DslMarker&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Prevents mixing different DSL contexts&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Block connection point&lt;/td&gt;
 &lt;td&gt;Builder function&lt;/td&gt;
 &lt;td&gt;A function in a parent DSL that starts a child DSL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Completed LEGO model&lt;/td&gt;
 &lt;td&gt;Builder result object&lt;/td&gt;
 &lt;td&gt;Immutable data structure or configuration object&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Target Audience&lt;/strong&gt;: Intermediate or higher developers who understand Kotlin lambdas, extension functions, and scope functions
&lt;strong&gt;Prerequisites&lt;/strong&gt;: Extension functions (&lt;code&gt;fun Type.method()&lt;/code&gt;), lambdas, higher-order functions
&lt;strong&gt;Time Required&lt;/strong&gt;: About 30-40 minutes
&lt;strong&gt;After Reading&lt;/strong&gt;: You will be able to design type-safe builders yourself and prevent DSL misuse at compile time with &lt;code&gt;@DslMarker&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Multiplatform Overview</title><link>https://advanced-beginner.github.io/en/docs/kotlin/concepts/multiplatform-overview/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/en/docs/kotlin/concepts/multiplatform-overview/</guid><description>&lt;h2 id="overall-analogy-a-franchise-restaurant"&gt;Overall Analogy: A Franchise Restaurant&lt;a class="anchor" href="#overall-analogy-a-franchise-restaurant"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A franchise restaurant shares a &lt;strong&gt;common menu and recipes&lt;/strong&gt; (common) across stores worldwide, but the &lt;strong&gt;ingredient suppliers&lt;/strong&gt; (platforms) differ by region. A New York store (JVM) and a Seoul store (iOS/Android) use the same recipe with different ingredients.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Franchise Analogy&lt;/th&gt;
 &lt;th&gt;Kotlin Multiplatform&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Common recipe (menu)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;commonMain&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Code shared across all platforms&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Region-specific ingredients&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;jvmMain&lt;/code&gt; / &lt;code&gt;iosMain&lt;/code&gt; / &lt;code&gt;jsMain&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Concrete implementations per platform&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&amp;ldquo;Use local ingredients&amp;rdquo; note on the recipe&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;expect&lt;/code&gt; declaration&lt;/td&gt;
 &lt;td&gt;A contract requiring a platform implementation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Local store actually preparing ingredients&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;actual&lt;/code&gt; implementation&lt;/td&gt;
 &lt;td&gt;Actual platform-specific code&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Target Audience&lt;/strong&gt;: Intermediate or higher Kotlin developers interested in multiplatform development
&lt;strong&gt;Prerequisites&lt;/strong&gt;: Basic Kotlin syntax, Gradle basics
&lt;strong&gt;Estimated Time&lt;/strong&gt;: About 30–40 minutes
&lt;strong&gt;What You&amp;rsquo;ll Learn&lt;/strong&gt;: You&amp;rsquo;ll understand the KMP project structure, separate platform-specific code with expect/actual, and judge when KMP is suitable.&lt;/p&gt;</description></item></channel></rss>