Kotlin Academy · บทเรียน

apply และ also

กำหนดค่าและจัดการผลข้างเคียง

บทเรียน 2 จาก 413 ขั้นตอน

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

การกำหนดค่าอ็อบเจ็กต์

apply และ also เป็นฟังก์ชันขอบเขตที่คืนค่า อ็อบเจ็กต์เอง แทนที่จะคืนค่าผลลัพธ์ของแลมบ์ดา จึงเหมาะอย่างยิ่งสำหรับการกำหนดค่าและการเรียกต่อกัน

ฟังก์ชัน apply

apply จะเรียกใช้บล็อกโดยให้อ็อบเจ็กต์เป็น this และคืนค่าเป็น อ็อบเจ็กต์ ฟังก์ชันนี้เป็นเครื่องมือมาตรฐานสำหรับกำหนดค่าเริ่มต้นให้อ็อบเจ็กต์หลังจากสร้างขึ้น

fun main() {
    val builder = StringBuilder().apply {
        append("Hello")
        append(", ")
        append("World")
    }
    println(builder.toString())
}

เหตุผลที่ apply คืนค่าอ็อบเจ็กต์

เนื่องจาก apply คืนค่าตัวรับ คุณจึงสามารถกำหนดอ็อบเจ็กต์ที่ตั้งค่าแล้วให้กับตัวแปรได้โดยตรง

data class Person(var name: String = "", var age: Int = 0)

fun main() {
    val p = Person().apply {
        name = "Alice"
        age = 30
    }
    println(p)
}

apply ใช้ this

ภายใน apply อ็อบเจ็กต์จะเป็นตัวรับ ดังนั้นคุณจึงเข้าถึงคุณสมบัติของอ็อบเจ็กต์ได้โดยตรงโดยไม่ต้องมีคำนำหน้า

data class Config(var host: String = "", var port: Int = 0)

fun main() {
    val config = Config().apply {
        host = "localhost"
        port = 8080
    }
    println("${config.host}:${config.port}")
}

ฟังก์ชัน also

also จะเรียกใช้บล็อกโดยให้อ็อบเจ็กต์เป็น it และคืนค่าเป็น อ็อบเจ็กต์ ฟังก์ชันนี้ใช้สำหรับผลข้างเคียง เช่น การบันทึกข้อมูลหรือการตรวจสอบความถูกต้อง ซึ่งไม่ได้เปลี่ยนอ็อบเจ็กต์

fun main() {
    val numbers = mutableListOf(1, 2, 3)
    numbers
        .also { println("Before: $it") }
        .add(4)
    println("After: $numbers")
}

also ใช้ it

เนื่องจาก also เปิดให้อ้างอิงอ็อบเจ็กต์ด้วย it จึงสะดวกเมื่อคุณยังต้องการอ้างอิง this ภายนอก หรือเพียงต้องการระบุการอ้างอิงให้ชัดเจน

fun main() {
    val value = 42
        .also { println("Logging value: $it") }
    println(value)
}

apply กับ also

ความแตกต่างนี้คล้ายกับความแตกต่างระหว่าง run กับ let:

  • apply ใช้ this และเหมาะที่สุดสำหรับกำหนดค่าคุณสมบัติ
  • also ใช้ it และเหมาะที่สุดสำหรับผลข้างเคียงที่เกิดกับอ็อบเจ็กต์

ทั้งสองฟังก์ชันคืนค่าอ็อบเจ็กต์เดิม

data class Box(var size: Int = 0)

fun main() {
    val box = Box()
        .apply { size = 5 }
        .also { println("Created box with size ${it.size}") }
    println(box)
}

การเรียก apply และ also ต่อกัน

เนื่องจากทั้งสองฟังก์ชันคืนค่าอ็อบเจ็กต์ คุณจึงสามารถเรียกต่อกันเพื่อกำหนดค่าก่อน แล้วจึงดำเนินการที่ทำให้เกิดผลข้างเคียงในกระบวนการต่อเนื่องที่อ่านได้ลื่นไหล

data class Account(var owner: String = "", var balance: Int = 0)

fun main() {
    val account = Account()
        .apply { owner = "Sam" }
        .apply { balance = 100 }
        .also { println("New account: $it") }
    println(account.balance)
}

also สำหรับการตรวจสอบความถูกต้อง

ใช้ also เพื่อแทรกการตรวจสอบไว้ตรงกลางการเรียกต่อกันโดยไม่ทำให้ลำดับการทำงานสะดุด

fun main() {
    val result = listOf(1, 2, 3, 4)
        .filter { it % 2 == 0 }
        .also { check(it.isNotEmpty()) { "No even numbers" } }
    println(result)
}

การคืนค่าอ็อบเจ็กต์ช่วยให้สร้างกระบวนการต่อเนื่องได้

คุณสมบัติร่วมของ apply และ also คือทั้งสองฟังก์ชันไม่ขัดจังหวะการเรียกต่อกัน เพราะจะส่งอ็อบเจ็กต์เดิมที่คุณเริ่มต้นกลับคืนมาเสมอ

fun main() {
    val text = StringBuilder()
        .apply { append("a") }
        .also { it.append("b") }
        .apply { append("c") }
    println(text)
}

การเลือกใช้ apply หรือ also

เลือกใช้ apply เมื่อกำหนดค่าเริ่มต้นหรือเปลี่ยนอ็อบเจ็กต์โดยใช้สมาชิกของอ็อบเจ็กต์เอง เลือกใช้ also เมื่อดำเนินการที่ใช้อ็อบเจ็กต์แต่ไม่ได้กำหนดค่าให้อ็อบเจ็กต์ เช่น การบันทึกข้อมูล การแก้ไขข้อบกพร่อง หรือการตรวจสอบความถูกต้อง

แบบทดสอบสั้น ๆ

apply และ also คืนค่าใด

ทบทวน

คุณได้เรียนรู้ฟังก์ชันขอบเขตสองฟังก์ชันที่คืนค่าอ็อบเจ็กต์:

  • apply ใช้ this สำหรับกำหนดค่าให้อ็อบเจ็กต์
  • also ใช้ it สำหรับผลข้างเคียงที่เกิดกับอ็อบเจ็กต์

ทั้งสองฟังก์ชันคืนค่าอ็อบเจ็กต์ จึงช่วยให้สร้างการเรียกต่อกันที่เป็นระเบียบได้ ถัดไป คุณจะได้จัดกลุ่มการดำเนินการด้วย with

เริ่มต้นได้ฟรี

เรียนรู้ Kotlin ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
51
บทเรียน
203

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

บทเรียน “apply และ also” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “apply และ also”

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

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

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

บทเรียน “apply และ also” ใช้เวลานานแค่ไหน

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

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

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

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

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