/ / Lập trình ios / Comment (0)

Functions – Hàm trong swift

Hàm trong lập trình Swift được viết bởi khối lệnh khép kín và được sử dụng cho một chức năng nào đó.Bạn cần đặt tên hàm sao cho tên hàm dễ nhớ và có liên quan tới chức năng mà nó sử dụng.Cũng như các ngôn ngữ lập trình khác hàm trong Swift có thể được sử dụng lại nhiều lần.Nhưng trong Swift hàm đã được cải tiến rất nhiều từ cách khai báo,tuỳ biến cũng như trả về dữ liệu.

Defining and Calling Functions – Định nghĩa và gọi hàm

Cấu trúc khai báo 1 hàm trong lập trình Swift

Cấu trúc khai báo 1 hàm trong lập trình Swift

– Khi bạn định nghĩa 1 hàm nào đó trong lập trình swift thì cần sử dụng từ khoá “func“,nó khác với cách khai báo hàm trong những ngôn ngữ lập trình khác thường là “function“,hàm có thể truyền vào tham số hoặc không, hoặc hàm có thể trả về giá trị nào đó hoặc không.Để trả về giá trị nào đó trong hàm ta dùng lệnh return
– Để gọi 1 hàm nào đó ta chỉ cần gọi ra tên của hàm đó.
Cú pháp:

func <tên hàm>(<tên tham số>: <kiểu dữ liệu>) -> <kiểu dữ liệu trả về>

Hàm không truyền vào tham số và không trả về giá trị

Ví dụ :

//khai báo hàm
func hello(){
 println("Bài học về hàm trong swift tại Hocphp.info")
}
//gọi hàm
hello()

+ Mình xây dựng hàm hello với mục địch chỉ để thực hiện 1 lệnh nào đó bên trong,hàm này không truyền vào tham số nào và cũng không trả về giá trị nào cả.

Hàm có truyền vào tham số và không trả về giá trị

Ví dụ :

//khai báo hàm
func hello(name: String){
 println("Xin chào \(name) đã đến với Hocphp.info")
}
//gọi hàm
var name = "Nobitacnt"
hello(name)
//kết quả: Xin chào Nobitacnt  đã đến với Hocphp.info

+ Mình xây dựng hàm hello với mục địch chỉ để thực hiện 1 lệnh nào đó bên trong,hàm này truyền vào tham số là 1 biến dạng String và không trả về giá trị nào cả.

Hàm không truyền vào tham số và có trả về giá trị

Ví dụ :

//khai báo hàm
func hello() -> String {
 var str: String = "Xin chào Nobitacnt đã đến với Hocphp.info"
 return str
}

//gọi hàm
var str = hello()
println(str)
//kết quả: Xin chào Nobitacnt  đã đến với Hocphp.info

+ Mình xây dựng hàm hello với mục địch để thực hiện 1 lệnh nào đó và sẽ trả về 1 giá trị dạng String, hàm này không truyền vào tham nào cả.

Hàm truyền vào tham số và trả về giá trị

Ví dụ:

//khai báo hàm
func phepNhan(a: Int,b: Int) -> Int{
   var c = a*b
   return c
}
//gọi hàm
var a = 2 //khai bao bien a
var b = 5 //khai bao bien b
var c = phepNhan(a, b) // goi ham tin phep nhan
println("Phép nhân: \(a) nhân \(b) bằng \(c)")
//kết quả: Phép nhân: 2 nhân 5 bằng 10

+ Ở ví dụ trên mình khai báo hàm phepNhan với 2 tham số truyền vào là 2 kiểu số nguyên và kết quả trả về từ hàm này 1 số nguyên,trong hàm này mình sử dụng lệnh return để thực hiện trả về giá trị của phép nhân 2 số

Functions with Multiple Return Values – Hàm với nhiều giá trị trả về

Hàm trong Swift cho phép trả về giá trị dưới dạng “tuple”.Đây là một khái niệm khá mới trong lập trình Swift. Điều này khá linh hoạt nếu bạn muốn một hàm trả về nhiều hơn một giá trị.Chúng ta hãy đi vào ví dụ sau đây để hiểu rõ hơn nhé
Ví dụ:

