สอน Swift ตอนที่ 5.3 Function รู้จักกับ In-Out Parameters

สอน Swift ตอนที่ 5.3 Function รู้จักกับ In-Out Parameters

รู้จักการ Pass By Value ,Pass By Reference การใช้ inout

May 16, 2017

แก้ไขล่าสุด มีผู้อ่าน 645  |  PROGRAMMING SWIFT

การส่งค่าเข้าไปให้ฟังก์ชั่นในภาษา Swift มีอยู่ด้วยกับ 2 แบบ

1. Pass By Value หรือ Pass By Copy

ตัวแปรที่ส่งเข้าไปให้กับฟังก์ชั่น ค่าในตัวแปรนั่นจะถูกกำหนดให้กับตัวแปรของฟังก์ชั่น 

 

Pass By Value

func someFunction(p1: Int, p2: Int = 12) {
    // do something
}
var num1 = 10
var num2 = 20
someFunction(p1: num1, p2: num2)
someFunction(p1: 4)

num1, num2 เป็นตัวแปรที่มีค่า 10, 20 เมื่อถูกส่งไปให้ฟังก์ชั่น someFunction แล้ว p1, p2 ก็จะได้รับค่า num1, num2 ไปทำงานต่อในฟังก์ชั่น และไม่ยุ่งเกี่ยวกับ num1, num2 อีก 

การจะเป็น Pass By Value หรือ Pass By Reference นั่นขึ้นอยู่กับชนิดของตัวแปรที่ส่งเข้าไปในฟังก์ชั่น ถ้าเป็นตัวแปรทั่วไปเช่น Int, String, Double, Struct, Array และอื่นๆ ที่ไม่ได้เป็น Instance ของ Class และ Function Type จะเป็นส่งแบบ Pass By Value โดยอัตโนมัติ 

แต่ในกรณีที่เราต้องการให้ค่าเหล่านี้สามารถส่งแบบ Pass By Refence ก็สามารถทำได้โดยการใช้ inout ตอนประกาศตัวแปรของฟังก์ชั่นดังตัวอย่างด้านล่าง 

 

Pass By Reference

func swapTwoIntsByRef(_ a: inout Int, _ b:inout Int) {
    let temporaryA = a
    a = b
    b = temporaryA
}

 

ต่อมาเมื่อเรียกใช้งานฟังก์ชั่นให้ใช้ & นำหน้าตัวแปรก็จะเป็นส่งแบบ Pass By Refence แล้วครับ 

var someInt = 3
var anotherInt = 107
swapTwoIntsByRef(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")

การส่งแบบ Pass By Reference เมื่อภายในฟังก์ชั่นมีการเปลี่ยนแปลงค่าของตัวแปร a, b ตัวแปรภายนอก someInt, anotherInt ก็จะมีค่าเปลี่ยนแปลงไปด้วย 

 

ตัวแปรที่ประกาศภายในโปรแกรมนั่น ถูกเก็บไว้ภายในหน่วยความจำ (RAM) การ Pass By Reference คือ การส่ง Address ของตัวแปรภายนอกเข้าไปให้ตัวแปรของฟังก์ชั่นอ้างอิงตำแหน่งเดียวกัน ทำให้เวลาเปลี่ยนแปลงค่าจึงเปลี่ยนแปลงทั้งคู่ 

 


แบ่งปัน

ชอบ +1

บันทึก

ฝากคำถาม คำแนะนำ ได้ที่

Facebook : Share.OlanLab.Com
LINE ID : @olanlab
อีเมล์ : olan@olanlab.com
Share คลังความรู้ด้านเทคโนโลยี สารสนเทศ นวัตกรรมคอมพิวเตอร์ สอนเขียนโปรแกรม Php Java Html CSS Javascript C C++ Objective-C และอื่นๆ บนระบบปฏิบัติการ Window Linux Unix CentOS IOS Android
โดยผู้เขียนที่มีความเชี่ยวชาญเฉพาะ ให้บริการพื้นที่สำหรับนักเขียนที่ต้องการแบ่งปันความรู้ พร้อมให้คำปรึกษาแก่ผู้ที่สนใจ โดยไม่เสียค่าใช้จ่าย