Xem Nhiều 12/2022 #️ – Phần 5: Đơn Giản Hoá Các Cấu Trúc Điều Khiển. / 2023 # Top 21 Trend | 3mienmoloctrungvang.com

Xem Nhiều 12/2022 # – Phần 5: Đơn Giản Hoá Các Cấu Trúc Điều Khiển. / 2023 # Top 21 Trend

Cập nhật thông tin chi tiết về – Phần 5: Đơn Giản Hoá Các Cấu Trúc Điều Khiển. / 2023 mới nhất trên website 3mienmoloctrungvang.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất.

Với tiêu chí đã đề ra xuyên suốt series này, code cần phải dễ đọc và dễ hiểu, nhiệm vụ của chúng ta là đảm bảo các xử lí rẽ nhánh và thực hiện lặp sao cho việc xử lí đó “tự nhiên” nhất có thể. Nghĩa là, người đọc không cần phải đọc đi đọc lại code nhiều lần để có thể hiểu được nội dung code – lí tưởng nhất là họ chỉ cần đọc 1 lần.

Ý tưởng chính: Đảm bảo các xử lí rẽ nhánh và vòng lặp được thực hiện một cách “tự nhiên” nhất có thể.

Để làm được điều này, chúng ta hãy xem xét những vấn đề sau đây.

Thứ tự của các tham số trong câu điều kiện

Bạn hãy thử đọc 2 cách viết code sau đây, liệu bạn có sự khác biệt nào chăng?

} if (10 <= length) { }

Có thể sự khác biệt là không nhiều, nhưng chắc hẳn là hầu hết chúng ta sẽ thấy cách viết đầu tiên thì dễ đọc và hiểu hơn cách thứ 2. Lí do rất đơn giản, cách 1 trông thuận mắt và có vẻ tự nhiên hơn.

Điều này giống như việc bạn được hỏi về khoảng cách từ nhà tới chỗ làm, giả sử quãng đường là tầm xấp xỉ tầm hơn 4km nhưng nhỏ hơn 5km. Lúc đó, bạn sẽ nói “Khoảng cách từ nhà tới văn phòng nhỏ hơn 5km” hay là “5km thì lớn hơn khoảng cách từ nhà tới văn phòng”? Hẳn rằng, bạn sẽ nói theo cách 1 phải không nào!

Vậy nên hãy chú ý: Khi tạo một lệnh so sánh, hãy đặt biến có khả năng thay đổi giá trị nằm bên trái, bên phải sẽ dành cho hằng số hoặc mốc so sánh.

Có 1 lưu ý cũng khá thú vị mà mình cũng muốn nhắc tới, đó là việc so sánh bằng nhau. Hãy thử xem xét đoạn code sau:

if ( length == 0 ) { } if (0 == length) { }

Thứ tự của các xử lí if / else

Với các xử lí if/else nhiều trường hợp, lời khuyên mà những người có kinh nghiệm đưa ra là, chúng ta nên ưu tiên xử lí trước những tình huống sau:

Ưu tiên các trường hợp đơn giản để tránh bỏ quên.

Ưu tiên các trường hợp lạ/hiếm để tránh bị bỏ sót.

Các trường hợp so sánh khẳng định thì dễ đọc hơn là so sánh phủ định.

Xử lí đúng là không đủ, mà thứ tự xử lí cũng cần phải hợp lí (Nguồn: The art of readable code)

Hình dung rằng bạn là nam, và đang muốn tuyển người yêu, điều kiện tiên quyết là ứng viên là nữ, không chấp nhận nam giới. Ngoài ra cần phải đẹp gái, hiền lành, dễ thương, biết lo lắng và quan tâm người yêu, không quá 30 nhưng lớn hơn 18, ..v.v.. Lúc đó bạn xử lí thế nào?