//khai báo hàm
func minMax(array: [Int]) -> (min:Int, max:Int) {
    var min = array[0]
    var max = array[0]
    for value in array {
        if value > max
        {
            max = value
        }else if value < min
        {
            min = value
        }
    }
    return(min, max)
}
//gọi hàm và sử dụng
var array = [1, 3, 5, 8, 9, 12]
var result = minMax(array)
println("Số nhỏ nhất: \(result.min), Số lớn nhất là: \(result.max)")
//hoặc 
println("Số nhỏ nhất: \(result.0), Số lớn nhất là: \(result.1)")
//kết quả là: Số nhỏ nhất là: 1, Số lớn nhất là: 12

+ Trong ví dụ trên mình xây dựng hàm tên là minMax, tham số truyền vào nó là 1 mảng danh sách các số nguyên,và kết quả trả về mình gắn vào biến result nó là 1 kiểu “tuple”.
+ Điều đặc biệt là đối tới tuple, bạn có thể truy cập các giá trị bằng hai cách là dùng chỉ số và dùng tên. Đây là lợi thế lớn so với kiểu Array truyền thống.

Hàm lồng nhau – Nested Functions

– Trong lập tình swift có rất nhiều hàm toàn cục có thể được gọi ra bên trong 1 hàm nào đó mà ta xây dựng,đó chính là tính chất hàm lồng nhau.Tất nhiên chúng ta cũng có thể xây dựng một hàm bên trong 1 hàm như vậy.Các hàm bên trong 1 hàm sẽ không được gọi trong các hàm khác mà chỉ hàm chứa nó được gọi ra.
– Quay lại với ví dụ hàm tính minMax ở trên,giờ mình sẽ xây dựng bởi hàm lồng nhau như sau:

//khai báo hàm
func minMax(array: [Int]) -> (min:Int, max:Int) {
    //khai bao hàm tính số nhỏ nhất, trả về sô nguyên
    func minVal() -> Int
    {
        var min = array[0]
        for value in array {
            if value < min
            {
                min = value
            }
        }
        return min
    }
    
    //khai bao hàm tính số lớn nhất, trả về số nguyên
    func maxVal() -> Int
    {
        var max = array[0]
        for value in array {
            if value > max
            {
                max = value
            }
        }
        return max
    }
    var min = minVal()
    var max = maxVal()
    return(min, max)
}

var array = [1, 3, 5, 8, 9, 12]
var result = minMax(array)
println("Số nhỏ nhất: \(result.min), Số lớn nhất là: \(result.max)")

+ Trong ví dụ trên mình xây dựng hàm tên là minMax, tham số truyền vào nó là 1 mảng danh sách các số nguyên,và kết quả trả về mình gắn vào biến result nó là 1 kiểu “tuple”.
+ Đặc biệt trong hàm này mình xây dựng 1 hàm để tính số nhỏ nhất có tên là minVal và hàm tính số lớn nhất có tên là maxVal,ngay trong hàm minMax này mình đã gọi ngay 2 hàm đó để thực hiện lấy số lớn nhất và nhỏ nhât.Đây là cách tính không tối ưu nhưng chủ yếu trong ví dụ này mình muốn các bạn thấy rõ cách xây dựng dạng mảng lồng mảng như thế nào trong ngôn ngữ lập trình Swift



05/07/2015
Tags:
Written by admin

Hiện do a Tuyền (nguyên adminsite hocphp.info) không còn thời gian để phát triển site, nên do có cơ duyên và được a tin tưởng để cho mình tiếp tục phát triển. Hi vọng mọi người cùng nhau phát triển và chia sẽ nhiều hơn nữa, ngoài ra mình cũng cố gắng chia sẽ các seri về web cũng như các ngôn ngữ khác chất nhất có thể. có gì thiếu sót hi vọng mọi người bỏ qua.

Bài viết chùng chuyên mục

Gửi bình luận

Giới thiệu

Mình tạo ra blog này với mong muốn chia sẻ và học hỏi kinh nghiệm trong quá trình thiết kế website. Website đang trong quá trình phát triển chân thành cảm ơn mọi sự góp ý của các bạn để làm cho website ngày càng hoàn thiên.

DMCA.com Protection Status
Liên hệ
Theo dõi qua Email

Tổng hợp các bài viết về

Hoc php - CodeIgniter Framework - Laravel Framework - PHP va MYSQL