ฟังก์ชั่น (Functions) คือ ชุดคำสั่งที่ทำงานเฉพาะอย่าง เรากำหนดชื่อฟังก์ชั่นให้สอดคล้องกับสิ่งที่ทำ ชื่อของฟังก์ชั่นยังถูกใช้เพื่อเรียกให้ฟังก์ชั่นทำงานอีกด้วย
หน้าตาของฟังก์ชั่นเป็นแบบนี้
func greet(person: String) -> String {
let greeting = "Hello, " + person + "!"
return greeting
}
การประกาศฟังก์ชั่นเริ่มต้นด้วยคำสั่ง func ตามด้วยชื่อฟังก์ชั่น ต่อมาด้วย Function Parameters และ Return Values
- Function Parameters คือ ตัวแปรที่เราต้องการส่งเข้าไปให้ฟังก์ชั่น เราส่งเข้าไปเพื่อให้ฟังก์ชั่นนำไปใช้งานต่อทำงานตามที่เราต้องการ
- Return Values คือ ค่าที่ต้องการให้ฟังก์ชั่นส่งคืนกลับออกมาภายนอกใช้งาน
รูปแบบของฟังก์ชั่นจึงเป็นไปตามด้านล่าง
func functionName(parameters) -> returnValues {
statements
return someValue
}
การเรียกใช้ เรียกด้วยชื่อของฟังก์ชั่น และ ป้อนค่า Parameters
print(greet(person: "Anna"))
// Prints "Hello, Anna!"
print(greet(person: "Brian"))
// Prints "Hello, Brian!"
ฟังก์ชั่นจะเรียกได้ ต้องการมีการประกาศก่อนการเรียกใช้เสมอ
func greetAgain(person: String) -> String {
return "Hello again, " + person + "!"
}
print(greetAgain(person: "Anna"))
// Prints "Hello again, Anna!"
ทำไมต้องใช้ฟังก์ชั่น ? (WHY)
การใช้ฟังก์ชั่นจะช่วยลดจำนวนโค้ด ง่ายต่อความเข้าใจ เมื่อต้องเขียนคำสั่งเดิมซ้ำๆ เราจับคำสั่งเหล่านี้เอาไปใส่ไว้ในฟังก์ชั่น ตัวอย่างเช่น แอพพลิเคชั่นของเรา เป็นแอพพยากรณ์อากาศต้องมีการเขียนโค้ดแปลงจาก Fahrenheit เป็น Celsius บ่อยๆ โค้ดแปลงอุณหภูมิหน้าตาเป็นแบบนี้
celsius = Int(5.0 / 9.0 * (Double(fahrenheit) - 32.0))
สมมุติถ้าวิธีการคำนวณอุณหภูมิมีการเปลี่ยนแปลง เราจำเป็นต้องแก้โค้ดทุกบรรทัดเนื่องจากวิธีการคิดอุณหภูมิเปลี่ยนไป วิธีแก้ปัญหานี้ คือ ใช้ฟังก์ชั่น
func convertToCelsius(fahrenheit: Int) -> Int {
return Int(5.0 / 9.0 * (Double(fahrenheit) - 32.0))
}
เรียกวิธีการแปลงจาก Fahrenheit เป็น Celsius จากฟังก์ชั่นแทน เมื่อต้องแก้ไขก็แก้ที่ฟังก์ชั่นที่เดียว
let fahrenheit = 100
celsius = convertToCelsius(fahrenheit)
ฟังก์ชั่นนั่นสามารถประกาศได้หลายแบบ
1. ฟังก์ชั่นที่ไม่มีตัวแปร (Function Without Parameters)
func sayHelloWorld() -> String {
return "hello, world"
}
print(sayHelloWorld())
// Prints "hello, world"
2. ฟังก์ชั่นที่ตัวแปรหลายตัว (Function With Multiple Parameters)
func greet(person: String, alreadyGreeted: Bool) -> String {
if alreadyGreeted {
return greetAgain(person: person)
} else {
return greet(person: person)
}
}
print(greet(person: "Tim", alreadyGreeted: true))
// Prints "Hello again, Tim!"
3. ฟังก์ชั่นที่ไม่การคืนค่ากลับ (Function Without Return Values)
func greet(person: String) {
print("Hello, \(person)!")
}
greet(person: "Dave")
// Prints "Hello, Dave!"
4. ฟังก์ชั่นที่มีการคืนค่าหลายค่า (Function with Multiple Return Values)
func minMax(array: [Int]) -> (min: Int, max: Int) {
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count] {
if value < currentMin {
currentMin = value
} else if value > currentMax {
currentMax = value
}
}
return (currentMin, currentMax)
}
let bounds = minMax(array: [8, -6, 2, 109, 3, 71])
print("min is \(bounds.min) and max is \(bounds.max)")
// Prints "min is -6 and max is 109"