if (person.gender == "Male") { return false; } return false; } else if (person is cute, lovely, careful, ...) { return "Hello! Cho anh lam quen nhe!"; } if (person.gender != "Male" && chúng tôi < 30 && person is cute, lovely, careful, ...) { return "Hello! Cho anh lam quen nhe!"; } else { return false; }

Bạn sẽ chọn cách 1 hay cách 2?

Với cách 2, chúng ta có một mệnh đề if rất phức tạp, đương nhiên là nó khó hiểu rồi. Vừa có so sánh phủ định bắt chúng ta nghĩ ngược, lại nhiều điều kiện, điều này làm chúng ta khó theo dõi và bao quát vấn đề, code kiểu này dễ dẫn tới những lỗi tiềm năng.

Với cách 1, chúng ta tách điều kiện lớn thành những điều kiện con, xử lí từng trường hợp đơn giản trước, như vậy logic của chúng ta rõ ràng và tách bạch hơn rất nhiều. Ngoài ra, việc logic được rõ ràng cũng giúp chúng ta tránh được những lỗi không đáng có.

Tương tự, những trường hợp lạ hoặc hiếm xảy ra, chúng ta cũng nên ưu tiên xử lí trước để tránh bị bỏ sót:

function readFromFile( file ) { if (file == null) { return false; } }

Tránh dùng nhiều xử lí lồng nhau

Khi viết code, chúng ta cũng nên tránh viết các xử lí rẽ nhánh lồng vào nhau quá nhiều. Lấy ví dụ về việc chọn bạn gái ở phần trên làm minh hoạ: giả sử ban đầu yêu cầu của bạn chỉ là “đối tượng là nữ”, đoạn code trông như sau:

if (person.gender != "Male") { return "Hello! Cho anh lam quen nhe"; } else { return false; }

Sau một thời gian, bạn có thêm một tiêu chí: độ tuổi từ 18 đến 30. Bạn sửa code như sau:

if (person.gender != "Male") { return "Hello! Cho anh lam quen nhe!"; } return false; } else { return false; }

Sau nữa bạn tiếp tục lại phát sinh thêm tiêu chí: chiều cao phải lớn hơn 160cm. Lúc đó bạn lại sửa lại code như sau:

if (person.gender != "Male") { return "Hello! Cho anh lam quen nhe!"; } return false } return false; } else { return false; }

Với cách viết như trên, thật ra thì code vẫn chạy được, nhưng bây giờ nó trở thành một thứ gì đó trông có vẻ rất phức tạp và khó theo dõi. Lí do bởi vì có quá nhiều xử lí rẽ nhánh lồng vào nhau, khiến cho code trở nên rất khó đọc.

Để xử lí những tình huống này, ta sẽ vận dụng một mẹo nhỏ sau đây để giúp code tối ưu hơn: xử lí trường hợp đơn giản trước, return ngay khi có thể. Khi đó code của ta trông như sau:

if (person.gender == "Male") { return false; } return false; } if (person.height < 160) { return false; } return "Hello! Cho anh lam quen nhe";

Mặc dù có dài hơn đôi chút, nhưng code mới của ta trông thuận mắt và dễ hiểu hơn nhiều rồi phải không nào? Và điều quan trọng nhất là code đã “phẳng” hơn trước. Kĩ thuật này đặc biệt có ích trong xử lí rẽ nhánh trong vòng lặp, code sẽ trông gọn gàng và đơn giản hơn nhiều.

Hạn chế việc sử dụng do…while

Có lẽ bạn không có gì xa lạ với vòng lặp do…while phải không nào. Về mặt logic, tất cả những loại vòng lặp trong ngôn ngữ lập trình đều có chung một ý nghĩa, đó là xử lí lặp đi lặp lại một đoạn code nào đó chừng nào điều kiện kiểm tra còn thoả mãn.

