Ta có thể chia Control Flow làm 2 loại:
+ Cấu trúc lặp ( lặp không có điều kiện: for-in, for ; lặp có điều kiện :while, do-while)
+ Cấu trúc rẽ nhánh ( if-then, swith-case).
I - Cấu trúc lặp ( loop ):
1 - for
+ Ban đầu chỉ số i được gán giá trị i=0, vòng lặp kết thúc khi i < 5 ,++i cho biết sau mỗi vòng lặp giá trị của i sẽ tăng lên 1. Tương tác với phần tử của mảng thông qua chỉ số này.
+ Vòng lặp For cũng khá tương đồng với vòng lặp for của C/C#/Java.
2 - for-in
+ Các bạn có thể thấy rằng khác với vòng lặp for, for-in không dùng chỉ số để xác định điều kiện kết thúc vòng lặp ( điều kiện dừng ), vòng lặp kết thúc khi duyệt hết các phần tử của mảng/từ điển.
+ Thay vì dùng chỉ số, for-in sử dụng một biến, biến này sẽ đại diện cho phần tử có vị trí tương ứng ở thời điểm lặp.
Vòng for-in tương đương với for-each trong C/C++/C#/java ( for-each cách viết sẽ khác nhau tuỳ ngôn ngữ)
Có một cách khác để biểu diễn vòng lặp for thông qua for-in :
Vận dụng: Các bạn hãy thử thêm 3 phần tử vào arrayOfItem sau đó dùng for-in để in từng phần tử ra một. Thực hành tương tự với ví dụ về dictionary. ( cách thên phần tử vào Mảng có tại [Quick basic] Bài 1: Values - Biến, hằng, mảng, từ điển .
* tuỳ trường hợp mà ta có thể sử dụng for hoặc for-in, nhưng hầu hết khi làm việc với Mảng/Từ điển ta sử dụng for-in. Vì sao lại vậy? Các bạn có thể thoải mái comment bên dưới, hiểu sao nói vậy, hoặc xem trong video của Swift4VN sẽ có lời giải thích ( video sẽ cập nhật sau ).
* for/ for-in là cấu trúc lặp thường được sử dụng khi biết trước số lần lặp.
* ta có thể đặt vòng lặp for/for-in trong một vòng lặp for/for-in khác, ta gọi đó là vòng for lồng nhau
bạn hãy dùng tính chất này vẽ ra một ma trận như sau ( đây là bài tập nhỏ đầu tiên nhé):
3 - while
+ Ta có thể hiểu cấu trúc này như sau : Cho đến khi <điều kiện còn đúng > thì còn thực hiện công việc.
+ bên trong while phải có biểu thức làm thay đổi giá trị dùng để so sánh điều kiện. Sau mỗi lần lặp giá trị này phải tiến gần đến điều kiện, nếu không vòng lặp sẽ thực hiện mãi mãi gây ra lỗi.
4 - do-while
+ do-while cũng tương tự như while, nhưng công việc được thực hiện trước khi so sánh điều kiện.
Vận dụng: Bạn hãy dùng while và do-while in ra các số nhỏ hơn 100 và chia hết cho 21.
* while/do-while là cấu trúc lặp được sử dụng khi chưa biết trước số lần lặp.
II - Cấu trúc rẽ nhánh:
1 - if-then-else, if-then
+ ta thấy rằng nếunếu điều kiện đúng thì các câu lệnh sau then sẽ được thực hiện, nếu sai thì câu lệnh sau else được thực hiện. Có thể diễn tả là nếu điều kiện đúng thì làm gì đó còn ngược lại ( điều kiện sai ) thì làm gì đó.
+ if-then sẽ khác so với if-then-else rằng: nếu điều kiện đúng thì thực hiện câu lệnh sau then, còn sai thì không làm gì cả.
Vận dụng: Các bạn hãy sử dụng if-then. if-then-else để giải quết một bài toán nhỏ: biến d thứ trong tuần ( giả sử d = 2..8 , ngoài khoảng thông báo d không hợp lệ, 8 coi như là cn). bây giờ các bạn dùng if-then, if-then-else để phân loại ra, ví dụ tôi nhập vào d là số 2 thì sẽ in ra màn hình console là thứ 2. v.v... tương tự với số khác.
2 - switch-case
switch-case là một dạng "tiến hoá" hơn của if-then, được dùng thay thế cho if-then ( bao gồm cả if-then-else) khi có một điều kiện nhưng các trường hợp xẩy ra nhiều trường hợp.
+ ta thấy là nếu d = 2 nó sẽ chạy lệnh trong case 2 và thoát khỏi cấu trúc, các lệnh trong case 3 ....8 và defaut không được thực hiện.
* Defaut sẽ được thực hiện khi kết quả đưa vào không thuộc bất cứ case nào.
Vận dụng: các bạn hãy làm lại phần vận dụng của II-1 if-then, if-then-else nhưng dùng swith-case nhé.
* Lưu ý rằng không sử dụng quá 4 vòng lặp for lồng nhau ( các bạn hãy tìm cách thay thế nó bằng while/do-while). Tương tự với while/do-while.
* Nếu so sánh cùng một điều kiện mà có tới 3 trường hợp xẩy ra bạn hoàn toàn có thể dùng switch case thể thay thế if-then/if-then-else.
* Khi chúng ta nghiên cứu sâu hơi tại [Basic] Bài 5 Control Flow thì if-then/if-then-else sẽ có cách viết đặc trưng của Swift rất gọn, và lúc dấy bạn sẽ thấy tính ưu việt của switch-case
* Nói thêm một số cách biểu diễn phép so sánh trong Swift ( và các ngôn ngữ lập trình )
Bài 2 đến đây là kết thúc!
Link download Source : Link Mediafire , Link G-Driver .
Chúng ta sẽ tiếp tục gặp nhau trong Bài 3 Functions and Closures