0Pricing
Kotlin Academy · บทเรียน

เลือกฟังก์ชันขอบเขตให้เหมาะสม: คู่มือการตัดสินใจ

เลือกฟังก์ชันขอบเขตที่ถูกต้องจากตัวรับ ชนิดค่าที่ส่งกลับ และจุดประสงค์

เลือกฟังก์ชันขอบเขตให้เหมาะสม: คู่มือการตัดสินใจ เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

ห้าฟังก์ชันกับสองแกน

ฟังก์ชันกำหนดขอบเขตของ Kotlin แตกต่างกันตามสองแกน ได้แก่ รูปแบบตัวรับ (this หรือ it) และ ค่าที่ส่งคืน (ตัวรับหรือผลลัพธ์ของแลมบ์ดา) เลือกใช้ตามจุดประสงค์

ตารางตัดสินใจ

apply: this / ตัวรับ also: it / ตัวรับ run: this / แลมบ์ดา let: it / แลมบ์ดา with: this / แลมบ์ดา (ไม่มีตัวรับผ่านจุด)

apply: กำหนดค่าและส่งคืน

ใช้ apply สำหรับกำหนดค่าออบเจ็กต์ในเชนรูปแบบตัวสร้าง

class Config {
    var host: String = ""
    var port: Int = 0
}
fun main() {
    val cfg = Config().apply {
        host = "localhost"
        port = 8080
    }
    println("${cfg.host}:${cfg.port}")
}

also: ผลข้างเคียง

ใช้ also เพื่อบันทึกข้อมูล ตรวจสอบ หรือเรียกใช้ผลข้างเคียงขณะส่งต่อตัวรับ

fun main() {
    val items = listOf(1, 2, 3, 4)
        .also { println("got ${it.size} items") }
        .filter { it % 2 == 0 }
    println(items)
}

let: แปลงค่าและจำกัดขอบเขตอย่างปลอดภัยต่อ null

ใช้ let สำหรับการแปลงค่าอย่างปลอดภัยต่อ null หรือเพื่อจำกัดขอบเขตของตัวแปร

fun main() {
    val name: String? = "Ada"
    val length = name?.let { it.length } ?: 0
    println(length)
}

run: เข้าถึงสมาชิกหลายรายการพร้อมผลลัพธ์

ใช้ run เมื่อคำนวณผลลัพธ์จากสมาชิกหลายรายการของตัวรับ เพราะช่วยลดคำนำหน้า it.

class User(val name: String, val age: Int)
fun main() {
    val description = User("Ada", 35).run {
        "Name: $name, Age: $age"
    }
    println(description)
}

with: จัดกลุ่มการดำเนินการกับออบเจ็กต์ที่มีอยู่

ใช้ with(obj) { ... } เมื่อคุณไม่ได้ควบคุมจุดเรียกใช้ (ไม่มีเชนต่อด้วยจุด) แต่ต้องการจัดกลุ่มการดำเนินการโดยใช้ this

class Builder {
    val parts = mutableListOf<String>()
    fun add(s: String) { parts.add(s) }
    fun build(): String = parts.joinToString("-")
}
fun main() {
    val b = Builder()
    val result = with(b) {
        add("hello")
        add("kotlin")
        build()
    }
    println(result) // hello-kotlin
}

เลือกตามจุดประสงค์

ถามตัวเองว่า (1) ฉันต้องการตัวรับกลับมา หรือผลลัพธ์ที่คำนวณขึ้นมา และ (2) ฉันต้องการใช้ this หรือ it คำตอบจะเป็นตัวเลือกฟังก์ชันที่เหมาะสม

class Box { var w = 0; var h = 0; fun area() = w * h }
fun main() {
    // Configure and return Box -> apply
    val box = Box().apply { w = 3; h = 4 }
    // Compute area from box -> let or run
    val area = box.let { it.area() }
    // Side effect, keep box -> also
    val sameBox = box.also { println("area=${it.area()}") }
    println("$box / $area / $sameBox")
}

เปรียบเทียบ: apply กับ also

