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

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 รับอ็อบเจ็กต์ของตัวเองมาอย่างไร

ทบทวน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. let และ run
  2. apply และ also
  3. with
  4. การเลือกสิ่งที่เหมาะสม
← กลับไปที่ Kotlin Academy