- Lệnh if
- Lệnh switch/case
- Vòng lặp while/repeat
- Vòng lặp for .. in
- Điều hướng continue
- Điều hướng break
- Điều hướng fallthrough
Lệnh rẽ nhánh if trong Swift
Một cấu trúc thi hành có điều kiện nghĩa là cấu trúc đó sẽ thi hành khối lệnh tương ứng với điều kiện cụ thể nào đó. Vì dụ như nếu có lỗi (điều kiện xảy ra) thì hiện thị thông báo lỗi (khối lệnh thi hành). Lệnh rẽ nhánh if, switch là trường hợp cụ thể áp dụng cơ chế này.
Khối lệnh trong Swift
Tập hợp các câu lệnh gom lại trong dấu { ... }
gọi là khối lệnh. Ví dụ:
{ // ... các lệnh trong khối }
Lệnh if đơn giản: nếu điều kiện đúng thì thi hành khối lệnh, cú pháp như sau
if điều_kiện { //Các lệnh sẽ thi hành nếu điều_kiện là đúng }Ví dụ
var foundFile = true; if (foundFile) { print("Found file") }
Lệnh if phức tạp, lồng nhau - thi hành cấu trúc lệnh dạng - nếu điều kiện kiểm tra là đúng thì thi hành một khối lệnh 1, nếu sai thi hành khối lệnh 2
if điều_kiện { //Khối lệnh 1 - thi hành nếu điều_kiện là true } else { //Khối lệnh 2 - thi hành nếu điều_kiện là false }
Có thể lồng nhau nhiều lệnh if để kiểm tra nhiều điều kiện, cấu trúc
if điều_kiện1 { //Khối lệnh 1 - thi hành nếu điều_kiện1 là true } else if điều_kiện2 { //Khối lệnh 2 - thi hành nếu kiều_kiện1 là false, điều_kiện2 là true } else { //Khối lệnh 3 - thi hành nếu kiều_kiện2 là false, điều_kiện2 là false } //Số lệnh if lồng vào không giới hạn
Rẽ nhiều nhánh bằng lệnh switch / case
Lệnh này sẽ kiểm tra giá trị biểu thức, so sánh với mỗi trường hợp (case) - bằng trường hợp nào thì thi hành khối lệnh trường hợp đó. Cú pháp như sau:
switch biểu_thức { case giá_trị_1: //...Code thi hành nếu biểu_thức có giá trị là: giá_trị_1 case giá_trị_2: //...Code thi hành nếu biểu_thức có giá trị là: giá_trị_2 default: //...Code thi hành nếu biểu_thức bằng giá trị nào trong các case }
Bạn lưu ý có dấu :
ở phần case
, trong switch không hạn chế số lượng case
. Từ khóa default:
nhằm định nghĩ code mà không có case nào phù hợp, luôn để ở cuối. Không cần từ khóa break
ở cuối mỗi case
var wday = "Mon"; switch wday { case "Mon": print("Thứ 2") case "Tue": print("Thứ 3") default: print("Không biết") }
Kiệm tra điều kiện phức tạp với where
Ví dụ bạn sử dụng Tuple, để truyền nhiều giá trị trong biểu thức của switch, nếu muốn kiểm tra các giá trị đó - tùy thuộc vào các giá trị này mà có các case khác nhau, để làm điều này có thể tham khảo đoạn code kết hợp switch với kiểm tra điều kiện where như sau:
//Khai báo một Tuple hai giá trị var myNumbers = (10, 20) switch myNumbers { case let (x, y) where x > y: print("Số hạng 1 lớn hơn số hạng 2") case let (x, y) where x < y: print("Số hạng 1 nhỏ hơn số hạng 2") case let (x,y): print("Hai số bằng nhau") }
Trong ví dụ trên, case
khởi tạo hằng tạm thời tên x, y - giá trị khởi tạo cho nó là từ giá trị phần tử Tuple myNumbers
, sau để điều kiện kiểm tra viết sau từ khóa where
, nếu biểu thức sau where là true
thì thi hành case này
Vòng lặp while và repeat trong Swift
whileVòng lặp while: kiểm tra điều_kiện, nếu đúng chạy khối lệnh của while - nếu sai bỏ qua. Sau mỗi lần chạy kiểm tra lại điều kiện, nếu đúng chạy tiếp. Cú pháp như sau:
while điều_kiện { //Lệnh chạy }
var month = 1; while month <= 12 { print("Tháng ", month) month+=1 } //In ra Tháng 1 ... Tháng 12repeat
Lệnh while trên kiểm tra điều kiện logic trước rồi chạy khối lệnh, nhưng nếu muốn khối lệnh được chạy ít nhất một lần, sau đó mới kiểm tra điều kiện, nếu đúng bắt đầu vòng lặp mới: vậy sẽ dùng repeat ... while
với cú pháp như sau
repeat { //Các lệnh trong vòng lặp } while (điều_kiện_lặp_lại)Ví dụ:
var month2 = 1; repeat { print("Tháng ", month2) month2+=1 } while (month2 <= 12)
Các lệnh lặp trên khi dùng phải cận thận - đảm bảo một thời điều nào đó điều kiện logic kiểm tra lặp lại là sai để thoát vòng lặp, nếu không đó là vòng lặp vô hạn. Lặp với repeat
khi khối lệnh bao giờ cũng được thi hành ít nhất một lần.
Vòng lặp for .. in
Nếu muốn lặp bằng cách duyệt (đếm) qua mối dải số, các phần tử trong mảng, các ký tự trong chuỗi thì sẽ dùng đến cấu trúc lặp for .. in ..
Hãy xem một số ví dụ từ doc Swift sau:
Duyệt qua một dải số
//Biến i nhận lần lượt các giá trị từ dãy số 1,2, .. 5 for i in 1...5 { print("\(i) nhân 5 là \(i * 5)") } // 1 nhân 5 là 5 // 2 nhân 5 là 10 // 3 nhân 5 là 15 // 4 nhân 5 là 20 // 5 nhân 5 là 25
Duyệt qua các phần tử của mảng
//Khai bảo một mảng tên các môn học let subjects = ["Java", "PHP", "C++", "Swift"] //Duyệt qua từng môn học trong mảng for subject in subjects { print("Môn học \(subject)!") } //Môn học Java! //Môn học PHP! //Môn học C++! //Môn học Swift!
Duyệt qua mảng có cấu trúc dạng dictionary (từ điển). Mảng này có lưu mỗi phần tử theo cặp name:value
let hinhchunhat = ["Chiều dài":300, "Chiều rộng": 200] for (kichthuoc, giatri) in hinhchunhat { print("\(kichthuoc) là \(giatri)") } //Chiều dài là 300 //Chiều rộng là 200
Điều hướng vòng lặp với continue
Trong vòng lặp khi gặp continue
thì sẽ không thi hành các dòng code phia dưới continue
mà ngay lập tức chuyển đến lượt lặp tiếp theo. Ví dụ: in ra các số lẻ trong khoảng 1 đến 100.
for i in 1...100 { if (i%2 == 0) { continue; //lặp lại luôn do i là chẵn } print(i) }
Điều hướng break
Khi gặp break
khối lệnh bị thoát ngay lập tức. Nó hay sử dụng trong vòng lặp for, while để thoát ngay lập tức quá trình lặp.
for i in 1...100000 { if (i == 5) { continue //Khởi tạo vòng lặp mới luôn } print(i); if (i >= 7) { break //Thoát lặp nếu i >=7 } } //In ra các số: (bỏ qua 5) 0 1 2 3 4 6 7
Trong câu lệnh switch
thì break
luôn được dùng với default
để cho biết kết thucs switch khi không có case nào phù hợp:
var W = "Mon" switch W { case "Mon": print("Thứ 2") case "Tue": print("Thứ 3") default: break }
Điều hướng fallthrough
Trong câu lệnh rẽ nhánh switch
, thì khi khối lệnh phù hợp được thi hành, nghĩa là case
nào phù hợp thì thi hành các lệnh trong case đó và bỏ qua các case
phía dưới. Điều này khác với swich
trong PHP, C++ ... khi mà các case phía dưới vẫn được thi hành cho đến khi gặp break
.
Nếu muốn switch
ở Swift cũng ứng xử như vậy, thì cuối case cần thêm khóa fallthrough
let sokiemtra = 5 var dienta = "Số \(sokiemtra) là" switch sokiemtra { case 2, 3, 5, 7, 11, 13, 17, 19: dienta += " số nguyên tố, và cũng là" //Chỉ thị các case phía sau được chạy fallthrough default: dienta += " số nguyên." } print(dienta) //In ra: Số 5 là số nguyên tố, và cũng là số nguyên.