Nên viết if lồng nhau hay if else hơn

Mình muốn chuyển giờ từ định dạng 24-hour sang 12-hour và mình có 2 đoạn code Java có chức năng tương tự như sau.
1.

if (hour <= 11) { // for morning
    amPm = "AM";
    if (hour == 0) // 12 AM
        hour = 12;
}
else {
    amPm = "PM";
    if (hour >= 13)
        hour -= 12;
 }
if (hour == 0) {
   amPm = "AM";
   hour = 12;
} else if (hour <= 11) {
   amPm = "AM";
} else if (hour == 12) {
   amPm = "PM";
} else {
   amPm = "PM";
   hour -= 12;
}

Đoạn thứ nhất thì có vẻ ngắn hơn, tối ưu hơn nhưng nhìn ngứa mắt lắm :pensive: còn đoạn thứ 2 tuy dài dòng, lặp code nhưng lại nhìn đẹp mắt hơn.
Mọi người nghĩ nên viết theo kiểu nào? Hoặc ai có cách viết hay hơn có thể post lên đây để mình tham khảo được không? :smile:

1 Like

Đoạn code 1 cũng không tối ưu hơn là bao, code về lâu về dài thì phải rõ ràng và dễ bảo trì, vote cho 2 :smile:

1 Like

cảm ơn anh, em cũng thích đoạn 2 hơn :slight_smile:

Bạn thử cách sau xem có tốt hơn không?
amPm = hour / 12 == 0 ? "AM" : "PM"
hour = hour % 12

2 Likes

Cách anh làm không đúng rồi ạ :smile:
00h (24-hour) <=> 12 AM (12-hour)
12h (24-hour) <=> 12 PM (12-hour)
2 trường hợp này là trường hợp đặc biệt nên em mới dùng nhiều if như thế

1 Like

Đạt cũng hay lẫn lộn giữa AM và PM, vậy ra 12h trưa là PM? và 0 giờ sáng là 12AM? Có 23:59 vậy có 24h không ta?

Hihi. Vâng ạ. Đây là bảng hệ thống 12-hour, nó có so sánh mốc giờ tương ứng với hệ 24-hour

1 Like

Hầu hết các nước lấy mốc 00h là 12 AM, mỗi Nhật Bản thì lại 00 AM :frowning: Vụ này cũng phức tạp lắm ạ :((

1 Like

Vậy 24:00 thì mình show cái gì?

Không có 24h đâu ạ. Chỉ có 0h thôi. Lúc đấy mình show 12AM

Vậy là hour input của em vào không có số 24?

Dạ. Giờ này nó cũng giống như phút. Từ 59 nhảy sang 00 luôn chứ không có 60

1 Like

Nếu vậy thì nên tách ra tính AM PM riêng và tính giờ riêng, không nên gộp vào với nhau

Tính amPm

amPm = hour <= 11 ? "AM" : "PM"

Tính hour

if (hour == 0)
    hour = 12;
else if (hour > 12)
    hour -= 12;
2 Likes

okie ạ, cho em mượn đoạn code của anh :grin:

1 Like

hình như python nó có cú pháp elif là rút gọn của else if đó bạn, xài thử xem nếu bạn thấy code 2 dài

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