เลือกฟังก์ชันขอบเขตให้เหมาะสม: คู่มือการตัดสินใจ
เลือกฟังก์ชันขอบเขตที่ถูกต้องจากตัวรับ ชนิดค่าที่ส่งกลับ และจุดประสงค์
เลือกฟังก์ชันขอบเขตให้เหมาะสม: คู่มือการตัดสินใจ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- apply และ with: ตั้งค่าและส่งคืนค่า
- let และ run: แปลงค่าและกำหนดขอบเขต
- also: ผลข้างเคียงโดยไม่เปลี่ยนตัวรับ
- เลือกฟังก์ชันขอบเขตให้เหมาะสม: คู่มือการตัดสินใจ