with
จัดกลุ่มการดำเนินการ
with เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
ฟังก์ชัน with
with เป็นฟังก์ชันขอบเขตที่รับอ็อบเจ็กต์เป็น อาร์กิวเมนต์ ไม่ใช่ตัวรับของการเรียก และเรียกใช้บล็อกโดยให้อ็อบเจ็กต์นั้นเป็น this ฟังก์ชันนี้คืนค่า ผลลัพธ์ของแลมบ์ดา
การใช้งาน with เบื้องต้น
คุณส่งอ็อบเจ็กต์ให้กับ with แล้วเข้าถึงสมาชิกของอ็อบเจ็กต์ได้โดยตรงภายในบล็อก
fun main() {
val name = "Kotlin"
val description = with(name) {
"$this has $length characters"
}
println(description)
}การจัดกลุ่มการดำเนินการหลายรายการ
with มีประโยชน์อย่างยิ่งเมื่อคุณต้องเรียกใช้เมธอดหลายรายการหรืออ่านคุณสมบัติหลายรายการของอ็อบเจ็กต์เดียวกัน เพราะไม่ต้องเขียนชื่ออ็อบเจ็กต์ซ้ำ
fun main() {
val sb = StringBuilder()
with(sb) {
append("Line 1\n")
append("Line 2\n")
append("Line 3")
}
println(sb)
}with ใช้ this
เช่นเดียวกับ run และ apply with เปิดให้อ้างอิงอ็อบเจ็กต์ด้วย this ดังนั้นการเข้าถึงสมาชิกจึงไม่ต้องมีคำนำหน้า
data class Rectangle(val width: Int, val height: Int)
fun main() {
val rect = Rectangle(4, 5)
val area = with(rect) {
width * height
}
println("Area: $area")
}with คืนค่าผลลัพธ์ของแลมบ์ดา
ค่าของนิพจน์สุดท้ายในบล็อกจะกลายเป็นผลลัพธ์ของ with เช่นเดียวกับ run
fun main() {
val list = listOf(1, 2, 3, 4, 5)
val summary = with(list) {
"Size=$size, First=${first()}, Last=${last()}"
}
println(summary)
}with กับ run
with(obj) { ... } และ obj.run { ... } ทำงานเกือบเหมือนกัน ความแตกต่างอยู่ที่ไวยากรณ์:
runเป็นฟังก์ชันส่วนขยายที่เรียกใช้กับอ็อบเจ็กต์ จึงทำงานร่วมกับการเรียกแบบปลอดภัยได้ดีwithรับอ็อบเจ็กต์เป็นอาร์กิวเมนต์ และอ่านได้เป็นธรรมชาติในความหมายว่า กำลังทำงานกับอ็อบเจ็กต์นี้
fun main() {
val s = "data"
val a = with(s) { uppercase() }
val b = s.run { uppercase() }
println("$a $b")
}with ไม่เหมาะกับค่าที่อาจไม่มีค่า
เนื่องจากอ็อบเจ็กต์ถูกส่งเข้ามาเป็นอาร์กิวเมนต์ with จึงทำงานร่วมกับโอเปอเรเตอร์เรียกแบบปลอดภัยได้ไม่ดีนัก สำหรับตัวรับที่อาจไม่มีค่า ควรเลือกใช้ obj?.run { } หรือ obj?.let { }
fun main() {
val name: String? = "Eve"
name?.run { println("Hello $this") }
println("with is awkward for nullables")
}การอ่านค่าและการคำนวณร่วมกัน
รูปแบบที่พบบ่อยคือการอ่านคุณสมบัติหลายรายการและคำนวณผลลัพธ์เดียว ทั้งหมดภายในบล็อกเดียวที่อ่านได้ง่าย
data class Order(val items: Int, val pricePerItem: Int)
fun main() {
val order = Order(3, 20)
val total = with(order) {
items * pricePerItem
}
println("Total: $total")
}การสร้างข้อความด้วย with
เมื่อใช้ร่วมกับ buildString หรือ StringBuilder with จะช่วยให้เขียนโค้ดสำหรับสร้างข้อความได้อย่างเป็นระเบียบโดยไม่ต้องใช้คำนำหน้า
fun main() {
val report = StringBuilder()
with(report) {
appendLine("Report")
appendLine("======")
appendLine("All good")
}
print(report)
}การใช้ with กับคอลเลกชัน
คุณสามารถเรียกใช้ฟังก์ชันของคอลเลกชันหลายรายการกับรายการเดียวกันได้โดยไม่ต้องเขียนชื่อรายการซ้ำ
fun main() {
val numbers = listOf(10, 20, 30)
with(numbers) {
println("Sum: ${sum()}")
println("Max: ${max()}")
println("Average: ${average()}")
}
}ควรใช้ with เมื่อใด
เลือกใช้ with เมื่อคุณมีอ็อบเจ็กต์ที่ไม่เป็นค่าว่างและต้องการดำเนินการหลายอย่างกับอ็อบเจ็กต์นั้น โดยจะคืนค่าผลลัพธ์หรือไม่ก็ได้ ฟังก์ชันนี้สื่อความหมายว่า กำลังทำงานกับอ็อบเจ็กต์นี้อยู่ระยะหนึ่ง
แบบทดสอบสั้น ๆ
ทบทวน
with จัดกลุ่มการดำเนินการกับอ็อบเจ็กต์ที่ไม่เป็นค่าว่างหนึ่งรายการซึ่งส่งเข้ามาเป็นอาร์กิวเมนต์ เปิดให้อ้างอิงอ็อบเจ็กต์นั้นด้วย this และคืนค่าผลลัพธ์ของแลมบ์ดา ฟังก์ชันนี้คล้ายกับ run แต่ใช้ไวยากรณ์แบบส่งอาร์กิวเมนต์ ถัดไป คุณจะได้เรียนรู้วิธีเลือกฟังก์ชันขอบเขตที่เหมาะสมสำหรับแต่ละสถานการณ์
คำถามที่พบบ่อย
บทเรียน “with” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “with” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “with”
จัดกลุ่มการดำเนินการ คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “with” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