ทั้งสองฟังก์ชันส่งคืนตัวรับ apply ใช้ this (เหมาะกับการกำหนดฟิลด์) ส่วน also ใช้ it (เหมาะกับการอ้างอิงตัวรับอย่างชัดเจน โดยมักใช้ในผลข้างเคียง)

class Item { var name = "" }
fun main() {
    val a = Item().apply { name = "apply" } // implicit this
    val b = Item().also { it.name = "also" } // explicit it
    println("${a.name} / ${b.name}")
}

เปรียบเทียบ: let กับ run

ทั้งสองฟังก์ชันส่งคืนผลลัพธ์ของแลมบ์ดา let ใช้ it (เหมาะกับการแปลงค่าแบบง่ายและความปลอดภัยต่อ null) ส่วน run ใช้ this (เหมาะเมื่อคุณเรียกใช้สมาชิกหลายรายการ)

class Calculator(val a: Int, val b: Int) {
    fun sum() = a + b
    fun product() = a * b
}
fun main() {
    val calc = Calculator(3, 4)
    val s = calc.let { it.sum() }                  // simple
    val combo = calc.run { "sum=${sum()} product=${product()}" } // multi-member
    println("$s / $combo")
}

สายการประมวลผลในทางปฏิบัติ

เชนที่ใช้ในงานจริงมักใช้ฟังก์ชันกำหนดขอบเขตหลายฟังก์ชันร่วมกัน

class Request(var url: String = "", var headers: Map<String, String> = emptyMap())
fun main() {
    val response = Request()
        .apply {
            url = "https://api.example.com"
            headers = mapOf("Accept" to "json")
        }
        .also { println("request: ${it.url}") }
        .let { req -> "GET ${req.url}" }
    println(response)
}

สรุปอ้างอิงอย่างรวดเร็ว

ข้อมูลอ้างอิงแบบรวดเร็วสำหรับเลือกเครื่องมือที่เหมาะสม

// apply: this, returns receiver — configure object
// also: it, returns receiver — side effects in chain
// let: it, returns lambda result — transform / null-safety
// run: this, returns lambda result — multi-member compute
// with: this, returns lambda result — group operations on existing obj
fun main() { println("Scope functions: pick by receiver style + return value") }

ตรวจสอบอย่างรวดเร็ว

ฟังก์ชันกำหนดขอบเขตใดใช้ this เป็นตัวรับ และส่งคืนตัวรับนั้นเอง

ทบทวน

เลือกฟังก์ชันกำหนดขอบเขตตามจุดประสงค์: apply (กำหนดค่าและส่งคืนตัวเอง), also (ผลข้างเคียงและส่งคืนตัวเอง), let (แปลงค่าด้วย it), run (แปลงค่าด้วย this), with (จัดกลุ่มการดำเนินการกับออบเจ็กต์ที่มีอยู่) สองแกน ได้แก่ รูปแบบตัวรับและค่าที่ส่งคืน เป็นตัวกำหนดตัวเลือกที่เหมาะสม

คำถามที่พบบ่อย

บทเรียน “เลือกฟังก์ชันขอบเขตให้เหมาะสม: คู่มือการตัดสินใจ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เลือกฟังก์ชันขอบเขตให้เหมาะสม: คู่มือการตัดสินใจ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เลือกฟังก์ชันขอบเขตให้เหมาะสม: คู่มือการตัดสินใจ”

เลือกฟังก์ชันขอบเขตที่ถูกต้องจากตัวรับ ชนิดค่าที่ส่งกลับ และจุดประสงค์ คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “เลือกฟังก์ชันขอบเขตให้เหมาะสม: คู่มือการตัดสินใจ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม

ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. apply และ with: ตั้งค่าและส่งคืนค่า
  2. let และ run: แปลงค่าและกำหนดขอบเขต
  3. also: ผลข้างเคียงโดยไม่เปลี่ยนตัวรับ
  4. เลือกฟังก์ชันขอบเขตให้เหมาะสม: คู่มือการตัดสินใจ
← กลับไปที่ Kotlin Academy