[Quick basic] Bài 2: Control Flow

Bài học hôm nay sẽ nói về cách sử dụng các điều khiển cơ bản: if-then (if-then-else), swith-case, for-in, for, while, do-while. Cấu trúc - cách hoạt động - cách sử dụng.
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 ):


Vòng lặp là 1 cấu trúc chương trình cho phép 1 câu lệnh hoặc 1 nhóm câu lệnh thực hiện 1 số lần có giới hạn. Giới hạn này có thể biết trước và có thể không, nhưng phải có để máy tính ngừng lại khi đủ số lần lặp ấn định trước. Giới hạn này có thể xác định bằng 1 con số cụ thể, 1 con số là kết quả của 1 phép tính, và cũng có thể là 1 điều kiện thoát ra khỏi vòng lặp.

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.

Vận dụng: Các bạn hãy Khai báo một mảng gồm 6 số bất kì rồi dùng vòng lặp for in ra từng số một.

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:


* Cấu trúc rẽ nhánh là cấu trúc cho phép thực hiện 1 câu lệnh hoặc một nhóm câu lệnh dựa vào điều kiện xác định cho trước.

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é.

Cuối bài Swift4VN có một số chia sẻ với các bạn:
* 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

Pages