Toán tử 3 ngôi trong C#

Em biết được gì về toán tử 3 ngôi rồi :wink: Thử giải thích + ví dụ để mọi người biết em đang còn thiếu/chưa hiểu phần nào của nó, đưa ra lời giải cho câu hỏi của em thì không giúp được gì cho em đâu.

1 Like

n là số nhập vào:

string result = n>=5?( n>=6.5?(....) : "Trung binh") : "Kem";

Bạn tự làm tiếp nhé, lồng vào tương tự thôi.

1 Like

Toán tử 3 ngôi có thể dùng thay cho if else
Biến = ( điều kiện )? (Lệnh1 thực thi nếu đk đúng) : (lệnh 2 thực thi nếu đk sai);
Đó là những gì e biết hiện nay

3 Likes

Thank you bạn . Mình cũng đang làm

1 Like

mình làm bị lỗi dấu : ở giữa dòng fix lại kj bạn

1 Like

Không cần dấu ngoặc đâu.

string kq=diem>=8?"Giỏi":diem>=6.5?"Khá":diem>=5?"Trung bình":"Kém";
// Nếu cần dấu ngoặc cho dễ hiểu:
string kq=diem>=8?"Giỏi":(diem>=6.5?"Khá":(diem>=5?"Trung bình":"Yếu"));

// Cũng có thể:
string kq=diem<5?"Yếu":diem<6.5?"Trung bình":diem<8?"Khá":"Giỏi";
5 Likes
string ketqua = diem >= 8 ? "Giỏi" : diem >= 6.5 ? "Khá" : diem >= 5 ? "Trung Bình" : "Yếu";
Console.WriteLine("Điểm ={0}==>{1}", diem, ketqua);
1 Like

Cà khịa con mắt người đọc còn do cách trình bày nữa, toán tử ba ngôi thì thò thụt đúng cách cũng ổn mà, mỗi ngôi 1 dòng thôi.

6 Likes

Không, đi làm không ai để cho code toán tử 3 ngôi lồng nhau đâu.

1 Like

Có thể reply này là off-topic.

Nhưng, nếu bạn chụp mũ rằng ai code toán tử 3 ngôi cũng là trẻ con, sinh viên, thì chúng ta không có gì để tranh luận cả.

Chẳng phải tự nhiên mà IDE (cụ thể là IntelliJ IDEA) mặc định gợi ý sử dụng toán tử 3 ngôi thay cho if-else khi có thể mà không phải chiều ngược lại.

5 Likes

Nó xấu hay đẹp, dễ đọc hay khó đọc là do người code, không phải do công cụ.

string kq = diem >= 8 ? "Giỏi"
          : diem >= 6.5 ? "Khá"
          : diem >= 5 ? "Trung bình"
          : "Kém";

string kq;
if (diem >= 8)
    kq = "Giỏi";
else if (diem >= 6.5)
    kq = "Khá"
else if (diem >= 5)
    kq = "Trung bình"
else
    kq = "Kém";
9 Likes

Ok cậu đúng. Cậu cứ giữ quan điểm đấy mà làm thôi.

1 Like

Đúng sai không quan trọng bằng việc phát ngôn của anh đầu độc người khác, dạy sai người khác. Sau này lại có nguy cơ thành đồng nghiệp của tôi.

7 Likes

Mình vẫn dùng 3 ngôi lồng nhau bình thường.

Khó hiểu do cách viết và do chưa có đủ hiểu biết về nó.

6 Likes

thật ra bạn đó nói vậy cũng không hoàn toàn sai. Không nên lồng toán tử 3 ngôi quá nhiều vì có thể ở thời điểm này thì bạn có thể format đẹp như vậy được nhưng khi thay đổi yêu cầu sẽ phải sửa lại sẽ cực hơn. Đôi lúc sẽ phải viết lại toàn bộ luôn do yêu cầu thay đổi. Tiết kiệm 1 2 dòng code cũng chẳng để làm gì mà nên viết sao cho dễ hiểu nhất có thể chứ không có đúng hay sai gì ở đây cả

7 Likes

Cái này khác nào cãi nhau về thụt 2 spaces hay 4 spaces đâu :))

6 Likes

Ý kiến cá nhân thôi nha, mình vẫn vote sử dụng if else hơn, vì có có ưu điểm dễ debug hơn là tenary operator.

Nếu dùng tenary operator thì nguyên khối logic là một biểu thức (expression), debugger xem biểu thức là 1 câu lệnh, thực thi tất cả toán hạng dù lồng ghép thế nào. Nên việc xem thứ tự các biểu thức con thực hiện theo thứ tự như thế nào là bất khả thi.

Còn việc dùng if else, nếu tuân thủ đúng convention, mình có thể sử dụng step over để chạy từng điều kiện if, câu lệnh trong if, điều kiện else if, câu lệnh trong else if,… Như vậy việc kiểm soát luồng chạy dễ dàng hơn.

8 Likes

Ngoài ra, mình thấy dùng tenary operator sẽ tốn thời gian để hiểu nhiều hơn (một chút) so với bình thường, câu lệnh cũng kém rõ ràng hơn và phải có vế else (sau dấu hai chấm). Mình chỉ coi đây là một cách để viết tắt, khi lười quá, muốn mấy câu lệnh của mình vào hết một dòng thì mình dùng tenary operator.

6 Likes

Extend câu trả lời của @qloved (tớ đồng ý với câu trả lời của cậu :smiley: )

Có 1 quyển sách tên là “The Art of Readable Code” - by Dustin Boswell and Trevor Foucher. Tớ recommend quyển này cho mọi người, đặc biệt là bạn hỏi câu này :smiley:, vì ở đó có cả 1 mục để bàn về ternary operator.
Common rules:

  • Nên dùng ternary operator ở mức đơn giản nhất: return condition ? a : b;
  • Các trường hợp phức tạp hơn nên prefer dùng if.

Cá nhân tớ thường disapprove (không phải 100%, đôi khi tớ approve khi các bạn ấy bỏ công format code đủ tốt để đọc, và phần đó có ít khả năng update thêm điều kiện mới) các Pull request dùng nested ternary operator, vì lý do maintainability (bạn Quân có đề cập) và readability (bạn Quân cũng đã đề cập nốt).

4 Likes

Cái gì nó sinh ra cũng đều có mục đích sứ mệnh của nó cả.
Và nó sẽ thể hiện ưu điểm tối đa khi dùng đúng với mục đích của nó, đúng trường hợp.
Đừng dùng sai rồi chê bai là được :slight_smile:

Đừng mang dĩa ra múc canh rồi nói nó không tốt bằng muỗng. =))

9 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?