Một cách tự nhiên, trước khi làm bắt kể điều gì, điều đầu tiên chúng ta sẽ làm là kiểm tra tính hợp lệ của xử lí. Đó cũng là lí do mà bất kể xử lí rẽ nhánh (if/else, switch/case, …) hoặc vòng lặp (for, while, …) nào cũng đều cần được xử lí kiểm tra điều kiện trước tiên. Vòng lặp do…while hơi khác 1 chút: nó sẽ thực hiện xử lí đoạn code trước khi kiểm tra điều kiện. Hơi kì lạ! Thử đọc nhanh đoạn code sau đây:

do { var_dump("Loop"); continue; } while (false);

Các bạn trả lời xem kế quả của đoạn code này là gì? Vòng lặp sẽ chạy bao nhiêu lần? Sau đó hãy thử trả lời cùng câu hỏi đó cho đoạn code sau đây:

while (false) { var_dump("Loop"); continue; }

Đoạn code này dễ trả lời hơn nhiều phải không nào? Có lẽ, bạn cũng cần phải thừa nhận một điều rằng: vòng lặp do…while có logic khó hiểu hơn và nó có vẻ “kém tự nhiên” hơn nhiều so với các vòng lặp khác. Điều may mắn là: những logic xử lí được bởi do…while cũng sẽ xử lí được bởi những vòng lặp khác. Vậy nên, đừng chọn cách viết khó hiểu làm gì.

Tóm lại

Khi so sánh, tham số thường đứng bên trái, hằng số hoặc cột mốc sẽ đứng bên phải.

Xử lí cách trường hợp đơn giản hoặc hiếm khi xảy ra trong rẽ nhánh trước, cũng hạn chế dùng so sánh phủ định trong các xử lí logic.

Hạn chế việc viết code lồng vào nhau bằng cách return sớm nếu có thể.

Tránh dùng vòng lặp do…while, hãy dùng những vòng lặp khác.

Share this:

Twitter

Facebook

Like this:

Like

Loading...

Related

Cấu Trúc Điều Khiển If / 2023

Chương cấu trúc điều khiển này sẽ trình bày cách sử dụng các cấu trúc điều khiển trong quá trình viết chương trình. Tất cả các ngôn ngữ lập trình đều hỗ trợ các cấu trúc điều khiển tương tự nhau.Việc hiểu rõ bản chất của mỗi cấu trúc điều khiển trong từng ngôn ngữ lập trình cụ thể là rất quan trọng đối với người lập trình.

Để khởi đầu cho việc làm quen với các cấu trúc điều khiển lập trình trong Java, trước hết các bạn cần hiểu qua về khái niệm khối lệnh: Khối lệnh ( block) là một tập hợp các lệnh nằm trong một cặp dấu ngoặc nhọn ( bắt đầu bởi dấu { và kết thúc bởi dấu }). Các khối lệnh có thể lồng nhau, tức là một khối lệnh có thể nằm bên trong một khối lệnh khác.

Bài đầu tiên trong chương cấu trúc điều khiển này tôi sẽ giới thiệu với các bạn về cấu trúc điều khiển đầu tiên đó là cấu trúc if - else và sau đó tôi sẽ đưa ra một số ví dụ, bài tập vận dụng cấu trúc này.

1. Cấu trúc điều khiển if – else.

Trong ngôn ngữ lập trình Java cũng như các ngôn ngữ lập trình khác, cấu trúc điều khiển if – else sẽ kiểm tra kết quả của 1 điều kiện và dựa vào kết quả đó để thực hiện các hành động tương ứng.

Cấu trúc if – else có 4 dạng chính mà tôi sẽ giới thiệu ngay sau đây.

Cấu trúc if khuyết else.

trong đó điều kiện là 1 biểu thức nào đó bao gồm các biểu thức toán học ( so sánh, ...).

Lưu đồ hoạt động:

Giải thích hoạt động của lưu đồ trên: Lưu đồ trên cho thấy khi biên dịch chương trình thì trình biên dịch sẽ vào kiểm tra biểu thức điều kiện trong if. Nếu biểu thức điều kiện đó trả về kết quả là đúng ( true) thì hành động tương ứng nằm bên trong khối lệnh sẽ được thực hiện, còn nếu biểu thức điều kiện đó trả về kết quả là sai ( false) thì sẽ kết thúc câu lệnh điều khiển và một số câu lệnh khác sẽ được thi hành.

Kết quả sau khi biên dịch chương trình:

Cấu trúc if – else đầy đủ.

Lưu đồ hoạt động:

Giải thích hoạt động của lưu đồ trên: Trong lưu đồ này, việc thực hiện của chương trình sẽ rẽ thành hai nhánh tùy theo kết quả của biểu thức điều kiện. Nếu biểu thức điều kiện trả về kết quả đúng thì các lệnh trong khối lệnh của lệnh if được thực hiện; ngược lại thì những lệnh trong khối lệnh của lệnh else được thực hiện.

Kết quả sau khi biên dịch chương trình:

Cấu trúc điều khiển if – else if – else.

Cấu trúc điều khiển if - else if - else là một tập hợp các câu lệnh if, và else được dùng để giải quyết những yêu cầu phức tạp mà chương trình đề ra.

Lưu đồ hoạt động:

Giải thích hoạt động của lưu đồ trên: Trong lưu đồ này, việc thực hiện của chương trình sẽ rẽ thành nhiều nhánh tùy theo kết quả của biểu thức điều kiện. Nếu biểu thức điều kiện trả về kết quả đúng thì các lệnh trong khối lệnh của lệnh if được thực hiện, nếu không thì các lệnh trong khối lệnh của lệnh else if được thực hiện. Và nếu tất cả các kết quả biểu thức điều kiện của if và else if đều không đúng thì câu lệnh trong else sẽ được thực thi.

