30/09/2018, 18:17

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 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?

Mai Anh Dũng viết 20:21 ngày 30/09/2018

Đ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

LazyCat viết 20:25 ngày 30/09/2018

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

Chi Ngo viết 20:31 ngày 30/09/2018

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

LazyCat viết 20:30 ngày 30/09/2018

Cách anh làm không đúng rồi ạ
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ế

Mai Anh Dũng viết 20:30 ngày 30/09/2018

Đạ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?

LazyCat viết 20:25 ngày 30/09/2018

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

en.m.wikipedia.org

12-hour clock

The 12-hour clock is a time convention in which the 24 hours of the day are divided into two periods: a.m. (from the Latin, ante meridiem, meaning before midday) and p.m. (post meridiem, meaning past midday). Each period consists of 12 hours numbered: 12 (acting as zero), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, and 11. The 24 hour/day cycle starts at 12 midnight (often indicated as 12 a.m.), runs through 12 noon (often indicated as 12 p.m.), and continues to the midnight at the end of the day. Th The 12...

LazyCat viết 20:31 ngày 30/09/2018

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 Vụ này cũng phức tạp lắm ạ :((

Mai Anh Dũng viết 20:28 ngày 30/09/2018

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

LazyCat viết 20:18 ngày 30/09/2018

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

Mai Anh Dũng viết 20:34 ngày 30/09/2018

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

LazyCat viết 20:32 ngày 30/09/2018

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

Mai Anh Dũng viết 20:22 ngày 30/09/2018

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;
LazyCat viết 20:23 ngày 30/09/2018

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

Hứa Anh Minh viết 20:30 ngày 30/09/2018

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

Bài liên quan
0