guard trong Swift

Guard trong Swift là gì?
Ở bài trước, ta đã tìm hiểu về kiểu Optional trong Swift. Ngoài sử dụng if let cho Optional Binding, ta cũng có thể dùng guard.
Syntax đầy đủ khi dùng guard:
guard <condition> else { <statements> return }
Câu 'thần chú' của mình để cho dễ hiểu là:
đảm bảo rằng <condition> nếu không thì { <statements> return }
Ví dụ nếu không dùng guard
Mình có 2 UITextField như sau:
@IBOutlet weak var usernameTF: UITextField! @IBOutlet weak var passwordTF: UITextField!
Khi lấy giá trị của UITextfield bằng cách usernameTF.text thì sẽ trả về kiểu Optional:
Chúng ta cần kiểu tra xem user có nhập đúng kiểu dữ liệu của username và password không, nếu dùng if let thì phải làm như sau:
https://gist.github.com/KhoaVanNguyen/be34e0db7d7bb21a892ddefab2d46032
Bạn sẽ thấy vấn đề là các câu if bị lồng vào nhau rất khó nhìn. Nếu cần phải check khoảng 4 cái control từ user thì càng khó nhìn hơn nữa. Việc validation sẽ dễ dàng hơn với guard như sau.
Ví dụ dùng guard
https://gist.github.com/KhoaVanNguyen/4f3ae1ae7003df85c26c1fdb3cdb71e8
Bạn sẽ thấy code nhìn dễ nhìn hơn nhiều và đúng với code style early return hơn.
Ngoài ra, bạn có thể tách riêng phần validation code để tiện cho việc unit testing và xử lý logic hơn. Ví dụ bạn cần check username xem có trùng hay không và username phải có trên 6 ký tự và username phải có ít nhất một số.
https://gist.github.com/KhoaVanNguyen/b5a0b12e6bb71f90fd96c869865eb23e
Dưới đây là một ví dụ thực tế mình dùng guard để validate các điều kiện, nếu mà dùng if sẽ cực kỳ rối mắt.
https://gist.github.com/KhoaVanNguyen/702905c91af40ee4ecd0ceda426f0fbb
Kết
Mặc dù ý tưởng dùng guard không có gì mới, nhưng việc thêm từ khóa này trong Swift cũng một phần làm ngôn ngữ này trở nên gần gũi với người lập trình hơn. Khi dùng guard bạn hãy nhớ câu: "Đảm bảo rằng ..... nếu không thì ..... ". Đây là một trong những lý do mình thích Swift vì viết code như viết tiếng Anh.
Bài viết là tài liệu đọc thêm cho khóa học iOS với Swift, bạn có thể đọc thêm nếu quan tâm.