ตอนที่ 2 iOS Swift ฟังก์ชั่นและ Closures

  1. การนิยามและการเรียกใช้ฟังก์ชัน
  2. พารามิเตอร์ของฟังก์ชันและประเภทการส่งคืน
  3. Closures และการจับค่า (Capturing Values)
  4. ฟังก์ชันลำดับที่สูงกว่า (Higher-Order Functions)

iOS Swift ซึ่งเป็นภาษาสำหรับทำแอพที่ทรงพลังที่พัฒนาโดย Apple ได้กลายเป็นตัวเลือกสำหรับการรับทำแอพ iOS, macOS, watchOS และ tvOS อย่างรวดเร็ว หนึ่งในแง่มุมที่น่าสนใจที่สุดของ iOS Swift คือการเน้นที่ไวยากรณ์ที่สะอาดและอ่านง่าย ซึ่งทำให้การทำแอพสามารถเขียนและบำรุงรักษาโค้ดได้ง่ายขึ้น ในบทความนี้ เราจะสำรวจแนวคิดที่สำคัญของฟังก์ชันและการปิด (Closures) ใน Swift ซึ่งครอบคลุมหัวข้อต่างๆ เช่น การกำหนดและการเรียกใช้ฟังก์ชัน พารามิเตอร์ของฟังก์ชันและประเภทการส่งคืน การปิด (Closures) การจับค่า (Capturing Values) และฟังก์ชันที่มีลำดับสูงกว่า (Higher-Order Functions)

1. การนิยามและการเรียกใช้ฟังก์ชัน

ใน Swift ฟังก์ชันถือเป็นพลเมืองชั้นหนึ่ง ซึ่งหมายความว่าสามารถใช้ในลักษณะเดียวกับประเภทข้อมูลอื่นๆ เช่น Int, String หรือ Float ฟังก์ชันถูกกำหนดโดยใช้คีย์เวิร์ด ‘func’ ตามด้วยชื่อฟังก์ชัน รายการพารามิเตอร์ที่อยู่ในวงเล็บ ลูกศร (->) และประเภทการคืนค่าของฟังก์ชัน เนื้อหาของฟังก์ชันอยู่ในวงเล็บปีกกา

ตัวอย่างเช่น เรามากำหนดฟังก์ชันอย่างง่ายที่บวกเลขจำนวนเต็มสองตัวแล้วคืนค่าผลรวม:

func add(a: Int, b: Int) -> Int {
    return a + b
}

ในการเรียกใช้ฟังก์ชัน ให้ใช้ชื่อตามด้วยอาร์กิวเมนต์ภายในวงเล็บ:

let sum = add(a: 3, b: 5)
print(sum) // Output: 8

2. พารามิเตอร์ของฟังก์ชันและประเภทการส่งคืน

ฟังก์ชัน Swift สามารถมีได้หลายพารามิเตอร์ และแต่ละพารามิเตอร์ต้องมีชื่อและประเภท พารามิเตอร์ถูกคั่นด้วยเครื่องหมายจุลภาคในวงเล็บต่อท้ายชื่อฟังก์ชัน ประเภทการส่งคืนจะถูกระบุหลังลูกศร (->) และสามารถเป็นประเภทข้อมูล iOS Swift ที่ถูกต้องใดก็ได้

คุณยังสามารถกำหนดฟังก์ชันโดยไม่มีพารามิเตอร์หรือส่งคืนค่า:

func greet() {
    print("Hello, world!")
}

greet() // Output: Hello, world!

หากฟังก์ชันไม่มีค่าส่งคืน คุณสามารถละเว้นลูกศรและประเภทการส่งคืน:

func displayGreeting(name: String) {
    print("Hello, \(name)!")
}

displayGreeting(name: "Alice") // Output: Hello, Alice!

3. Closures และการจับค่า (Capturing Values)

Closures เป็นบล็อคโค้ดในตัวที่สามารถส่งต่อและใช้ในโค้ดของคุณได้ Closuresใน Swift นั้นคล้ายกับแลมบ์ดาหรือฟังก์ชันนิรนามในภาษาโปรแกรมอื่นๆ Closures ของ Swift มีไวยากรณ์ที่ชัดเจนและชัดเจนซึ่งช่วยให้สามารถแสดงฟังก์ชันการทำงานที่กระชับได้

