
Chào các "dev" tương lai, hôm nay anh Creyt sẽ cùng các bạn "vibe check" một "phép thuật" logic cực kỳ cool trong C++: toán tử or. Đừng lầm tưởng đây là "hoặc" thông thường, trong lập trình, nó là "cánh cửa vạn năng" giúp bạn mở khóa vô số kịch bản đấy!
or là gì và để làm gì?
Tưởng tượng bạn đang "chill" ở nhà và muốn đi chơi. Bạn có hai lựa chọn: Một là trời không mưa, hai là bạn có ô. Chỉ cần một trong hai điều kiện này đúng, bạn "auto" ra đường "flex" đồ mới. Nếu trời mưa và bạn không có ô, thì "thôi rồi Lượm ơi", ở nhà "cày game" vậy.
Trong C++, or (hoặc ký hiệu ||) chính là cái "cánh cửa vạn năng" đó. Nó cho phép bạn kết hợp nhiều điều kiện. Nếu ít nhất một trong các điều kiện đó đúng (true), thì toàn bộ biểu thức sẽ được đánh giá là true. Chỉ khi tất cả các điều kiện đều sai (false), thì biểu thức or mới trả về false.
Nói cách khác, or là "người bạn dễ tính". Nó chỉ cần một "chiến thắng" là đủ để "đi tiếp".
Code Ví Dụ Minh Hoạ Rõ Ràng
Để các bạn dễ hình dung, anh Creyt sẽ "flex" vài đoạn code C++ cực kỳ "straightforward" đây:
#include <iostream>
#include <string>
int main() {
// Ví dụ 1: Kiểm tra điều kiện đơn giản
bool troiKhongMua = true; // Trời không mưa
bool coO = false; // Không có ô
// Nếu trời không mưa HOẶC có ô, thì đi chơi
if (troiKhongMua || coO) { // Sử dụng ||
std::cout << "Ví dụ 1: Đi chơi thôi! Trời đẹp hoặc có ô thì ngại gì!\n";
} else {
std::cout << "Ví dụ 1: Ở nhà thôi, vừa mưa vừa không ô.\n";
}
std::cout << "\n";
// Ví dụ 2: Dùng từ khóa 'or' và kiểm tra tuổi/điểm
int tuoi = 17;
int diemThi = 75;
// Để được nhận vào câu lạc bộ, bạn phải đủ 18 tuổi HOẶC điểm thi trên 70
if (tuoi >= 18 or diemThi > 70) { // Sử dụng từ khóa 'or'
std::cout << "Ví dụ 2: Chúc mừng, bạn đủ điều kiện vào CLB!\n";
} else {
std::cout << "Ví dụ 2: Tiếc quá, bạn chưa đủ điều kiện vào CLB.\n";
}
std::cout << "\n";
// Ví dụ 3: Kiểm tra input từ người dùng
char luaChon;
std::cout << "Bạn có muốn tiếp tục (Y/N)? ";
std::cin >> luaChon;
// Người dùng nhập 'Y' hoặc 'y' thì tiếp tục
if (luaChon == 'Y' || luaChon == 'y') {
std::cout << "Ví dụ 3: Tuyệt vời, chúng ta tiếp tục!\n";
} else {
std::cout << "Ví dụ 3: Ok, dừng lại nhé.\n";
}
return 0;
}
Giải thích code:
- Trong ví dụ 1,
troiKhongMualàtrue, nên dùcoOlàfalse, biểu thứctrue || falsevẫn trả vềtrue. Kết quả là bạn đi chơi. - Ví dụ 2,
tuoilà 17 (falsecho điều kiệntuoi >= 18), nhưngdiemThilà 75 (truecho điều kiệndiemThi > 70). Vì một điều kiện đúng, bạn được vào CLB. - Ví dụ 3 là trường hợp kinh điển khi xử lý input chữ cái, bạn cần chấp nhận cả chữ hoa và chữ thường.

