- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
// See where we currently are in a calendar quarter.
// In Java, JANUARY == 0.
// Yes, I could just write (3 - currentMonth % 3),
// but this is clearer
switch (currentMonth % 3) {
case 0: // January, April, July, October
monthsToInclude = 3; // include whole last quarter
break;
case 1: // February, May, August, November
monthsToInclude = 2; // include first two months of this quarter
break;
default: // March, June, September, December
monthsToInclude = 1; // include first month of this quarter
break;
}
Или всё-таки наплевать на читаемость и заменить короткой версией?
someone 23.08.2012 12:58 # 0
kyzi007 23.08.2012 14:20 # 0
monthsToInclude = val == 0 ? 3 : val == 1 ? 1 : 2 :D
Или составить массив с параметрами месяцев раз и навсегда?
По мне мутное условие к которому надо читать комментарии...
3.14159265 23.08.2012 15:18 # 0
facepalm.gif
Yes, I could just write normal branchless code, but this is crappier.
3.14159265 23.08.2012 15:21 # +1
Я как-то раз такое написал: http://govnokod.ru/8624 и то меня заминусовали.
bormand 23.08.2012 15:43 # −1
Может быть стоит переписать так?
select datepart(weekday,getDate())+6) % 7 + 1
3.14159265 23.08.2012 16:00 # +1
(5+6) % 7=4+1=5
А у меня 4.
7-(8-5) % 7=7-3=4
bormand 23.08.2012 16:06 # +2
3.14159265 23.08.2012 16:07 # +1
Ну да.
>Мой код еще более бажный
У меня-то код работает без багов. Просто сильно закрученный.
bormand 23.08.2012 16:08 # +2
(5+5) % 7 + 1 = 3+1 = 4
(1+5) % 7 + 1 = 6+1 = 7
Ну а так согласен: "работает - не трогай".
3.14159265 23.08.2012 16:52 # +1
Но вообще я потом выкинул то говно и нагуглил как в БД поменять день начала недели.
bormand 23.08.2012 16:56 # +1
А вдруг на этом был основан какой-либо код?
3.14159265 23.08.2012 17:00 # 0
eth0 23.08.2012 17:21 # +1
Option Monday 1
Option January 1
bormand 23.08.2012 15:37 # 0
В квартале 3 месяца.
Для начала находим сколько полных месяцев прошло от начала текущего квартала: currentMonth % 3
И затем вычитаем это количество из трех - столько (возможно неполных) месяцев и осталось до конца квартала.
P.S. Предлагаю над строкой 3 - currentMonth % 3 написать комментарий, в духе "определим, сколько месяцев осталось до конца текущего квартала".
bormand 23.08.2012 15:47 # +1
Хм. Тогда сорри.
Формула будет вот такая: 1 + (currentMonth+2) % 3. Но она мне не нравится.
Можно еще так:
bormand 23.08.2012 15:52 # 0
3.14159265 23.08.2012 16:44 # +1
>1 + (currentMonth+2) % 3 Но она мне не нравится.
Такое же получилось. Мне тоже не нравится. Вариант с явной проверкой на ноль лучче. Но надо завести функцию - ifZero(x,y)
А вторая функция будет такой:
ifZero( (num + k) % n,n)
3.14159265 23.08.2012 20:04 # +1