Kotlin Academy · บทเรียน

ส่ง Lambda ให้ฟังก์ชัน

ส่ง lambda เป็นอาร์กิวเมนต์และใช้ไวยากรณ์ lambda ต่อท้าย

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

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

ฟังก์ชันที่รับแลมบ์ดา

ฟังก์ชันระดับสูงคือฟังก์ชันที่รับฟังก์ชัน เช่น แลมบ์ดา เป็นพารามิเตอร์ นี่คือวิธีการทำงานของการแปลง การกรอง และ forEach

การประกาศฟังก์ชันระดับสูง

ใช้ชนิดข้อมูลฟังก์ชันเป็นชนิดข้อมูลของพารามิเตอร์
fun applyTwice(n: Int, op: (Int) -> Int): Int {
    return op(op(n))
}
println(applyTwice(3, { it * 2 }))  // 12

ไวยากรณ์แลมบ์ดาต่อท้าย

หากพารามิเตอร์ตัวสุดท้ายเป็นฟังก์ชัน คุณสามารถย้ายแลมบ์ดาออกมานอกวงเล็บได้ ไวยากรณ์นี้เรียกว่าแลมบ์ดาต่อท้าย
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))

// Standard:
applyTwice(3, { it * 2 })
// Trailing lambda:
applyTwice(3) { it * 2 }

แลมบ์ดาต่อท้ายโดยไม่ใช้วงเล็บ

เมื่อแลมบ์ดาเป็นอาร์กิวเมนต์เพียงรายการเดียว คุณสามารถละวงเล็บทั้งหมดได้
fun execute(block: () -> Unit) = block()

// With parens:
execute({ println("Hello") })
// Without parens (idiomatic):
execute { println("Hello") }

การส่งตัวแปรแลมบ์ดา

คุณสามารถส่งการอ้างอิงแลมบ์ดาที่เก็บไว้ได้โดยใช้ชื่อของตัวแปรนั้น
val double = { n: Int -> n * 2 }
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(5, double))  // 20

การอ้างอิงฟังก์ชันด้วย ::

ใช้ :: เพื่อส่งฟังก์ชันที่มีชื่อเป็นอาร์กิวเมนต์ที่ใช้กับแลมบ์ดาได้
fun triple(n: Int) = n * 3
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(2, ::triple))  // 18

พารามิเตอร์แลมบ์ดาหลายตัว

ฟังก์ชันสามารถรับพารามิเตอร์แลมบ์ดาได้หลายตัว แต่สามารถใช้รูปแบบไวยากรณ์แลมบ์ดาท้ายสุดได้เฉพาะพารามิเตอร์ตัวสุดท้ายเท่านั้น
fun transform(
    value: Int,
    before: (Int) -> Int,
    after: (Int) -> Int
) = after(before(value))

println(transform(5, { it * 2 }, { it + 1 }))  // 11

การส่งแลมบ์ดาให้ filter

filter รับแลมบ์ดาเพรดิเคต ซึ่งเป็นฟังก์ชันที่รับสมาชิกและคืนค่าบูลีน
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evens = numbers.filter { it % 2 == 0 }
println(evens)  // [2, 4, 6]

การเชื่อมฟังก์ชันลำดับสูง

เชื่อมการเรียกฟังก์ชันลำดับสูงหลายรายการเพื่อสร้างสายการประมวลผลข้อมูลที่สื่อความหมายได้ชัดเจน
val result = (1..10)
    .filter { it % 2 != 0 }  // odds
    .map { it * it }          // square
    .take(3)                  // first 3
println(result)  // [1, 9, 25]

แลมบ์ดากับการจับตัวแปร

แลมบ์ดาสามารถจับตัวแปรจากขอบเขตโดยรอบได้ ซึ่งเรียกว่าโคลเชอร์ ใน Kotlin แลมบ์ดายังสามารถจับและแก้ไข var ได้อีกด้วย
var total = 0
listOf(1, 2, 3, 4).forEach { total += it }
println(total)  // 10

การคืนค่าแลมบ์ดาจากฟังก์ชัน

ฟังก์ชันลำดับสูงสามารถคืนค่าแลมบ์ดาได้เช่นกัน ทำให้สามารถสร้างฟังก์ชันโรงงานได้
fun multiplierOf(factor: Int): (Int) -> Int {
    return { n -> n * factor }
}
val double = multiplierOf(2)
val triple = multiplierOf(3)
println(double(5))  // 10
println(triple(5))  // 15

ตรวจสอบความเข้าใจ

คุณสามารถย้ายแลมบ์ดาออกนอกวงเล็บโดยใช้รูปแบบไวยากรณ์แลมบ์ดาท้ายสุดได้เมื่อใด

สรุปทบทวน

ฟังก์ชันลำดับสูงรับแลมบ์ดาเป็นพารามิเตอร์ รูปแบบไวยากรณ์แลมบ์ดาท้ายสุดจะย้ายแลมบ์ดาออกนอกวงเล็บเมื่อแลมบ์ดาเป็นพารามิเตอร์ตัวสุดท้าย `::` ใช้ส่งการอ้างอิงฟังก์ชันตามชื่อ บทถัดไป: พารามิเตอร์ `it` โดยนัย
เริ่มต้นได้ฟรี

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

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

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

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

บทเรียน “ส่ง Lambda ให้ฟังก์ชัน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ส่ง Lambda ให้ฟังก์ชัน”

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

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

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

บทเรียน “ส่ง Lambda ให้ฟังก์ชัน” ใช้เวลานานแค่ไหน

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

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

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

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

  1. Lambda คืออะไร ไวยากรณ์และชนิด
  2. ส่ง Lambda ให้ฟังก์ชัน
  3. it: พารามิเตอร์โดยนัย
  4. filter, map และ find บนคอลเลกชัน
← กลับไปที่ Kotlin Academy