package cau_truc_ifelse; import java.util.Scanner; public class SoSanhVoiSo10 { public static void main(String[] args) { float number; Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào số cần so sánh: "); number = scanner.nextFloat(); if (number < 10) { System.out.println("Số bạn vừa nhập nhỏ hơn 10"); } else if (number == 10) { System.out.println("Số bạn vừa nhập bằng 10"); } else { System.out.println("Số bạn vừa nhập lớn hơn 10"); } } }

Kết quả sau khi biên dịch chương trình:

Giải thích hoạt động của chương trình:

Các bạn thấy khi biên dịch chương trình tôi nhập vào số 12.1 thì trình biên dịch sẽ tiến hành thực hiện các bước sau:

Bước 1: Kiểm tra số 12.1 có nhỏ hơn 10 hay không? Vì số 12.1 lớn hơn 10 nên kết quả của biểu thức so sánh number < 10 sẽ trả về false, vì vậy câu lệnh trong khối lệnh if sẽ không được thực hiện.

Bước 2: Kiểm tra số 12.1 có bằng 10 hay không? Kết quả là số 12.1 không bằng 10 nên câu lệnh trong khối lệnh của else if (number == 10) sẽ bị trình biên dịch bỏ qua.

Bước 3: Vì tất cả các biểu thức so sánh của if và else if đều sai nên câu lệnh trong else sẽ được thực thi và lúc này kết quả của chương trình sẽ là ” Số bạn vừa nhập lớn hơn 10“.

Cấu trúc if – else lồng nhau.

Cấu trúc if – else lồng nhau (hay còn gọi là if bên trong if) là cấu trúc phức tạp nhất của cấu trúc điều khiển if - else. Cú pháp của cấu trúc này như sau:

Kết quả sau khi biên dịch chương trình:

Giải thích hoạt động của chương trình:

Trong chương trình này, tôi nhập vào 3 số lần lượt là 9, 20 và 2 thì trình biên dịch sẽ tiến hành thực hiện các bước sau:

Bước 3: Hiển thị giá trị của biến largestNumber ra màn hình. Quá trình biên dịch kết thúc.

2. Cấu trúc toán tử điều kiện 3 ngôi.

Toán tử điều kiện 3 ngôi là cấu trúc thay thế của biểu thức điều kiện if - else trong Java.

Cú pháp:

Công dụng: Toán tử điều kiện 3 ngôi sẽ kiểm tra giá trị của biểu thức điều kiện, nếu biểu thức này trả về giá trị đúng thì biểu thức giá trị 1 được tính toán và trở thành giá trị của biểu thức, nếu biểu thức điều kiện trả về giá trị sai thì biểu thức giá trị 1 được tính toán và trở thành giá trị của biểu thức.

Kết quả sau khi biên dịch chương trình:

Giải thích hoạt động của chương trình: Trong chương trình này, tôi nhập số cần kiểm tra là số 3 thì trình biên dịch sẽ kiểm tra số 3 là số không chia hết cho 2 nên biểu thức number % 2 == 0 sẽ trả về kết quả là sai nên biểu thức phía sau dấu : sẽ được thực thi. Vì vậy, trình biên dịch sẽ hiển thị ra thông báo ” Số 3 là số lẻ“.

3. Lời kết.

Cấu Trúc Điều Khiển If Else Trong Php / 2023

Bấm SUBSCRIBE ngay để theo dõi video mới trên youtube:

Biểu thức điều khiển dùng để rẽ nhánh việc thực hiện các chức năng theo các biểu thức điều kiện khác nhau

Các Cấu Trúc Điều Khiển

Câu lệnh if

Câu lệnh if else

Câu lênh if…elseif…else

Câu lệnh điều kiện lồng nhau

Cấu Trúc If

Câu lệnh if xác định thực thi đoạn chương trình khi giá trị trả về của phép toán là true

<?php if (biểu thức điều kiện) {     }

Xây Dựng Biểu Thức Điều Kiện

Biểu thức điều kiện đơn: Sử dụng phép toán so sánh để thiết lập giá trị so sánh hai biểu thức trả về true hoặc false

$number<0 $username ==''

($username == 'PhanCuong') && ($password == 'admin') !is_numeric($number) !empty($error)

Chú ý

Tránh nhầm lẫn toán tử gán (=) và toán tử (==). Toán tử (==) chuyên dùng so sánh

Câu Lệnh If

Câu lệnh if dùng để xác định thực thi đoạn chương trình nếu giá trị trả về của phép toán là true

<?php if (biểu thức điều kiện) {     }

Câu Lệnh If Else

Câu lệnh if… else để xác định việc thưc hiện chương trình khi giá trị trả về true hoặc false

<?php if (biểu thức điều kiện) {     }else{      }

Câu lệnh If ElseIf...Else

Cấu trúc trên để thực hiện các đoạn chương trình theo từng phân khúc khác nhau.

<?php if (Điều kiện 1) {     } elseif(Điều kiện 2) {    } ... elseif(Điều kiện n){    }else{     }

Bài tập: Chuyển đổi thang điểm 10 sang thang điểm tín chỉ A, B, C, D, F

Cấu trúc câu lệnh if lồng nhau

Là cấu trúc điều kiện phục thuộc vào các điều kiện khác

<?php if (Điều kiện 1) {         if(Điều kiện 2){             } }

Bài tập: Viết chương trình giải phương trình bậc hai

Cấu Trúc Điều Khiển Switch Case Trong C++ / 2023

Trong bài học trước chúng ta đã cùng tìm hiểu về cấu trúc điều khiển if trong C++ là gì rồi. Trong bài học hôm nay chúng ta sẽ cùng tìm hiểu một cấu trúc điều khiển khác nữa đó là switch case.

1. Tìm hiểu lệnh switch case

Lệnh switch case cũng tương tự như lệnh if else if mà chúng ta đã được học ở bài trước. Nghĩa là nó có nhiều điều kiện, chương trình chúng ta duyệt từng điều khiện từ trên xuống dưới, nếu thõa điều kiện nào thì đoạn code bên trong điều kiện đó sẽ được thực thi.

Cú pháp

Cú pháp của cấu trúc điều khiển switch case trong C++ như sau:

switch(expression) { case constant-expression: statement(s); break; case constant-expression: statement(s); break; default : statement(s); }

Trong đó:

expression: Là giá trị được truyền vào để so sánh với các điều kiện constant-expression.

constant-expression: Là điều kiện để so sánh với giá trị của expression truyền vào.

break: Là lệnh để thoát khỏi cấu trúc điều khiển switch case.

default: Đây là giá trị mặc định, khi không có giá trị của expression nào thõa điều kiện constant-expression thì đoạn code bên trong default sẽ được thực thi.

Một số điểm mà các bạn cần lưu ý khi sử dụng lệnh switch case trong C++ như sau:

constant-expression phải cùng kiểu dữ liệu với expression và phải là hằng số như 1, 2, 3, “Good”, “Normal” …

Lệnh break bên trong switch case dùng để thoát khỏi cấu trúc điều khiển switch case. Một cấu trúc điều khiển switch case không có break sẽ xét từng điều kiện một, ví dụ như nếu điều kiện 1 thõa thì sẽ thực thi đoạn code bên trong điều kiện 1, tiếp tục xét điều kiện 2 nếu thõa sẽ thực thi đoạn code bên trong điều kiện 2 và cứ tiếp tục cho đến khi kết thúc điều khiển switch case. Nếu switch case có sử dụng break, thì khi gặp break sẽ thoát khỏi cấu trúc điều khiển switch case và sẽ không xét tiếp điều kiện tiếp theo.

Lệnh default trong cấu trúc điều khiển switch case là tùy chọn, tuy nhiên chúng ta nên sử dụng lệnh default bên trong switch case và đặt nó ở cuối của switch, khi không có điều kiện nào thõa thì đoạn code bên trong default sẽ được thực thi, và chúng ta cũng không cần sử dụng lệnh break bên trong default.

Không được sử dụng 2 giá trị constant-expression trùng nhau.

Cho phép switch case lồng nhau, tuy nhiên không khuyến khích các bạn sử dụng switch case trùng nhau vì nó làm cho chương trình chúng ta phức tạp và khó đọc hơn thôi.

Nếu có nhiều điều kiện để so sánh thì khuyến khích các bạn sử dụng cấu trúc điều khiển switch case hơn là if else if vì nó làm cho chương trình cùa chúng ta rõ ràng và dễ đọc hơn.

Lưu đồ hoạt động

2. Ví dụ với switch case trong C++

Chúng ta cùng xét một ví dụ phân loại sinh viên dựa vào kết quả điểm học tập. Nếu điểm A thì phân loại là sinh viên xuất xắc, điểm B là sinh viên loại giỏi, điểm C là sinh viên loại khá, điểm D là sinh viên loại trung bình, điểm F là sinh viên loại yếu. Được viết bằng cấu trúc điều khiển switch case như sau:

using namespace std; int main () { char diem = 'A'; switch(diem) { case 'A': cout << "Xuat xac" << endl; break; case 'B': cout << "Gioi" << endl; break; case 'C': cout << "Kha" << endl; break; case 'D': cout << "Trung Binh" << endl; break; case 'F': cout << "Yeu" << endl; break; default: cout << "Diem khong hop le" << endl; } cout << "Diem cua ban la: " << diem << endl; return 0; }

Và kết quả sau khi thực thi đoạn code trên:

3. Kết luận

Như vậy là chúng ta đã cùng tìm hiểu cấu trúc điều khiển switch case trong C++ là gì rồi.

Bạn đang xem bài viết – Phần 5: Đơn Giản Hoá Các Cấu Trúc Điều Khiển. / 2023 trên website 3mienmoloctrungvang.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!