Mẹo (Best Practices) để ghi nhớ và dùng thực tế
- "Short-circuit Evaluation" – Đánh giá rút gọn: Đây là "buff" cực mạnh của
or! Khi C++ thấy điều kiện đầu tiên củaorđãtrue, nó sẽ "ngó lơ" luôn các điều kiện phía sau và không thèm kiểm tra nữa. Tại sao? Vì đã có mộttruerồi thì cả biểu thức chắc chắn làtrue, kiểm tra thêm chỉ tốn thời gian. Đây là một "trick" quan trọng để tối ưu hiệu suất hoặc tránh các lỗi "side effect" (tác dụng phụ) không mong muốn.int x = 10; // Nếu x > 5 là true, thì hàm doSomethingDangerous() sẽ không bao giờ được gọi. if (x > 5 || doSomethingDangerous()) { // ... } - Dùng dấu ngoặc đơn
()để "vibe check" rõ ràng: Khi bạn kết hợporvới các toán tử khác nhưand(&&), hãy luôn dùng dấu ngoặc đơn để nhóm các điều kiện lại. Điều này giúp code của bạn dễ đọc, dễ hiểu hơn, tránh "bug" do thứ tự ưu tiên của toán tử.// Nên dùng: if ((tuoi >= 18 || coTheXacNhan) && coGiayToTuyThan) { // ... } // Tránh dùng (dễ gây nhầm lẫn về thứ tự ưu tiên): // if (tuoi >= 18 || coTheXacNhan && coGiayToTuyThan) { // // ... // } - Không "spam" quá nhiều điều kiện: Một biểu thức
orvới quá nhiều điều kiện sẽ khiến code của bạn "rối như tơ vò". Hãy tách chúng ra thành các biếnbooltrung gian hoặc các hàm riêng biệt để code "sạch" và "easy to debug" hơn.
Văn phong học thuật sâu của Harvard, dạy dễ hiểu tuyệt đối
Trong lĩnh vực logic học Boolean, toán tử OR (disjunction trong thuật ngữ chính xác) là một hàm chân trị (truth function) cơ bản. Nó nhận vào hai hoặc nhiều mệnh đề (operands) và trả về true nếu ít nhất một trong các mệnh đề đầu vào là true. Bảng chân trị (truth table) của OR cho hai mệnh đề A và B như sau:
| A | B | A OR B |
|---|---|---|
false |
false |
false |
false |
true |
true |
true |
false |
true |
true |
true |
true |
Nguyên lý "short-circuit evaluation" mà anh Creyt đã đề cập là một tối ưu hóa quan trọng. Nó thể hiện tính chất "lười biếng" (lazy evaluation) của ngôn ngữ, nơi mà các phần của biểu thức không cần thiết để xác định kết quả cuối cùng sẽ không được tính toán. Điều này không chỉ cải thiện hiệu suất mà còn là một "contract" (hợp đồng) mà lập trình viên có thể tin cậy để tránh các thao tác nguy hiểm hoặc tốn kém.
Ví dụ thực tế các ứng dụng/website đã ứng dụng
or là "xương sống" của hầu hết các ứng dụng bạn dùng hàng ngày:
- Hệ thống đăng nhập: Khi bạn đăng nhập vào Facebook, Instagram, TikTok... hệ thống thường kiểm tra
(tên_người_dùng_đúng || email_đúng) && mật_khẩu_đúng. Bạn có thể dùng username HOẶC email để đăng nhập, miễn là mật khẩu khớp. - Bộ lọc sản phẩm E-commerce: Trên Shopee, Lazada, Tiki... khi bạn tìm kiếm sản phẩm, các bộ lọc có thể dùng
orđể hiển thị:(danh_muc == "Áo" || danh_muc == "Quần") && (gia < 500000 || giam_gia > 10%). Bạn muốn xem áo HOẶC quần, VÀ giá dưới 500k HOẶC đang giảm giá. - Quyền truy cập trong ứng dụng: Một admin app có thể cho phép người dùng xem một tính năng nếu
(người_dùng_là_admin || người_dùng_là_chủ_sở_hữu_tài_khoản_này). Chỉ cần một trong hai điều kiện đúng là có quyền. - Game Logic: Trong game, để kích hoạt một kỹ năng đặc biệt, bạn có thể cần
(năng_lượng_đủ || item_kích_hoạt_skill_đã_có). Hoặc để giành chiến thắng(đạt_điểm_cao_nhất || hoàn_thành_nhiệm_vụ_chính).
Thử nghiệm đã từng và hướng dẫn nên dùng cho case nào
Anh Creyt đã từng "fail" vài dự án chỉ vì không hiểu rõ or và thứ tự ưu tiên của toán tử. Ví dụ, một lần anh cần kiểm tra (A hoặc B) và C, nhưng lại viết A || B && C. Kết quả là B && C được tính trước, và A || (B && C) lại không đúng với logic ban đầu. Đó là lý do anh luôn nhấn mạnh việc dùng dấu ngoặc đơn!
Nên dùng or khi:
- Bạn cần ít nhất một điều kiện đúng: Đây là "điểm mấu chốt" của
or. Khi bạn có nhiều lựa chọn và chỉ cần một trong số đó được thỏa mãn. - Xử lý input linh hoạt: Chấp nhận nhiều định dạng input (ví dụ: 'y' hoặc 'Y', 'true' hoặc '1').
- Thiết lập các điều kiện thoát/tiếp tục: Ví dụ, một vòng lặp tiếp tục chạy
while (người_dùng_chưa_thoát || còn_dữ_liệu_để_xử_lý). - Kiểm tra các trường hợp ngoại lệ: Ví dụ, một hàm trả về lỗi nếu
(giá_trị_âm || giá_trị_quá_lớn).
Nhớ nhé các "dev", or không chỉ là một toán tử, nó là một "công cụ quyền năng" giúp bạn xây dựng logic chương trình một cách linh hoạt và mạnh mẽ. Nắm vững nó, bạn sẽ "unlock" được rất nhiều kịch bản thú vị trong thế giới code đấy!
Thuộc Series: C++
Bài giảng này được tự động xuất bản ngẫu nhiên từ thư viện kiến thức. Đừng quên đón xem các Từ khoá Hướng Dẫn tiếp theo nhé!