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

พารามิเตอร์ In-Out และการคืนค่าหลายค่า

เปลี่ยนแปลงอาร์กิวเมนต์ด้วย inout และคืนค่าหลายค่าผ่านทูเพิล

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

ยินดีต้อนรับ

โดยปกติฟังก์ชันของ Swift ทำงานกับสำเนาของค่า พารามิเตอร์ `inout` ช่วยให้ฟังก์ชันเปลี่ยนแปลงตัวแปรของผู้เรียกได้โดยตรง ส่วนทูเพิลช่วยให้ฟังก์ชันคืนค่าหลายค่าได้พร้อมกัน

คีย์เวิร์ด inout

กำหนดพารามิเตอร์เป็น `inout` เพื่อเปลี่ยนแปลงค่าต้นฉบับ: ```swift func doubleInPlace(_ value: inout Int) { value *= 2 } var x = 5 doubleInPlace(&x) print(x) // 10 ``` คำนำหน้า `&` ณ จุดเรียกใช้สื่อว่าตัวแปรอาจถูกเปลี่ยนแปลง

inout กับโครงสร้าง

```swift struct Point { var x: Double; var y: Double } func translate(_ p: inout Point, dx: Double, dy: Double) { p.x += dx p.y += dy } var origin = Point(x: 0, y: 0) translate(&origin, dx: 3.0, dy: 4.0) // origin is now (3.0, 4.0) ```

ข้อจำกัดของ inout

• ค่าคงที่ (`let`) ไม่สามารถส่งเป็น `inout` ได้ • ค่าตามตัวอักษรไม่สามารถส่งเป็น `inout` ได้ • ตัวห้อยและคุณสมบัติที่คำนวณได้สามารถเป็น `inout` ได้ หากมีตัวกำหนดค่า ```swift let c = 5 doubleInPlace(&c) // ❌ cannot pass let as inout ```

การคืนค่าหลายค่าด้วยทูเพิล

คืนค่าหลายค่าด้วยการห่อค่าเหล่านั้นไว้ในทูเพิล: ```swift func minMax(of array: [Int]) -> (min: Int, max: Int) { (array.min()!, array.max()!) } let result = minMax(of: [3, 1, 7, 2]) print(result.min, result.max) // 1 7 ```

องค์ประกอบทูเพิลแบบมีชื่อเทียบกับไม่มีชื่อ

องค์ประกอบที่มีชื่อทำให้ทูเพิลอธิบายตัวเองได้: ```swift let named: (width: Int, height: Int) = (1920, 1080) print(named.width) // 1920 let unnamed = (1920, 1080) print(unnamed.0) // 1920 ``` ควรตั้งชื่อให้องค์ประกอบของทูเพิลที่คืนค่าจากฟังก์ชัน

การแยกโครงสร้างค่าที่คืนเป็นทูเพิล

แยกค่าที่คืนเป็นทูเพิลออกเป็นตัวแปรหลายตัว: ```swift let (minimum, maximum) = minMax(of: [5, 3, 8]) print(minimum) // 3 print(maximum) // 8 ``` ใช้ `_` เพื่อละทิ้งสมาชิกที่ไม่ต้องการ: `let (minimum, _) = minMax(of: arr)`

การคืนค่าออปชันนัลในรูปทูเพิล

คืนค่า nil ในกรณีที่ดำเนินการไม่สำเร็จ: ```swift func parse(_ s: String) -> (Int, Int)? { let parts = s.split(separator: ",") guard parts.count == 2, let a = Int(parts[0]), let b = Int(parts[1]) else { return nil } return (a, b) } ```

การสลับค่าด้วยอินเอาต์

การสลับค่าแบบคลาสสิกโดยใช้ inout: ```swift func swap(_ a: inout T, _ b: inout T) { let temp = a a = b b = temp } var m = 1, n = 2 swap(&m, &n) print(m, n) // 2 1 ``` ไลบรารีมาตรฐานของ Swift มี `swap(_:_:)` อยู่แล้ว จึงไม่จำเป็นต้องเขียนขึ้นเอง

ควรใช้ inout หรือคืนค่าเมื่อใด

ควรคืนค่าใหม่แทนการเปลี่ยนแปลงตัวแปรด้วย inout: ```swift // Prefer: func normalised(_ v: SIMD3) -> SIMD3 { v / v.magnitude } // Use inout only when mutation is expected API contract, e.g. algorithms on large arrays func sort(_ arr: inout [Int]) { arr.sort() } ```

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ต้องเติมคำนำหน้าใดที่จุดเรียกใช้ เมื่อส่งตัวแปรไปยังพารามิเตอร์ `inout`

สรุป

ประเด็นสำคัญ: • `inout` อนุญาตให้ฟังก์ชันเปลี่ยนแปลงตัวแปรของผู้เรียกได้ โดยส่งค่าด้วย `&` • ไม่สามารถส่งค่าคงที่จาก `let` หรือลิเทอรัลเป็น inout ได้ • ทูเพิลช่วยคืนค่าหลายค่าได้อย่างเป็นระเบียบ ควรตั้งชื่อสมาชิกเพื่อความชัดเจน • แยกโครงสร้างทูเพิล: `let (a, b) = f()` • ควรคืนค่าใหม่ และใช้ inout เฉพาะเมื่อการเปลี่ยนแปลงเป็นสัญญาของส่วนติดต่อโปรแกรม ถัดไป: ฟังก์ชันในฐานะค่าแบบชั้นหนึ่ง

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

บทเรียน “พารามิเตอร์ In-Out และการคืนค่าหลายค่า” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “พารามิเตอร์ In-Out และการคืนค่าหลายค่า”

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

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

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

บทเรียน “พารามิเตอร์ In-Out และการคืนค่าหลายค่า” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ป้ายกำกับอาร์กิวเมนต์และชื่อพารามิเตอร์
  2. พารามิเตอร์ค่าเริ่มต้นและพารามิเตอร์จำนวนไม่แน่นอน
  3. พารามิเตอร์ In-Out และการคืนค่าหลายค่า
  4. ฟังก์ชันในฐานะค่าแบบชั้นหนึ่ง
← กลับไปที่ Swift Academy