Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 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;}


подправьте пожалуйста
Ответить с цитированием
  #2 (permalink)  
Старый 25.03.2012, 15:39
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 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. Причина: уточнение
Ответить с цитированием
  #3 (permalink)  
Старый 25.03.2012, 15:42
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 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;
Ответить с цитированием
  #4 (permalink)  
Старый 25.03.2012, 16:19
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Хорошее, сокращающее код, решение, GuardCat, также в данном решении код обработки данных отделяется от кода вывода этих данных, что очень удобно при различных модификациях (а вот коду можно придать и более читабельную форму, так как читабельность - основа безошибочности).
В применении к представленному мною коду вместо g.innerHTML можно записать ту же b, а потом в конце, присвоить её в выражении document.getElementById('s').innerHTML = b.

Последний раз редактировалось bes, 25.03.2012 в 16:57. Причина: уточнение
Ответить с цитированием
  #5 (permalink)  
Старый 25.03.2012, 21:13
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Maxmaxmахimus, с простым условием понятно как так сделать. Как быть со сложными условиями? Эвалить? Если есть время, скажу спасибо за код.
Ответить с цитированием
  #6 (permalink)  
Старый 25.03.2012, 21:20
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Приведи детишкам, отец Maxmaxmахimus, реализацию твоего варианта для данной ситуации
Ответить с цитированием
  #7 (permalink)  
Старый 25.03.2012, 22:33
Аватар для مراد
Аспирант
Отправить личное сообщение для مراد Посмотреть профиль Найти все сообщения от مراد
 
Регистрация: 23.02.2012
Сообщений: 68

вывести полный скрипт? я просто только часть написал где условия...
Сообщение от bes
Насколько я понял (не знаю как звучит ваше имя)
это звучит Мурад.
Ув. besиGuardCat спасибо вам за помощь...
А дядюшка Maxmaxmахimus, я еще раз говорю, не все такими умными родились, как вы.
Ответить с цитированием
  #8 (permalink)  
Старый 26.03.2012, 22:10
Аватар для مراد
Аспирант
Отправить личное сообщение для مراد Посмотреть профиль Найти все сообщения от مراد
 
Регистрация: 23.02.2012
Сообщений: 68

спасибо папаша
Ответить с цитированием
  #9 (permalink)  
Старый 27.03.2012, 00:04
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 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
Ответить с цитированием
  #10 (permalink)  
Старый 27.03.2012, 00:17
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Maxmaxmахimus
return time[1];
Откуда ты это возвращаешь?
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условие сравнение юрл с которого перешли с заданным niksss80 Общие вопросы Javascript 4 06.01.2012 17:43
Как к найденому элементу применить условие? rommeq jQuery 4 29.08.2011 15:27
Не срабатывает условие AkeLLbl4 Events/DOM/Window 10 20.04.2011 21:13
Немогу поставить условие, запутался nemo Серверные языки и технологии 1 30.01.2010 14:18
Условие типа для flv nemo Серверные языки и технологии 1 29.01.2010 17:52