Natasha Murashev là một cựu nhân viên FBI, một nữ lập trình viên rất nổi tiếng trong cộng đồng lập trình nói chung và iOS nói riêng. Cô cũng là thành viên của trang web NSHipster và là chủ nhân của blog Natasha The Robot, bắt đầu từ hôm nay, Techmaster sẽ dịch các bài blog hàng ngày của Natasha trên trang này để các bạn dễ dàng tham khảo và nghiên cứu hơn.

Gần đây có một thứ khiến tôi để ý trong code của mình đó là tôi thường sử dụng guard và if. Thực tế là mỗi tôi hay thay thế if bằng guard mỗi khi có thể.

Nhưng đó chính là vấn đề, có một sự khác biệt giữa guard và if và chúng ta cần phải cân nhắc sử dụng cái nào cho hợp lý. Đầu tiên đó là guard nên được dùng khi bạn muốn giá trị chắc chắn được sử dụng trong function để thực thi.

Ví dụ trong ứng dụng  try! Swift app, ở hình bên dưới, khi chúng ta muốn hiển thị một presentation session type, thì tiêu đề của presentation chính là tiêu đề của session.

Tuy nhiên, không phải session nào cũng có bài presentation, do vậy đối tượng presentation là kiểu optional, nhưng với session type, đó là một đối tượng được xác định là sẽ luôn tồn tại, do vậy đây là case thích hợp để sử dụng guard.

Talk title phải luôn có giá trị để hiển thị. Nếu không thì app sẽ crash. Đó là lý do vì sao chúng ta sử dụng guard để "bảo vệ" app trong trường hợp này.

Ở một trường hợp khác. Coffee Break session có thể có nhà tài trợ, trong case này, tiêu đề của coffee break sẽ kèm theo cả tê ncuar nhà tài trợ. Logic sẽ là, nếu có nhà tài trợ, chúng ta sẽ thêm tên nhà tài trợ vào khi hiển thị, còn không thì thôi. Ở đây, if sẽ là phương án tối ưu hơn.

 

Tổng kết lại thì:

Giống như câu lệnh if, guard thực thi các câu lệnh dựa trên giá trị Boolean, nhưng ngược với if, guard chỉ thực thi khi điều kiện không thỏa mãn. Thay vì crash app, bạn sẽ "nhẹ nhàng" thoát ra khỏi khối lệnh đó và thực thi các khối lệnh tiếp theo. Đúng như định nghĩa, guard là một tấm khiên bảo hộ cho app của bạn vậy.