{"product_id":"110072","title":"Kotlin in Action 2\/e ","description":"\u003ccenter\u003e\u003cdiv style=\"text-align:center\"\u003e\u003cimg src=\"https:\/\/tmgdisk01.cafe24.com\/images\/vs\/4172\/sv\/3jYEEOP7gyiWlOpXGYQnlsmHW9YENV.png?v=1765094480\" style=\"max-width:100%;max-height:10px\"\u003e\u003c\/div\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\n\n\u003cdiv style=\"width:95%\"\u003e\n\n\u003cdiv style=\"text-align:center;font-size:30px;font-weight:bolder;line-height:1.6em\"\u003e Kotlin in Action 2\/e \u003c\/div\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cdiv style=\"border-bottom:1px;border-bottom-style:dotted;border-color:;padding-bottom:20px\"\u003e\u003ccenter\u003e\u003ctable align=\"center\" width=\"100%\"\u003e\u003ctbody style=\"border:0px\"\u003e\n\n\u003ctr\u003e\u003ctd align=\"center\" style=\"line-height:1.2em;text-align:center;font-size:18px;color:black;font-weight:bold;padding-bottom:20px;\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\n\n\u003ctr\u003e\u003ctd style=\"text-align:center\"\u003e\u003cimg src=\"https:\/\/image.yes24.com\/goods\/142690359\/XL\" style=\"max-width:100%;height:auto\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\n\n\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/center\u003e\u003c\/div\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cdiv style=\"width:95%;{split_style6}padding-top:20px;padding-bottom:20px\"\u003e\n\n\u003cdiv style=\"text-align:left;font-size:16px;font-weight:bold;padding-bottom:20px\"\u003e Description \u003c\/div\u003e\n\n\u003cdiv style=\"text-align:left;word-break:break-all;font-size:14px;line-height:1.6em;\"\u003e\n\n\u003cdiv\u003e\u003ch5\u003e \u003cb\u003eBook Introduction\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\u003cdiv\u003e Kotlin, the official language for Android, is increasingly being used in various fields, including server programming, due to its practicality, simplicity, and interoperability with Java.\u003cbr\u003e The biggest feature of the Kotlin language is its practicality. \u003cbr\u003eThis book was also written from a perspective that emphasizes practicality, and can be considered a kind of official book written directly by the Kotlin compiler developers at JetBrains, who developed the Kotlin language.\u003cbr\u003e This book, which has been a de facto Kotlin reference since its first edition in 2017, is now in its second edition, revised for Kotlin 2.0.\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e This book introduces the basics of Kotlin and explains object-orientation, generics, higher-order functions and functional programming, and the use of the standard collection library.\u003cbr\u003e Here, we will explain in detail how Kotlin has improved the Java language and what to watch out for when using Kotlin together with existing Java projects.\u003cbr\u003e The second half details design and implementation techniques, covering real-world library examples of annotations, reflection, DSLs, and asynchronous programming (suspending functions, coroutines, and flow).\u003cbr\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv\u003e\u003cul\u003e  \u003cli\u003eYou can preview some of the book's contents.\u003cbr\u003e \u003cspan\u003ePreview\u003c\/span\u003e\n\n\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbr\u003e\u003cdiv\u003e\u003ch5\u003e \u003cb\u003eindex\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e \u003cb\u003ePart 1: Introduction to Kotlin\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 1: What is Kotlin and Why Do I Need It?\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 1.1 A Taste of Kotlin\u003cbr\u003e 1.2 Key Features of Kotlin\u003cbr\u003e 1.2.1 Kotlin Use Cases: Android, Servers, Anywhere Java Runs, and More\u003cbr\u003e 1.2.2 Kotlin's performance, reliability, and maintainability are all good due to static typing.\u003cbr\u003e Azim\u003cbr\u003e 1.2.3 The combination of functional programming and object-oriented programming makes Kotlin safe and\u003cbr\u003e Be flexible\u003cbr\u003e 1.2.4 Coroutines allow you to write concurrent and asynchronous code in a natural and structured way.\u003cbr\u003e there is\u003cbr\u003e 1.2.5 Kotlin can be used for all purposes.\u003cbr\u003e Kotlin is open source, and you\u003cbr\u003e is open to contributions\u003cbr\u003e 1.3 Areas where Kotlin is frequently used\u003cbr\u003e 1.3.1 Backend Support: Kotlin Server Programming\u003cbr\u003e 1.3.2 Mobile Development: Android is Kotlin First \u003cbr\u003e1.3.3 Multi-platform: Share business logic across iOS, JVM, JS and other platforms.\u003cbr\u003e Minimize code duplication and ambiguity\u003cbr\u003e 1.4 Kotlin's Philosophy\u003cbr\u003e 1.4.1 Kotlin is a practical language\u003cbr\u003e 1.4.2 Kotlin is concise\u003cbr\u003e 1.4.3 Kotlin is safe\u003cbr\u003e 1.4.4 Kotlin is interoperable\u003cbr\u003e 1.5 Using Kotlin Tools\u003cbr\u003e 1.5.1 Setting up and running Kotlin code\u003cbr\u003e 1.5.2 Compiling Kotlin Code\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 2: Kotlin Basics\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 2.1 Basic Elements: Functions and Variables\u003cbr\u003e 2.1.1 Writing Your First Kotlin Program: Hello, World!\u003cbr\u003e 2.1.2 Declaring a function with parameters and return values\u003cbr\u003e 2.1.3 Defining functions more concisely using expression bodies\u003cbr\u003e 2.1.4 Declare variables to store data\u003cbr\u003e 2.1.5 Marking variables as read-only or reassignable\u003cbr\u003e 2.1.6 Formatting Strings Easier: String Templates\u003cbr\u003e 2.2 Behavior and Data Encapsulation: Classes and Properties\u003cbr\u003e 2.2.1 Associating Classes with Data and Making Them Accessible: Properties \u003cbr\u003e2.2.2 Calculating property values ​​without storing them: Custom accessors\u003cbr\u003e 2.2.3 Kotlin Source Code Structure: Directories and Packages\u003cbr\u003e 2.3 Selection Expressions and Processing: Inum and when\u003cbr\u003e 2.3.1 Enum class and enum constant definitions\u003cbr\u003e 2.3.2 Handling enum classes with when\u003cbr\u003e 2.3.3 Capturing the target of the when expression in a variable\u003cbr\u003e 2.3.4 Using arbitrary objects in when branch conditions\u003cbr\u003e 2.3.5 Using when without arguments\u003cbr\u003e 2.3.6 Smart Cast: Combining Type Checking and Type Casting\u003cbr\u003e 2.3.7 Refactoring: Change if to when\u003cbr\u003e 2.3.8 Using blocks in if and when branches\u003cbr\u003e 2.4 Target Iteration: while and for loops\u003cbr\u003e 2.4.1 Repeating code while a condition is true: the while loop\u003cbr\u003e 2.4.2 Iteration over numbers: ranges and permutations\u003cbr\u003e 2.4.3 Iteration on the map\u003cbr\u003e 2.4.4 Inspecting elements of a collection or range in\u003cbr\u003e 2.5 Throwing and Catching Exceptions in Kotlin\u003cbr\u003e 2.5.1 Exception handling and error recovery using try, catch, and finally\u003cbr\u003e 2.5.2 Using try as an expression\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 3 Function Definition and Calling\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 3.1 Creating Collections in Kotlin \u003cbr\u003e3.2 Making functions easier to call\u003cbr\u003e 3.2.1 Named arguments\u003cbr\u003e 3.2.2 Default parameter values\u003cbr\u003e 3.2.3 Eliminating Static Utility Classes: Top-Level Functions and Properties\u003cbr\u003e 3.3 Adding Methods to Other Classes: Extension Functions and Extension Properties\u003cbr\u003e 3.3.1 Import and Extension Functions\u003cbr\u003e 3.3.2 Calling Extension Functions from Java\u003cbr\u003e 3.3.3 Defining utility functions as extension functions\u003cbr\u003e 3.3.4 Extension functions cannot be overridden\u003cbr\u003e 3.3.5 Extension Properties\u003cbr\u003e 3.4 Collection Handling: Variable-Length Arguments, Infix Function Calls, and Library Support\u003cbr\u003e 3.4.1 Java Collection API Extensions\u003cbr\u003e 3.4.2 Variadic Functions: Defining functions that can have a variable number of arguments\u003cbr\u003e 3.4.3 Handling Pairs (Tuples): Infix Calls and Destructuring Declarations\u003cbr\u003e 3.5 Handling Strings and Regular Expressions\u003cbr\u003e 3.5.1 Splitting strings\u003cbr\u003e 3.5.2 Regular Expressions and Triple-Quoted Strings\u003cbr\u003e 3.5.3 Multiline triple-quoted strings\u003cbr\u003e 3.6 Cleaning up your code: Local functions and extensions\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 4 Classes, Objects, and Interfaces\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 4.1 Defining the class hierarchy \u003cbr\u003e4.1.1 Kotlin Interfaces\u003cbr\u003e 4.1.2 open, final, abstract modifiers: final by default\u003cbr\u003e 4.1.3 Visibility modifier: public by default\u003cbr\u003e 4.1.4 Inner and Nested Classes: Nested Classes by Default\u003cbr\u003e 4.1.5 Sealed Classes: Defining a Class Hierarchy with Restricted Extensions\u003cbr\u003e 4.2 Declaring a class with non-obvious constructors or properties\u003cbr\u003e 4.2.1 Class Initialization: Primary Constructor and Initialization Block\u003cbr\u003e 4.2.2 Secondary Constructors: Initializing the Superclass in a Different Way\u003cbr\u003e 4.2.3 Implementing properties declared in an interface\u003cbr\u003e 4.2.4 Accessing fields backed by getters and setters\u003cbr\u003e 4.2.5 Changing the visibility of an accessor\u003cbr\u003e 4.3 Compiler-generated methods: data classes and class delegation\u003cbr\u003e 4.3.1 Methods that every class must define\u003cbr\u003e 4.3.2 Data classes: Automatically generate methods that every class must define.\u003cbr\u003e 4.4 object keyword: Declare a class and create an instance at the same time\u003cbr\u003e 4.4.1 Object Declaration: Creating Singletons Easily \u003cbr\u003e4.4.2 Companion Objects: Where Factory Methods and Static Members Go\u003cbr\u003e 4.4.3 Using companion objects like regular objects\u003cbr\u003e 4.4.4 Object Expressions: Writing Anonymous Inner Classes Alternatives\u003cbr\u003e 4.5 Adding Type Safety Without Extra Cost: Inline Classes\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 5 Programming with Lambda\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 5.1 Lambda Expressions and Member References\u003cbr\u003e 5.1.1 Introducing Lambdas: Treating Code Blocks as Values\u003cbr\u003e 5.1.2 Lambdas and Collections\u003cbr\u003e 5.1.3 Lambda Expression Grammar\u003cbr\u003e 5.1.4 Accessing variables in the current scope\u003cbr\u003e 5.1.5 Member Reference\u003cbr\u003e 5.1.6 Callable References Associated with Values\u003cbr\u003e 5.2 Using Java's Functional Interfaces: Single Abstract Method\u003cbr\u003e 5.2.1 Passing Lambdas as Parameters to Java Methods\u003cbr\u003e 5.2.2 SAM Conversion: Explicitly Converting Lambdas to Functional Interfaces\u003cbr\u003e 5.3 Defining a SAM interface in Kotlin: fun interface\u003cbr\u003e 5.4 Lambdas for specifying receiver objects: with, apply,also\u003cbr\u003e 5.4.1 with function\u003cbr\u003e 5.4.2 apply function\u003cbr\u003e 5.4.3 Performing additional operations on objects: also\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 6 Collections and Sequences\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 6.1 Functional API for Collections \u003cbr\u003e6.1.1 Element Removal and Transformation: Filter and Map\u003cbr\u003e 6.1.2 Accumulating Collection Values: reduce and fold\u003cbr\u003e 6.1.3 Applying predicates to collections: all, any, none, count, find\u003cbr\u003e 6.1.4 Splitting a list into pairs of lists: partition\u003cbr\u003e 6.1.5 Converting a list into a map of multiple groups: groupBy\u003cbr\u003e 6.1.6 Converting a Collection to a Map: associate, associateWith, associateBy\u003cbr\u003e 6.1.7 Changing elements of a mutable collection: replaceAll, fill\u003cbr\u003e 6.1.8 Handling Special Cases in Collections: ifEmpty\u003cbr\u003e 6.1.9 Splitting a Collection: Chunked and Windowed\u003cbr\u003e 6.1.10 Merging Collections: zip\u003cbr\u003e 6.1.11 Manipulating Elements of Nested Collections: flatMap and flatten\u003cbr\u003e 6.2 Lazy Collection Operations: Sequences\u003cbr\u003e 6.2.1 Executing Sequence Operations: Intermediate and Final Operations\u003cbr\u003e 6.2.2 Creating a Sequence\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 7: Values ​​that can be null\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 7.1 Avoiding NullPointerException and Handling Absence of Values: The Possibility of Nulls\u003cbr\u003e 7.2 Specifying a variable that can be null as a type that can be null\u003cbr\u003e 7.3 A closer look at the meaning of types \u003cbr\u003e7.4 Combining null checking and method calls with the safe call operator: ?.\u003cbr\u003e 7.5 Providing a default value for null with the Elvis operator: ?:\u003cbr\u003e 7.6 Casting types safely without raising exceptions: as?\u003cbr\u003e 7.7 Not you assertion: !!\u003cbr\u003e 7.8 let function\u003cbr\u003e 7.9 Non-null types that are not directly initialized: lazy initialization properties\u003cbr\u003e 7.10 Type extensions without safe call operators: Extensions to nullable types\u003cbr\u003e 7.11 Nullability of Type Parameters\u003cbr\u003e 7.12 Null Possibility and Java\u003cbr\u003e 7.12.1 Platform Type\u003cbr\u003e 7.12.2 Inheritance\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 8 Basic Types, Collections, and Arrays\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 8.1 Primitive and Basic Types\u003cbr\u003e 8.1.1 Representing integers, floating-point numbers, characters, and boolean values ​​as primitive types\u003cbr\u003e 8.1.2 Using the full bit range to represent positive numbers: unsigned number types\u003cbr\u003e 8.1.3 Primitive types that can be null: Int?, Boolean?, etc.\u003cbr\u003e 8.1.4 Number Conversion\u003cbr\u003e 8.1.5 Any and Any?: The Roots of Kotlin's Type Hierarchy\u003cbr\u003e 8.1.6 Unit Type: Kotlin's Void \u003cbr\u003e8.1.7 Nothing type: This function never returns.\u003cbr\u003e 8.2 Collections and Arrays\u003cbr\u003e 8.2.1 Collections of values ​​that can be null and collections that can be null\u003cbr\u003e 8.2.2 Read-only and mutable collections\u003cbr\u003e 8.2.3 Kotlin collections and Java collections are closely related.\u003cbr\u003e 8.2.4 Collections declared in Java appear as platform types in Kotlin.\u003cbr\u003e 8.2.5 Creating arrays of objects or arrays of primitive types for performance and interoperability\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003ePart 2: Using Kotlin the Kotlin Way\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 9 Operator Overloading and Other Conventions\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 9.1 Overloading arithmetic operators to make operations on arbitrary classes more convenient\u003cbr\u003e 9.1.1 plus, times, divide, etc.: Overloading Binary Arithmetic Operations\u003cbr\u003e 9.1.2 Applying an operation and then assigning the result directly: Compound assignment operator overload\u003cbr\u003e Ding\u003cbr\u003e 9.1.3 Operators with Only One Operand: Unary Operator Overloading\u003cbr\u003e 9.2 Easily check relationships between objects by overloading comparison operators. \u003cbr\u003e9.2.1 Equality Operator: equals\u003cbr\u003e 9.2.2 Order Operators: compareTo (〈, 〉, 〈=, 〉=)\u003cbr\u003e 9.3 Conventions for Writing About Collections and Ranges\u003cbr\u003e 9.3.1 Accessing elements by index: get and set\u003cbr\u003e 9.3.2 Checking if an object is in a collection: the in convention\u003cbr\u003e 9.3.3 Creating Ranges from Objects: The rangeTo and rangeUntil Conventions\u003cbr\u003e 9.3.4 Looping over your own type: the iterator convention\u003cbr\u003e 9.4 Providing destructuring declarations using component functions\u003cbr\u003e 9.4.1 Destructuring Declarations and Loops\u003cbr\u003e 9.4.2 _ Ignoring destructuring values ​​using characters\u003cbr\u003e 9.5 Reusing Property Accessor Logic: Delegated Properties\u003cbr\u003e 9.5.1 Basic syntax and internal operation of delegated properties\u003cbr\u003e 9.5.2 Using Delegated Properties: Lazy Initialization with by lazy()\u003cbr\u003e 9.5.3 Implementing Delegated Properties\u003cbr\u003e 9.5.4 Delegated properties are converted to hidden properties with custom accessors.\u003cbr\u003e 9.5.5 Dynamically accessing attributes by delegating to a map\u003cbr\u003e 9.5.6 How Real-World Frameworks Use Delegated Properties\u003cbr\u003e summation\u003cbr\u003e \u003cbr\u003e\u003cb\u003eChapter 10 Higher-Order Functions: Using Lambdas as Parameters and Return Values\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 10.1 Defining functions that take other functions as arguments or return other functions: Higher-order functions\u003cbr\u003e 10.1.1 The function type specifies the parameter types and return type of the lambda.\u003cbr\u003e 10.1.2 Calling a function passed as an argument\u003cbr\u003e 10.1.3 Using Kotlin Function Types in Java\u003cbr\u003e 10.1.4 You can specify default values ​​for parameters of function type, and they can be null.\u003cbr\u003e there is\u003cbr\u003e 10.1.5 Returning a function from a function\u003cbr\u003e 10.1.6 Using Lambda to Reduce Duplication and Increase Code Reusability\u003cbr\u003e 10.2 Eliminating the overhead of lambdas using inline functions\u003cbr\u003e 10.2.1 How Inlining Works\u003cbr\u003e 10.2.2 Restrictions on inline functions\u003cbr\u003e 10.2.3 Collection Operation Inlining\u003cbr\u003e 10.2.4 Deciding When to Declare a Function Inline\u003cbr\u003e 10.2.5 Using Inlined Lambdas for Resource Management with withLock, use, and useLines\u003cbr\u003e 10.3 Returning from Lambdas: Controlling Flow in Higher-Order Functions\u003cbr\u003e 10.3.1 Return statement in lambda: Returning from the function surrounding the lambda \u003cbr\u003e10.3.2 Returning from Lambdas: Returning with Labels\u003cbr\u003e 10.3.3 Anonymous functions: local return by default\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 11 Generics\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 11.1 Creating types that take type arguments: Generic type parameters\u003cbr\u003e 11.1.1 Functions and properties that work with generic types\u003cbr\u003e 11.1.2 Declare a generic class using square bracket syntax\u003cbr\u003e 11.1.3 Restricting the types that can be used by generic classes or functions: Type parameter restrictions\u003cbr\u003e approximately\u003cbr\u003e 11.1.4 Excluding nullable type arguments by explicitly marking type parameters as non-nullable\u003cbr\u003e 11.2 Runtime Generics Behavior: Erased and Reified Type Parameters\u003cbr\u003e 11.2.1 Limitations when finding type information for generic classes at runtime: Type checking and\u003cbr\u003e Casting\u003cbr\u003e 11.2.2 A function that uses an instantiated type parameter returns the type argument at runtime.\u003cbr\u003e can be mentioned \u003cbr\u003e11.2.3 Replacing class references with instantiated type parameters in java.lang.Class\u003cbr\u003e Avoiding parameters\u003cbr\u003e 11.2.4 Defining Accessors with Reified Type Parameters\u003cbr\u003e 11.2.5 Constraints on Materialized Type Parameters\u003cbr\u003e 11.3 Variance describes the subtype relationship between a generic and its type arguments.\u003cbr\u003e 11.3.1 Variance allows us to determine whether it is safe to pass arguments to a function.\u003cbr\u003e 11.3.2 Classes, Types, and Subtypes\u003cbr\u003e 11.3.3 Covariance preserves subtype relationships\u003cbr\u003e 11.3.4 Contravariance reverses subtyping relationships\u003cbr\u003e 11.3.5 Specifying variance at the point where a type is mentioned using point-of-use variance\u003cbr\u003e 11.3.6 Star Projection: Using * to indicate that there is no information about a generic type argument\u003cbr\u003e 11.3.7 Type Alias\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 12 Annotations and Reflection\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 12.1 Declaring and applying annotations\u003cbr\u003e 12.1.1 Marking declarations with annotations\u003cbr\u003e 12.1.2 Specifying the exact declarations an annotation can reference: Annotation Targets \u003cbr\u003e12.1.3 Controlling JSON Serialization Using Annotations\u003cbr\u003e 12.1.4 Annotation Declaration\u003cbr\u003e 12.1.5 Metaannotations: Controlling How Annotations Are Processed\u003cbr\u003e 12.1.6 Using classes as annotation parameters\u003cbr\u003e 12.1.7 Receiving a generic class as an annotation parameter\u003cbr\u003e 12.2 Reflection: Observing Kotlin Objects at Runtime\u003cbr\u003e 12.2.1 Kotlin Reflection API: KClass, KCallable, KFunction, KProperty\u003cbr\u003e 12.2.2 Implementing Object Serialization Using Reflection\u003cbr\u003e Control serialization using the 12,2,3 annotations\u003cbr\u003e 12.2.4 JSON Parsing and Object Deserialization\u003cbr\u003e 12.2.5 Final Deserialization Step: Creating Objects Using CallBy() and Reflection\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 13: Creating a DSL\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 13.1 From API to DSL: Creating Expressive Custom Code Structures\u003cbr\u003e 13.1.1 Domain-Specific Languages\u003cbr\u003e 13.1.2 The internal DSL integrates seamlessly with the rest of the program.\u003cbr\u003e 13.1.3 DSL Structure\u003cbr\u003e 13.1.4 Creating HTML with an Internal DSL\u003cbr\u003e 13.2 Building a Structured API: Using Lambdas to Specify Received Objects in the DSL \u003cbr\u003e13.2.1 Lambda and extension function types for specifying receiver objects\u003cbr\u003e 13.2.2 Using a lambda specifying a receiver object within an HTML builder\u003cbr\u003e 13.2.3 Kotlin Builders: Enabling Abstraction and Reuse\u003cbr\u003e 13.3 Using the invoke convention to nest blocks more flexibly\u003cbr\u003e 13.3.1 Using the invoke convention to nest blocks more flexibly\u003cbr\u003e 13.3.2 DSL Invoke Conventions: Declaring Gradle Dependencies\u003cbr\u003e 13.4 Kotlin DSL in Practice\u003cbr\u003e 13.4.1 Chaining Intermediate Calls: The Test Framework's Should Function\u003cbr\u003e 13.4.2 Defining Extension Functions for Primitive Types: Date Handling\u003cbr\u003e 13.4.3 Member Extension Functions: An Internal DSL for SQL\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003ePart 3: Concurrent Programming with Coroutines and Flow\u003cbr\u003e\u003cbr\u003e Chapter 14 Coroutines\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 14.1 Concurrency and Parallelism\u003cbr\u003e 14.2 How to Handle Concurrency in Kotlin: Suspending Functions and Coroutines\u003cbr\u003e 14.3 Comparison of Threads and Coroutines\u003cbr\u003e 14.4 Functions that can pause: Suspend functions\u003cbr\u003e 14.4.1 Code using the suspend function appears sequential. \u003cbr\u003e14.5 Comparing Coroutines with Other Approaches\u003cbr\u003e 14.5.1 Calling the Suspend Function\u003cbr\u003e 14.6 Entering the World of Coroutines: Coroutine Builder\u003cbr\u003e 14.6.1 From Regular Code to the World of Coroutines: The runBlocking Function\u003cbr\u003e 14.6.2 Creating a Forget-After-Launch Coroutine: The Launch Function\u003cbr\u003e 14.6.3 Waitable Operations: Async Builders\u003cbr\u003e 14.7 Deciding Where to Run Code: The Dispatcher\u003cbr\u003e 14.7.1 Selecting a Dispatcher\u003cbr\u003e 14.7.2 Passing a Dispatcher to a Coroutine Builder\u003cbr\u003e 14.7.3 Changing the dispatcher within a coroutine using withContext\u003cbr\u003e 14.7.4 Coroutines and dispatchers are not a magic solution to thread safety problems.\u003cbr\u003e no\u003cbr\u003e 14.8 Coroutines contain additional information in their coroutine context.\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 15 Structured Concurrency\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 15.1 Coroutine scope establishes structure between coroutines.\u003cbr\u003e 15.1.1 Creating a Coroutine Scope: The coroutineScope Function\u003cbr\u003e 15.1.2 Associating a Coroutine Scope with a Component: CoroutineScope\u003cbr\u003e 15.1.3 Risks of GlobalScope \u003cbr\u003e15.1.4 Coroutine Contexts and Structured Concurrency\u003cbr\u003e 15.2 Cancellation\u003cbr\u003e 15.2.1 Cancellation Trigger\u003cbr\u003e 15.2.2 Automatically cancel call after time limit is exceeded\u003cbr\u003e 15.2.3 Cancellation propagates to all child coroutines.\u003cbr\u003e 15.2.4 A cancelled coroutine throws a CancellationException at a special point.\u003cbr\u003e 15.2.5 Cancellation is cooperative\u003cbr\u003e 15.2.6 Checking if a coroutine has been cancelled\u003cbr\u003e 15.2.7 Giving Other Coroutines a Chance: The Yield Function\u003cbr\u003e 15.2.8 Keep cancellation in mind when acquiring resources\u003cbr\u003e 15.2.9 The framework can cancel for you.\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 16 Flow\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 16.1 Flow models a stream of continuous values.\u003cbr\u003e 16.1.1 Flow allows you to process elements as soon as they are emitted.\u003cbr\u003e 16.1.2 Different Types of Kotlin Flow\u003cbr\u003e 16.2 Cold Flow\u003cbr\u003e 16.2.1 Creating a cold flow using the flow builder function\u003cbr\u003e 16.2.2 Cold flow does not perform any work until it is collected.\u003cbr\u003e 16.2.3 Cancel Flow Collection\u003cbr\u003e 16.2.4 Internal Implementation of Cold Flow \u003cbr\u003e16.2.5 Concurrent Flows Using Channel Flows\u003cbr\u003e 16.3 Hot Flow\u003cbr\u003e 16.3.1 A shared flow broadcasts values ​​to subscribers.\u003cbr\u003e 16.3.2 Tracking System State: State Flow\u003cbr\u003e 16.3.3 Comparison of State Flow and Shared Flow\u003cbr\u003e 16.3.4 Hot Flow, Cold Flow, Shared Flow, Stateful Flow: When to Use Which Flow?\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 17 Flow Operators\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 17.1 Manipulating Flow with Flow Operators\u003cbr\u003e 17.2 Intermediate operators are applied to the upstream flow and return the downstream flow.\u003cbr\u003e 17.2.1 Emitting random values ​​for each upstream element: the transform function\u003cbr\u003e 17.2.2 take and related operators can cancel the flow\u003cbr\u003e 17.2.3 Hooking each step of the flow: onStart, onEach, onCompletion, onEmpty\u003cbr\u003e 17.2.4 Element Buffering for Downstream Operators and Collectors: The Buffer Operator\u003cbr\u003e 17.2.5 Operator that discards intermediate values: conflate operator\u003cbr\u003e 17.2.6 Operator to filter values ​​over a period of time: debounce operator \u003cbr\u003e17.2.7 Changing the coroutine context in which a flow is executed: The flowOn operator\u003cbr\u003e 17.3 Creating Custom Intermediate Operators\u003cbr\u003e 17.4 The final operator executes the upstream flow and computes the value.\u003cbr\u003e 17.4.1 The framework provides custom operators.\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003eChapter 18 Error Handling and Testing\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 18.1 Handling Errors Thrown Inside Coroutines\u003cbr\u003e 18.2 Error Propagation in Kotlin Coroutines\u003cbr\u003e 18.2.1 A coroutine that cancels all children if a child fails.\u003cbr\u003e 18.2.2 Structured concurrency only affects exceptions that extend the coroutine scope.\u003cbr\u003e 18.2.3 Supervisors ensure that parents and siblings are not cancelled.\u003cbr\u003e 18.3 CoroutineExceptionHandler: A Last Resort for Exception Handling\u003cbr\u003e 18.3.1 Differences between applying CoroutineExceptionHandler to launch and async\u003cbr\u003e 18.4 Exception Handling in Flow\u003cbr\u003e 18.4.1 Handling Upstream Exceptions with the Catch Operator\u003cbr\u003e 18.4.2 Retrying the collection of flows when the predicate is true: the retry operator\u003cbr\u003e 18.5 Coroutines and Flow Testing \u003cbr\u003e18.5.1 Quickly Writing Tests Using Coroutines: Virtual Time and the Test Dispatcher\u003cbr\u003e 18.5.2 Flow Test with Turbine\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e Appendix A Building a Kotlin Project\u003cbr\u003e Appendix B Documenting Kotlin Code\u003cbr\u003e Appendix C: Kotlin Ecosystem\u003c\/div\u003e\n\u003cdiv\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbr\u003e\u003cdiv\u003e\u003ch5\u003e \u003cb\u003ePublisher's Review\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e \u003cb\u003e◈ What this book covers ◈\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e ◆ Guide from Kotlin Team Members\u003cbr\u003e ◆ Domain-Specific Language (DSL)\u003cbr\u003e ◆ Kotlin Coroutines and Flow\u003cbr\u003e\u003cbr\u003e \u003cb\u003e◈ Target audience of this book ◈\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e This book is primarily aimed at developers with some Java experience.\u003cbr\u003e Kotlin builds on many concepts and techniques found in Java, and this book leverages readers' existing knowledge to help them quickly learn Kotlin.\u003cbr\u003e \u003cbr\u003eReaders with experience with other programming languages, such as C# or JavaScript, will need other resources to understand the intricacies of Kotlin's interaction with the JVM, but they can still use this book to learn Kotlin.\u003cbr\u003e This book covers the entire Kotlin language and does not focus on any specific problem domain.\u003cbr\u003e So it will be helpful for server developers, Android developers, or any developer building projects to run on the JVM.\u003cbr\u003e\u003cbr\u003e \u003cb\u003e◈ Author's Note ◈\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e The idea for the Kotlin language originated at JetBrains in 2010.\u003cbr\u003e At the time, JetBrains was a well-known and fairly successful company that provided development tools for various languages ​​such as Java, C#, JavaScript, Python, Ruby, and PHP. \u003cbr\u003eJetBrains' flagship product, the Java IDE IntelliJ IDEA, also includes plugins to assist with Scala and Groovy development.\u003cbr\u003e\u003cbr\u003e Our experience developing tools for such a diverse range of languages ​​has given us a unique perspective and understanding of the entire programming language landscape.\u003cbr\u003e And all IDEs that use IntelliJ as a platform, including IntelliJ IDEA itself, were developed in Java.\u003cbr\u003e We were so envious of our colleagues on the .Net team who were developing in C#, a modern, powerful, and fast-evolving language, but we couldn't find a language that could replace Java.\u003cbr\u003e What requirements did we have for a language to replace Java?\u003cbr\u003e\u003cbr\u003e The first and most obvious requirement was static typing. \u003cbr\u003eThere is no other way to develop a code base that is millions of lines long without going crazy, other than static typing.\u003cbr\u003e Second, we needed a language that was fully compatible with existing Java code.\u003cbr\u003e Our existing codebase is an incredibly valuable asset to JetBrains, and we couldn't afford to lose it or have its value diminished due to lack of interoperability.\u003cbr\u003e Thirdly, we did not want to compromise on tool availability.\u003cbr\u003e As a company, JetBrains' most important value is development productivity, and achieving high productivity requires great tools.\u003cbr\u003e Finally, we needed a language that was easy to learn and easy to reason about the code.\u003cbr\u003e\u003cbr\u003e Around the time we discovered this unmet need within our company, we realized that some companies were in a similar situation. \u003cbr\u003eTherefore, we could expect that if we could create a solution that could meet the needs within JetBrains, we would find more users outside of JetBrains.\u003cbr\u003e With this in mind, we decided to start a project to create a new language: Kotlin.\u003cbr\u003e\u003cbr\u003e The development period for the language has been longer than initially expected, and Kotlin 1.0 was released more than five years after the first repository commit.\u003cbr\u003e Since then, Kotlin has found a user base that wants it, and its own ecosystem has developed beautifully, and that progress continues to this day.\u003cbr\u003e\u003cbr\u003e Kotlin is based in St. Petersburg, Russia.\u003cbr\u003e It is the name of an island near St. Petersburg.\u003cbr\u003e The choice of the island's name follows the traditions of the Javanese and Ceylonese languages.\u003cbr\u003e \u003cbr\u003eAs Kotlin's official release nears, I thought it would be helpful to have a book written by people who were involved in the design of the language and can confidently explain why the language's features are the way they are.\u003cbr\u003e This book is part of that effort, and I hope that readers will learn and understand the Kotlin language better through this book.\u003cbr\u003e Good luck and I hope you always have fun developing.\u003cbr\u003e\u003cbr\u003e \u003cb\u003e◈ Translator's Note ◈\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e In 2017, when the first edition of this book was translated, Kotlin was beginning to be used in earnest on Android, and functional programming concepts were slowly entering the mainstream programming language world through Scala, Hadoop, and others.\u003cbr\u003e So, the 'Translator's Note' of the first edition had to explain the relevant content at length. \u003cbr\u003eHowever, as time goes by, Kotlin has become firmly established in Android programming, the number of developers and companies using Kotlin in server programming has increased significantly, and the concept of functional programming has also become firmly established to some extent, so I think it is no longer necessary to explain the features or advantages of the Kotlin language and the features or advantages of functional programming.\u003cbr\u003e Any developer who picks up this book will be ready to fall in love with the language just by hearing the name Kotlin.\u003cbr\u003e\u003cbr\u003e Kotlin is now moving beyond its position as a better Java replacement on the JVM to establish itself as a standalone programming language with its own concurrent programming framework and multi-platform support. \u003cbr\u003eThrough this book, you can learn the basic philosophy and grammar of the Kotlin language, collection processing using basic functional programming techniques, internal DSL and rich API development methods using the Kotlin language's DSL support features, and concurrent\/parallel programming using Kotlin coroutines and Flow.\u003cbr\u003e You will also learn how to use Java and Kotlin together in your projects on the JVM.\u003cbr\u003e Developers who have a solid foundation in Kotlin through this book will be able to utilize Kotlin in various fields, such as developing multi-platform apps through Compose Multiplatform or developing clean architecture servers that integrate Java libraries such as Spring. \u003cbr\u003eFor example, Mobility42, where the translator works, has developed its own Kotlin multi-platform library and is using it to develop various applications such as servers (database modeling using its own Spring-based server library and internal DSL), web (JavaScript + its own developed component library), and Compose Desktop.\u003cbr\u003e\u003cbr\u003e I sincerely hope that through this book, Kotlin will become a tool that you can comfortably use when working, like a well-crafted club that fits comfortably in your hand.\u003cbr\u003e And I hope that the increased productivity you gain through Kotlin will allow you to enjoy more leisurely evenings. \u003cbr\u003e\n\n\u003c\/div\u003e\n\u003cdiv\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cdiv style=\"width:95%;padding-top:20px;padding-bottom:20px\"\u003e\n\n\u003cdiv style=\"text-align:left;font-size:16px;font-weight:bold;padding-bottom:20px\"\u003e GOODS SPECIFICS \u003c\/div\u003e\n\n\u003cdiv style=\"text-align:left;font-size:14px;line-height:1.6em;\"\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003eDate of issue:\u003c\/strong\u003e February 27, 2025\u003c\/div\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003ePage count, weight, size:\u003c\/strong\u003e 804 pages | 188*235*37mm\u003c\/div\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003eISBN13:\u003c\/strong\u003e 9791161759692\u003c\/div\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003eISBN10:\u003c\/strong\u003e 1161759697 \u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\u003ccenter\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cspan\u003e\u003c\/span\u003e\n\n\u003c\/center\u003e\n\n\n\u003c\/center\u003e","brand":"LIBRAIRIE COREENNE","offers":[{"title":"Default Title","offer_id":43893669003306,"sku":"110072","price":54.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0683\/2750\/5962\/files\/07f6b39f6d39e20b61fcded5e4194fa3.jpg?v=1765410910","url":"https:\/\/librairie.coreenne.fr\/en\/products\/110072","provider":"LIBRAIRIE COREENNE","version":"1.0","type":"link"}