Site logo
Authors
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
Published on
Published on

Tìm Hiểu Function Trong Swift

Function Là Gì?

Function (hàm) là một khối mã được định nghĩa để thực hiện một nhiệm vụ cụ thể. Bạn có thể coi function như một đoạn code nhỏ, được đặt tên và có thể được gọi lại nhiều lần trong chương trình của bạn. Một function có thể nhận đầu vào (parameters), thực hiện các thao tác, và trả về kết quả (return value). Function giúp bạn tổ chức code một cách rõ ràng, tránh lặp lại code và tăng tính đọc hiểu của chương trình.

Cú Pháp Function

Cú pháp cơ bản để khai báo function trong Swift:

func functionName(parameters) -> ReturnType {
    // Code thực thi
    return value
}
  • func : Từ khóa khai báo function.

  • functionName : Tên của function.

  • parameters : Tham số đầu vào, nếu có.

  • ReturnType : Kiểu dữ liệu trả về. Nếu không trả về giá trị, sử dụng Void hoặc bỏ qua.

Ví dụ Cơ Bản

func greet(name: String) -> String {
    return "Hello, \(name)!"
}

let message = greet(name: "Alice")
print(message) // Kết quả: Hello, Alice!

Function Không Có Tham Số

Một function không có tham số được khai báo mà không cần truyền vào dữ liệu.

func sayHello() {
    print("Hello, World!")
}

sayHello() // Kết quả: Hello, World!

Function Với Nhiều Tham Số

Bạn có thể định nghĩa một function với nhiều tham số:

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

let result = addNumbers(a: 5, b: 10)
print(result) // Kết quả: 15

Function Không Trả Về Giá Trị

Nếu function không trả về giá trị, bạn có thể sử dụng kiểu trả về là Void hoặc bỏ qua phần -> Void.

func printMessage(message: String) {
    print(message)
}

printMessage(message: "Swift is amazing!") // Kết quả: Swift is amazing!

Thay Đổi Tên Tham Số (Argument Labels)

Swift cho phép bạn định nghĩa tên khác cho tham số khi gọi function (argument labels).

func multiply(x number1: Int, y number2: Int) -> Int {
    return number1 * number2
}

let result = multiply(x: 4, y: 5)
print(result) // Kết quả: 20

Trong ví dụ trên:

  • xxyargument labels (tên gọi khi sử dụng function).
  • number1number1number2 là tên thực tế sử dụng bên trong function.

Tham Số Mặc Định

Bạn có thể cung cấp giá trị mặc định cho tham số. Nếu không truyền tham số, Swift sẽ sử dụng giá trị mặc định.

func greetUser(name: String = "Guest") {
    print("Hello, \(name)!")
}

greetUser() // Kết quả: Hello, Guest!
greetUser(name: "Alice") // Kết quả: Hello, Alice!

Trả Về Nhiều Giá Trị (Sử Dụng Tuple)

Function trong Swift có thể trả về nhiều giá trị bằng cách sử dụng tuple .

func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, average: Double) {
    let min = scores.min() ?? 0
    let max = scores.max() ?? 0
    let average = Double(scores.reduce(0, +)) / Double(scores.count)
    return (min, max, average)
}

let stats = calculateStatistics(scores: [10, 20, 30, 40])
print("Min: \(stats.min), Max: \(stats.max), Average: \(stats.average)")
// Kết quả: Min: 10, Max: 40, Average: 25.0

Function Lồng Nhau (Nested Functions)

Swift cho phép bạn định nghĩa một function bên trong một function khác.

func outerFunction() {
    func innerFunction() {
        print("This is the inner function!")
    }
    print("This is the outer function!")
    innerFunction()
}

outerFunction()
// Kết quả:
// This is the outer function!
// This is the inner function!

Tham Số Biến Đổi (Variadic Parameters)

Một function có thể nhận một số lượng tham số không giới hạn bằng cách sử dụng dấu ....

func sumNumbers(numbers: Int...) -> Int {
    return numbers.reduce(0, +)
}

let total = sumNumbers(numbers: 1, 2, 3, 4, 5)
print(total) // Kết quả: 15

Function Là Đối Tượng First-Class

Trong Swift, function là đối tượng first-class . Bạn có thể gán một function vào biến, hoặc truyền nó như tham số.

Gán Function Vào Biến

func greet(name: String) -> String {
    return "Hello, \(name)!"
}

let greetingFunction = greet
print(greetingFunction("Alice")) // Kết quả: Hello, Alice!

Truyền Function Như Tham Số

func applyOperation(_ operation: (Int, Int) -> Int, a: Int, b: Int) -> Int {
    return operation(a, b)
}

let result = applyOperation({ $0 + $1 }, a: 5, b: 10)
print(result) // Kết quả: 15

Inout Parameters (Tham Số Truyền Theo Tham Chiếu)

Sử dụng từ khóa inout để truyền tham số theo tham chiếu, cho phép function thay đổi giá trị của biến bên ngoài.

func increment(number: inout Int) {
    number += 1
}

var value = 10
increment(number: &value)
print(value) // Kết quả: 11

Bài Tập Thực Hành

  1. Tạo một function tính tổng các số lẻ trong mảng.
  2. Viết một function kiểm tra một chuỗi có phải là palindrome hay không.
  3. Viết một function trả về số lớn nhất và nhỏ nhất trong một mảng số nguyên.

Kết Luận

Function giúp tổ chức mã của bạn rõ ràng hơn, giảm sự trùng lặp và tăng tính tái sử dụng. Swift cung cấp nhiều tính năng mạnh mẽ cho function, từ việc định nghĩa đơn giản đến các kỹ thuật nâng cao như trả về nhiều giá trị, tham số biến đổi, và function lồng nhau.

Hãy thực hành thường xuyên để làm quen và thành thạo các khái niệm này, giúp bạn xây dựng mã nguồn mạnh mẽ và hiệu quả hơn trong Swift! 🚀

Mở rộng.

  • Higher-order function
  • Recursive function
  • Function overloading
  • Default parameter
  • Inout parameter
  • Closure