25.03.2012, 10:51
|
|
Аспирант
|
|
Регистрация: 23.02.2012
Сообщений: 68
|
|
if и else условие
Не знаю как написать условие(if, else) для скрипта.
if (h === 8 && minutes === 0) {b = 'Пары еще не начались '; sebastian.children[0].innerHTML = b;}
else
if ((h === 9 && minutes > 0) && (h===9 && minutes <45)) {b = 'Первый час, первой пары '; sebastian.children[0].innerHTML = b;}
else
if ((h === 9 && minutes > 45) && (h === 9 && minutes < 50)) { b = 'Перемена 5 минут '; sebastian.children[0].innerHTML = b;}
else
if ((h === 9 && minutes > 50) && (h === 10 && minutes < 35)) { b = 'Второй час, первой пары '; sebastian.children[0].innerHTML = b;}
else
if ((h === 10 && minutes > 35) && (h === 10 && minutes < 45)) {b = 'Конец первой пары. Перемена на 10 минут '; sebastian.children[0].innerHTML = b;}
else
if ((h === 10 && minutes > 45) && (h === 11 && minutes < 30)) {b = 'Первый час, второй пары '; sebastian.children[0].innerHTML = b;}
else
if ((h === 11 && minutes > 30) && (h === 11 && minutes < 35)) {b = 'Перемена 5 минут '; sebastian.children[0].innerHTML = b;}
else
if ((h === 11 && minutes > 35) && (h === 12 && minutes < 20)) {b = 'Второй час, второй пары '; sebastian.children[0].innerHTML = b;}
else
if ((h === 12 && minutes > 20) && (h === 12 && minutes < 40)) {b = 'Большая перемена '; sebastian.children[0].innerHTML = b;}
else
if ((h === 12 && minutes > 40) && (h === 13 && minutes < 25)) {b = 'Первый час, третьей пары. Перемена на 10 минут '; sebastian.children[0].innerHTML = b;}
else
if ((h === 13 && minutes > 25) && (h === 13 && minutes < 30)) {b = 'Перемена 5 минут '; sebastian.children[0].innerHTML = b;}
else
if ((h === 13 && minutes > 30)&&(h===14 && minutes ===15)) {b = 'Второй час, третьей пары '; sebastian.children[0].innerHTML = b;}
else { b = 'Наконец то закончились эти пары '; sebastian.children[0].innerHTML = b;}
подправьте пожалуйста
|
|
25.03.2012, 15:39
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Насколько я понял (не знаю как звучит ваше имя), вы хотите получить более читабельный и легко модернизируемый код (это и увеличивает вероятность его работоспособности), так как в нём наблюдаются некоторые одинаковые части, а также много операторов if-else.
Если это так, то
1) используйте оператор switch вместе с оператором if (switch более читабельный, но выражение в нём
должно возвращать конкретное значение, таким значение в вашем случае будут часы, для проверки неравенств придётся использовать if);
2) повторяющиеся конструкции обозначьте более короткими именами;
3) попробуйте в принципе сократить условия.
Комментирую.
Если вы понимаете, что h - это часы, то зачем обозначать минуты длинным словом minutes, логичнее использовать обозначение просто m.
Зачем использовать лишнюю переменную b, если она нужна лишь для того, чтобы установить значение всего лишь одного элемента (в вашем случае этот элемент sebastian.children[0].innerHTML), логичнее сразу присваивать это значение.
Элемент sebastian.children[0].innerHTML необходимо сократить в написании, например, так g = sebastian.children[0]; (ссылка на ваш элемент children), а далее g.innerHTML.
Зачем делать проверки подобные m>0, если m итак заведомо больше нуля.
Так как я не знаю, что вы имели ввиду под элементом sebastian.children[0], то привожу пример, для простого div, в который по нажатию кнопки "Сейчас", будет выводиться ответ.
В данном коде я использую разбивку по часам, что довольно удобно, а так как вариантов у вас много, привожу для примера несколько первых из них.
Итак, вот он код:
Код:
|
<div id=s style="background: yellow">Нажми на кнопку, что понять, что сейчас</div>
<button
onclick = "
data = new Date();
h = data.getHours();
m = data.getMinutes();
g = document.getElementById('s');
switch (h)
{
case 8: {g.innerHTML = 'Пары еще не начались'; break}
case 9:
{
if (m<45) {g.innerHTML = 'Первый час, первой пары'; break}
else
if (m<50) {g.innerHTML = 'Перемена 5 минут'; break}
else
{g.innerHTML = 'Второй час, первой пары'; break}
}
case 10:
{
if (m<35) {g.innerHTML = 'Второй час, первой пары'; break}
else
if (m<45) {g.innerHTML = 'Конец первой пары. Перемена на 10 минут'; break}
else
{g.innerHTML = 'Первый час, второй пары'; break}
}
default: g.innerHTML='Отдыхаем!!'
}
">Сейчас
</button> |
Последний раз редактировалось bes, 25.03.2012 в 16:01.
Причина: уточнение
|
|
25.03.2012, 15:42
|
|
Просто любитель
|
|
Регистрация: 13.09.2011
Сообщений: 300
|
|
Найдите все отличия:
if (h === 8) {
b = 'Пары еще не начались ';
} else if(h === 9 && minutes > 0 && minutes < 45) {
b = 'Первый час, первой пары ';
} else if(h === 9 && minutes >= 45 && minutes < 50) {
b = 'Перемена 5 минут ';
} else if((h === 9 && minutes >= 50) || (h === 10 && minutes < 35)) {
b = 'Второй час, первой пары ';
} else if (h === 10 && minutes >= 35 && minutes < 45) {
b = 'Конец первой пары. Перемена на 10 минут ';
} else if ((h === 10 && minutes >= 45) || (h === 11 && minutes < 30)) {
b = 'Первый час, второй пары ';
} else if (h === 11 && minutes >= 30 && minutes < 35) {
b = 'Перемена 5 минут ';
} else if ((h === 11 && minutes >= 35) || (h === 12 && minutes < 20)) {
b = 'Второй час, второй пары ';
} else if (h === 12 && minutes >= 20 && minutes < 40) {
b = 'Большая перемена ';
} else if ((h === 12 && minutes >= 40) && (h === 13 && minutes < 25)) {
b = 'Первый час, третьей пары. Перемена на 10 минут ';
} else if (h === 13 && minutes >= 25 && minutes < 30) {
b = 'Перемена 5 минут ';
} else if ((h === 13 && minutes >= 30) || (h === 14 && minutes <= 15)) {
b = 'Второй час, третьей пары ';
} else {
b = 'Наконец то закончились эти пары ';
}
sebastian.children[0].innerHTML = b;
|
|
25.03.2012, 16:19
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Хорошее, сокращающее код, решение, GuardCat, также в данном решении код обработки данных отделяется от кода вывода этих данных, что очень удобно при различных модификациях (а вот коду можно придать и более читабельную форму, так как читабельность - основа безошибочности).
В применении к представленному мною коду вместо g.innerHTML можно записать ту же b, а потом в конце, присвоить её в выражении document.getElementById('s').innerHTML = b.
Последний раз редактировалось bes, 25.03.2012 в 16:57.
Причина: уточнение
|
|
25.03.2012, 21:13
|
|
Просто любитель
|
|
Регистрация: 13.09.2011
Сообщений: 300
|
|
Maxmaxmахimus, с простым условием понятно как так сделать. Как быть со сложными условиями? Эвалить? Если есть время, скажу спасибо за код.
|
|
25.03.2012, 21:20
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Приведи детишкам, отец Maxmaxmахimus, реализацию твоего варианта для данной ситуации
|
|
25.03.2012, 22:33
|
|
Аспирант
|
|
Регистрация: 23.02.2012
Сообщений: 68
|
|
вывести полный скрипт? я просто только часть написал где условия...
Сообщение от bes
|
Насколько я понял (не знаю как звучит ваше имя)
|
это звучит Мурад.
Ув. besи GuardCat спасибо вам за помощь...
А дядюшка Maxmaxmахimus, я еще раз говорю, не все такими умными родились, как вы.
|
|
26.03.2012, 22:10
|
|
Аспирант
|
|
Регистрация: 23.02.2012
Сообщений: 68
|
|
спасибо папаша
|
|
27.03.2012, 00:04
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Неплохая идея, Maxmaxmахimus, для реализации её опытными программистами, которые понимают как использовать регулярные выражения и как работают фнукции forEach и match, явно не для новичков (хотя разобраться можно).
Кроме того, следует понимать, что данный код не кроссбраузерный, так как функция forEach работает не во всех браузерах, в качестве альтернативы (со своими демонами) можно для обхода всех элементов массива использовать цикл for (например, вида for (var key in arr) {var val = arr[key]} ).
Также оптимизация требуется предпринять некоторые действия для прекращения выполнения forEach при нахождении требуемого значения, так как внутренняя функция в forEach выполняется для всех элементов массива (лично мне при помощи break) в Google Chrome этого сделать не удалось).
Кроме того, я так понимаю, вы сознательно, захотели, чтобы при выводе всё время выводилось сообщение "приступ".
С выводом значения при использовании forEach также не всё так просто, даже если убрать ваш return 'приступ', alert выведет underfined, так как return time[1] возвращает значение в никуда (а точнее только во внутреннюю функцию), решением может быть присвоение этого значения некоторой переменной (например, а = time[1]), а потом возвращение этого значения (вместо return 'приступ'; - return a;).
PS: Свою гениальность или манию величия, Maxmaxmахimus, можешь проверить на моём вопросе Размеры фреймов и JavaScript
|
|
27.03.2012, 00:17
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Сообщение от Maxmaxmахimus
|
return time[1];
|
Откуда ты это возвращаешь?
|
|
|
|