Cấu trúc lặp được sử dụng để thực thi một khối lệnh nào đó lặp đi lặp lại nhiều lần. Nếu bạn đã từng học qua một ngôn ngữ lập trình nào đó thì mình tin chắc rằng bạn sẽ thấy được sự quan trọng của nó. Nội dung của bài này chủ yếu tập trung vào phương pháp sử dụng cấu trúc lặp trong Swift. Hy vọng rằng qua bài học này các bạn sẽ biết được cách sử dụng cấu trúc lặp trong Swift.
Cấu trúc lặp for-in
Khác với các ngôn ngữ lập trình khác, Swift chỉ hỗ trợ duy nhất một cấu trúc lặp for. Đó là for-in, cấu trúc này được sử dụng để lặp đi lặp lại một khối lệnh nào đó một cách tuần tự trong một tập hợp hoặc vùng giá trị cho trước.
☞ Lưu ý: sử dụng for-in khi đã xác định được phạm vi của vùng giá trị hoặc tập hợp muốn lặp. Còn nếu không thể xác định được phạm vi của tập hợp thì chúng ta nên dùng giải pháp khác.
Cú pháp khai báo
☞ Từ cú pháp trên, các bạn có thể thấy rằng để sử dụng for-in thì chúng ta cần phải chỉ ra được vùng giá trị hoặc tập hợp cần lặp. Đây chính một miền giá trị để xác định số lần lặp cho cấu trúc lệnh trên.
Ví dụ
Vận dụng cú pháp ở trên, chúng ta xét ví dụ như sau:
Nhìn ví dụ trên, các bạn có biết vòng lặp này thực hiện bao nhiêu lần không? Chúng ta thử phân tích chỗ này một chút nhé.
☞ Đầu tiên, chúng ta sẽ có một chỉ số lặp (trong trường hợp này là index). Index sẽ đại diện cho 01 phần tử nhất định bên trong tập hợp. Phần tử này sẽ được thay đổi tuần tự ở mỗi một lần lặp, vì vậy mà vòng lặp for-in sẽ đảm bảo duyệt qua mỗi một phần tử 01 lần (không duyệt lại).
☞ Tiếp theo là một tập hợp các giá trị, trong ví dụ này là 0…10 (đây là toán tử phạm vi). Tập hợp này liệt kê cho chúng ta một miền các giá trị cần lặp, miền này có bao nhiêu phần tử thì sẽ lặp bấy nhiêu lần.
☞ Cuối cùng là câu lệnh print, câu lệnh này sẽ in ra giá trị mà index nắm giữ. Nói đến đây thì các bạn đã hiểu là kết quả sẽ như thế nào chưa? Mình tin rằng các bạn đã biết kết quả là gì rồi phải không nào? Giờ thì cùng so sánh thử kết quả bên dưới nhé
Có khác so với kết quả mà các bạn nghĩ không?
Khuyết chỉ số lặp
Về cơ bản thì cấu trúc for-in sẽ luôn tuân thủ theo cú pháp trên. Tuy nhiên trong thực tế, không phải lúc nào chúng ta cũng cần sử dụng chỉ số lặp. Vì vậy nếu chỉ cần lặp một khối lệnh nào đó mà không sử dụng đến chỉ số lặp, thì có thể dùng dấu “_” để bỏ khuyết.
☞ Ví dụ:
☞ Chúng ta có thể thấy rằng index đã được bỏ khuyết mà không ảnh hưởng gì tới vòng lặp. Vòng lặp trên chỉ đơn thuần là thực hiện việc đếm số lần lặp mà thôi. Nếu các bạn có khai báo index thì cũng không sao cả, nhưng không dùng đến thì nên bỏ khuyết nó đi nhé. Tới đây, mình nghĩ các bạn đều các biết kết quả là gì phải không? Mình sẽ không viết kết quả ra nữa, mà các bạn thử comment bên dưới xem thử nhé.
Cấu trúc lặp while
Được sử dụng để lặp đi lặp lại một khối lệnh nào đó theo một điều kiện lặp cho trước. Đây là một cấu trúc lặp khá quen thuộc, có mặt trên hầu hết các ngôn ngữ lập trình khác.
Cú pháp khai báo
Từ cú pháp trên, các bạn có thể thấy rằng while không cần chỉ số lặp như for-in. Bên cạnh đó, while cũng không cần một tập hợp hay vùng giá trị nào để kiểm soát vòng lặp cả. Toàn bộ việc lặp đều phụ thuộc vào biểu thức điều kiện lặp, vì vậy các bạn cần hết sức lưu ý biểu thức lặp này. Do nếu quản lý không tốt thì rất dễ dẫn tới việc lặp vô hạn và khiến cho chương trình bị “treo”.
Ví dụ
Chúng ta sẽ xây dựng thử ví dụ sau:
Phân tích ví dụ trên, chúng ta có biến count được dùng để đếm số lần lặp. Bên cạnh đó với mỗi một lần lặp, chúng ta sẽ in biến count này ra màn hình. Điều kiện lặp ở đây là, khi count còn nhỏ hơn 10 thì vẫn sẽ còn thực hiện việc lặp. Kết quả chúng ta nhận được sẽ như sau:
Vòng lặp while chỉ đơn giản như vậy thôi các bạn ạ. Thế nhưng đây cũng là vòng lặp hay được dùng nhất trong hầu hết các ngôn ngữ lập trình. Vì vậy các bạn cũng nên lưu ý nó một xíu nhé.
Cấu trúc lặp repeat … while
Cấu trúc lặp này gần tương tự như cấu trúc while. Được sử dụng để lặp đi lặp lại một khối lệnh nào đó theo một biểu thức điều kiện lặp cho trước nhưng:
- Cấu trúc này sẽ thực hiện khối lệnh trước, sau đó mới kiểm tra điều kiện lặp. Ý nghĩa của nó giống với cấu trúc do…while trong ngôn ngữ C đó các bạn ạ.
- Đặc trưng của cấu trúc lặp này là sẽ luôn luôn thực hiện khối lệnh ít nhất 01 lần.
Cú pháp khai báo
Các bạn có thấy là cú pháp trên có hơi khác xíu so với while không? Biểu thức điều kiện lặp được đưa xuống dưới cùng. Điều đó cho thấy rằng khối lệnh lặp sẽ được thực hiện trước, sau đó mới tiến hành kiểm tra điều kiện lặp. Nếu còn thoả điều kiện của biểu thức thì mới thực hiện vòng lặp tiếp theo.
Ví dụ
Chúng ta sẽ xây dựng thử ví dụ như sau để so sánh với while nhé.
Theo các bạn, kết quả chúng ta nhận được là gì? Hãy thử so sánh với while xem có gì khác nhau không? Chỗ này mình sẽ không viết kết quả ra nữa, các bạn hãy tự trả lời bằng cách comment lại bên dưới nhé.
Quản lý vòng lặp
Trong thực tế, không phải lúc nào chúng ta cũng thực hiện trọn vẹn hết một vòng lặp. Mà đôi khi chúng ta cũng cần ngừng vòng lặp tại một thời điểm nào đó. Swift hỗ trợ cho chúng ta lệnh break và continue tương tự ngôn ngữ C để hỗ trợ chúng ta quản lý vòng lặp. Ý nghĩa của nó cũng tương tự như C mà thôi:
- Lệnh break: khi gặp lệnh này thì ngay lập tức vòng lặp sẽ ngừng lại và kết thúc.
- Lệnh continue: khi gặp lệnh này thì hệ thống sẽ bỏ qua những câu lệnh còn lại chưa được thực hiện trong lần lặp hiện tại và bắt đầu thực hiện lần lặp mới tiếp theo.
Việc quản lý vòng lặp nghe có vẻ ghê gớm nhưng cũng chỉ đơn giản vậy thôi. Phần này không có quá nhiều ý, vì vậy mình sẽ chỉ trình bày đơn giản gắn gọn vậy thôi.
Tổng kết
Tóm lại nội dung phần này mình đã trình bày cho các bạn 03 vòng lặp hay dùng trong Swift. Phần này mình thường thấy các bạn mới hay bị rối và thường không nắm được bản chất của việc lặp. Bản chất của nó sẽ không khó hiểu nếu các bạn chịu khó chạy từng bước 1 các bạn nhé. Đối với các bạn mới thì hãy lấy giấy ra và thử thực hiện từng bước một, nếu vẫn còn không hiểu chỗ nào thì comment bên dưới nhé.