จากตอนที่แล้วเราได้ทำความรู้จัก ฟังก์ชั่นกันไปแล้ว ฟังก์ชั่นช่วยจัดระเบียบการเขียนโค้ดและลดโค้ดที่ซ้ำๆ กันได้ ในตอนนี้มาดูการประกาศตัวแปร หรือ พารามิเตอร์ของฟังก์ชั่นกันครับ ว่าสามารถประกาศได้กี่แบบ แต่ละแบบมีประโยชน์อย่างไร ?
รู้จักคำว่า Argument Labels และ Parameter Names
Argument Labels คือชื่อของตัวแปร ที่ถูกใช้เมื่อเรียกฟังก์ชั่น จากตัวอย่างคือ p1, p2
someFunction2(p1: 2, p2: 3) // Argument Labels
Paremeter Names คือชื่อของตัวแปร ที่ถูกประกาศเมื่อสร้างฟังก์ชั่น จากตัวอย่างคือ p1, p2
func someFunction2(p1: Int, p2: Int) { // Parameter Names
}
ปกติถ้าเราไม่กำหนดอะไรพิเศษ Argument Labels และ Parameter Names จะใช้ชื่อเดียวกัน
func someFunction2(p1: Int, p2: Int) {
}
someFunction2(p1: 2, p2: 3)
ถ้าต้องการกำหนดชื่อให้ Argument เป็นพิเศษ (Specifying Argument Labels)
สามารถทำได้โดยใส่ชื่อ Argument ไว้ก่อน Parameter Name ดังตัวอย่าง ทำให้เวลาเราเรียกใช้ฟังก์ชั่น ชื่อตัวแปรจะเปลี่ยนไปตามที่เรากำหนดไว้
func greet3(person: String, from hometown: String) -> String {
return "Hello \(person)! Glad you could visit from \(hometown)."
}
print(greet3(person: "Bill", from: "Cupertino"))
สามารถละทิ้งไม่ใส่ชื่อ Argument ได้ (Omitting Argument Labels)
โดยการใส่เครื่องหมาย _ นำหน้า Parameter Name ดังตัวอย่าง ทำให้เวลาเรียกฟังก์ชั่น เราไม่ต้องใส่ชื่อ Argument
func someFunction1(_ p1:Int, p2: Int) {
}
someFunction1(1, p2: 2)
การกำหนดค่าเริ่มต้นให้กับพารามิเตอร์ (Default Parameter Values)
ใช้เมื่อต้องการให้ฟังก์ชั่น สามารถเรียกโดยไม่ส่งค่าเข้ามาก็ได้ เมื่อไม่ส่งเข้ามาจะทำการใส่ค่าที่กำหนดไว้ ดังตัวอย่าง p2 ถ้าตอนเรียกไม่ใส่ส่งค่าเข้ามา p2 จะมีค่าเป็น 12
func someFunction(p1: Int, p2: Int = 12) {
}
someFunction(p1: 3, p2: 6)
someFunction(p1: 4)
การประกาศแบบ Variadic (Variadic Parameters)
Variadic Parameters สามารถทำให้ฟังก์ชั่นสามารถส่งค่าเข้ามาได้หลายๆ ค่า ต่อหนึ่งชนิดตัวแปร เมื่อประกาศเป็น Variadic Parameters เราให้เครื่องหมาย ... ตามหลัง ชนิดของตัวแปร ดังตัวอย่าง
func arithmeticMean(_ numbers: Double...) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
arithmeticMean(1,2,3,4,5,6)
arithmeticMean(3, 3.85)