Closures สามารถบันทึกและจัดเก็บการอ้างอิงถึงตัวแปรและค่าคงที่จากบริบทโดยรอบที่กำหนดไว้ สิ่งนี้เรียกว่า “การจับค่า (Capturing Values)”

ต่อไปนี้คือตัวอย่าง Closures ที่รวบรวมค่า:

func makeIncrementer(incrementAmount: Int) -> () -> Int {
    var total = 0

    let incrementer: () -> Int = {
        total += incrementAmount
        return total
    }

    return incrementer
}

let incrementByTwo = makeIncrementer(incrementAmount: 2)
print(incrementByTwo()) // Output: 2
print(incrementByTwo()) // Output: 4

4. ฟังก์ชันลำดับที่สูงกว่า (Higher-Order Functions)

ฟังก์ชันลำดับที่สูงกว่าคือฟังก์ชันที่รับฟังก์ชันอื่นเป็นอาร์กิวเมนต์หรือส่งกลับเป็นผลลัพธ์ ไลบรารีมาตรฐานของ iOS Swift มีฟังก์ชันที่มีลำดับสูงกว่าหลายฟังก์ชันสำหรับการทำงานกับคอลเลกชัน เช่น ‘map’ ‘filter’ และ ‘reduce’

ตัวอย่างเช่น ลองใช้ฟังก์ชัน ‘map’ เพื่อยกกำลังสองแต่ละองค์ประกอบในอาร์เรย์ของจำนวนเต็ม:

let numbers = [1, 2, 3, 4, 5]
let squaredNumbers = numbers.map { (number) -> Int in
    return number * number
}

print(squaredNumbers) // Output: [1, 4, 9, 16, 25]

สามารถใช้ฟังก์ชัน ‘filter’ เพื่อสร้างอาร์เรย์ใหม่ที่ประกอบด้วยองค์ประกอบที่ตรงตามเงื่อนไขที่กำหนดเท่านั้น:

let evenNumbers = numbers.filter { (number) -> Bool in
    return number % 2 == 0
}
print(evenNumbers) // Output: [2, 4]

ฟังก์ชัน ‘reduce’ ใช้เพื่อรวมองค์ประกอบทั้งหมดในคอลเลกชันให้เป็นค่าเดียวโดยใช้ฟังก์ชันที่ระบุ:

let sumOfNumbers = numbers.reduce(0) { (currentSum, number) -> Int in
    return currentSum + number
}
print(sumOfNumbers) // Output: 15

ความยืดหยุ่นของ iOS Swift ในการจัดการกับฟังก์ชันและการปิดทำให้วิธีการทำแอพ iOS และแพลตฟอร์มอื่นๆ มีประสิทธิภาพและชัดเจน เมื่อเข้าใจพื้นฐานของการกำหนดและการเรียกใช้ฟังก์ชัน พารามิเตอร์ของฟังก์ชันและประเภทการส่งคืน การปิดและการจับค่า และฟังก์ชันลำดับที่สูงกว่า คุณจะสามารถสร้างโค้ดที่สะอาด บำรุงรักษา และมีประสิทธิภาพใน Swift ได้

ใช้ประโยชน์จากฟังก์ชันและการปิดระดับเฟิร์สคลาสของ Swift เพื่อสร้างรหัสโมดูลาร์และใช้ซ้ำได้ ซึ่งอ่านและบำรุงรักษาได้ง่าย ไม่ว่าคุณจะรับทำแอพ iOS ที่มีประสบการณ์หรือเพิ่งเริ่มต้น การเรียนรู้แนวคิดเหล่านี้อย่างเชี่ยวชาญจะช่วยพัฒนาทักษะของคุณอย่างไม่ต้องสงสัย และช่วยให้คุณทำแอพ iOS Swift ได้ดีขึ้น

เขียน App iOS Swift

ตอนที่ 1 iOS Swift แนะนำเบื้องต้น
ตอนที่ 3 iOS Swift คอลเลกชัน (Collections)