Роботландский Университет © А.А.Дуванов

ЗНАКОМСТВО С ЯЗЫКОМ

урок 3: ветвления

Функция alert предназначена для передачи информации пользователю. А как пользователь может передать информацию в документ?

ввод информации

В языке JavaScript для ввода информации предусмотрена функция prompt:


prompt("надпись", "значение ввода по умолчанию");

Функция работает так. На экран выводится панель с двумя кнопками:

Пользователь записывает текст в окошке ввода и нажимает на кнопку Ok. Панель убирается с экрана, а введенный текст становится значением функции prompt. Это значение можно, например, присвоить переменной и использовать затем в скрипте. Если пользователь нажимает кнопку Отмена (Cancel), функция prompt возвращает специальное значение null (null - это не строка "null", не пустая строка "", а именно значение специального служебного типа данных).

пример

var str=prompt("Сколько будет 2x2?", "5");
if (str=="4") alert("Гениально! Ответ и, правда, 4!");
else          alert("Шутка хороша, когда ее понимают!");

условная команда, условие, блок

общий вид   пример
if (условие) команда1;
else         команда2;
 
if (a > b) c = a;
else       c = b;

Разрешается записывать условную команду без ветви else:

общий вид   пример

if (условие) команда1;
 

if (x < 0) x = -x;

Конструкции команда1 и команда2 могут быть любыми командами языка, в том числе, и снова условными. Часто находят применения конструкции следующего вида (переключатели):

общий вид   пример
if      (условие1) команда1;
else if (условие2) команда2;
else if (условие3) команда3;
...........................
else               командаN;
 
if      (Day==1) NameDay="понедельник";
else if (Day==2) NameDay="вторник";
else if (Day==3) NameDay="среда";
else if (Day==4) NameDay="четверг";
else if (Day==5) NameDay="пятница";
else if (Day==6) NameDay="суббота";
else if (Day==7) NameDay="воскресенье";
else             NameDay="ошибка";

Пример
var str=prompt("Сколько будет 2x2?", "5");
if      (str==null) alert("Не стали вычислять?..Зря!");
else if (str=="4")  alert("Гениально! Ответ и, правда, 4!");
else                alert("Шутка хороша, когда ее понимают!");

Цепочка команд, заключенная в фигурные скобки { команда1; команда2; ... } рассматривается как одна команда. Такая сложная команда называется составной или блоком. Символ ";" за скобкой "}", закрывающей блок, не ставится. Условная команда с использованием блока может выглядеть так:

возможный общий вид   пример
if (условие)
{
  ...
  команды
  ...
}
else
{
  ...
  команды
  ...
}
 
if (d > 0)
{
  x1 = - (b+Math.sqrt(d))/(2*a);
  x2 = - (b-Math.sqrt(d))/(2*a);
  mes = "два корня";
}
else if (d == 0)
{
  x1 = -b/(2*a);
  mes = "один корень"
}
else mes = "нет корней";

В качестве условия в условной команде можно записывать логические выражения. При этом разрешается использовать следующие знаки логических операций:

обозначение       назначение пример
== равно x+1 == 8
!= не равно str != "да"
> больше x*y > 5+(x++)
>= больше или равно d >= 0
< меньше num < 10
<= меньше или равно bonus <= 5
&& логическое "и" 1 < x && x < 10
|| логическое "или" x == 0 || x == 1
! логическое отрицание !(1 < x && x < 10)

конструируем небольшой экзамен

Экзамен состоит из пяти вопросов. За каждый верный ответ начисляется один балл. В итоге выставляется оценка от 2 до 5 по правилу:

Программа экзамена

Экзамен

арифметические и строковые выражения как условия

В качестве условия в команде if можно записывать не только логические, но и арифметические, и даже строковые выражения. При этом считается, что условие ложно, если значение выражения равно 0 или пустой строке "" и истинно в противном случае.

примеры
var x = 20;
if (20-x) x++;
Условие ложно, и значение x не изменится
var x = 20;
if (2*x) x++;
Условие истинно, и значение x увеличится на 1
var x = "";
if (x) x += "киса";
Условие ложно, и значение x не изменится
var x = "";
if (x+"?") x += "киса";
Условие истинно, и x получит значение "киса"
var x = "";
if (!x) x += "киса";
Условие истинно, и x получит значение "киса"

значения логического типа

В языке JavaScript переменная может принимать кроме числовых и строковых значений еще и значение логического типа. Этот тип имеет две константы, обозначаемые как true и false.

примеры

var x = true;
var y = 2;
if (x) y++;
После выполнения команд значение y равно 3
var x = true;
var y = 2;
if (!x) y++;
После выполнения команд значение y равно 2
var x = true;
var y = 2;
if (x || !x) y++;
После выполнения команд значение y равно 3
var x = true;
var y = 2;
if (x && !x) y++;
После выполнения команд значение y равно 2

трудные условия

Условия, в состав которых входят арифметические и строковые выражения, на первых порах вызывают трудности. Рецепт их преодоления очень прост. Нужно помнить, что арифметические и строковые выражения, входящие в состав условия, сначала вычисляются, а затем их значения рассматриваются с позиций логических значений true и false.

С этой точки зрения строковые константы "волк" и "крокодил", а также числовые константы 25 и 3.14 эквивалентны одной и той же логической величине true. Следовательно, логические отрицания этих величин равны false.

if("волк")      то же самое, что if(true)
if("крокодил")  то же самое, что if(true)
if(25)          то же самое, что if(true)
if(3.14)        то же самое, что if(true)
if(!"волк")     то же самое, что if(false)
if(!"крокодил") то же самое, что if(false)
if(!25)         то же самое, что if(false)
if(!3.14)       то же самое, что if(false)

Несколько более сложных примеров:

"волк" && 25         эквивалентно true  && true  равно true
!"волк" && 25        эквивалентно !true && true  равно false
!"волк" || 25        эквивалентно !true || true  равно true
!"" || 22-22         эквивалентно true  || false равно true
!(""+"кот") || 22-22 эквивалентно false || false равно false

Пояснение к последнему примеру.

Так как, ""+"кот" равно "кот", то:
!(""+"кот") || 22-22 эквивалентно !"кот" || 22-22
Так как, 22-22 равно 0, то:
!"кот" || 22-22 эквивалентно !"кот" || 0
Так как, "кот" имеет логическое значение true, то !"кот" имеет значение false:
!"кот" || 0 эквивалентно false || 0
Так как, 0 имеет логическое значение false, то:
false || 0 эквивалентно false || false и равно false.

ввод альтернативы

Если нужно, чтобы пользователь выбрал один из двух вариантов ответа на вопрос, то можно воспользоваться функцией prompt:

Существует, однако, более простой и красивый способ узнать желание пользователя -- функция confirm:


   confirm("надпись");   

Функция работает так. На экран выводится панель с двумя кнопками:

Если пользователь нажимает на кнопку Ok, функция confirm возвращает значение true, если на кнопку Отмена (Cancel) -- значение false. Пользователь может использовать также эквивалентные клавиатурные кнопки Enter и Esc.

пример
if (confirm("Хлеба и зрелищ?"))
     alert("Смотри сейчас, а кушай после!");
else alert("И, словом, тот хотел арбуза,\n"+
           "А тот соленых огурцов.");

 

     Испытатель if

 

зачетный класс

Нажмите кнопку Сброс, затем приступайте к решению.

Какое значение будет иметь переменная z после выполнения скрипта?

1.
var x = "каша";
var y = "лот";
var z = "акула";
if (x) z = x+y;



2.
var x = "каша";
var y = "лот";
var z = "акула";
if (!x) z = x+y;



3.
var x = "каша";
var y = "лот";
var z = "акула";
if (x && y) z = x+y;



4.
var x = "каша";
var y = "лот";
var z = "акула";
if (!x && y) z = x+y;



5.
var x = "каша";
var y = "лот";
var z = "акула";
if (!x || y) z = x+y;



6.
var x = "каша";
var y = "лот";
var z = "акула";
if (!(x || y)) z = x+y;



7.
var x = -10;
var y = 10;
var z = x+y;
if (z) z = 20;



8.
var x = -10;
var y = 10;
var z = x+y;
if (!z) z = y-x;



9.
var x = -10;
var y = 10;
var z = x+y;
if (x > y) z = y-x;



10.
var x = -10;
var y = 10;
var z = x+y;
if (x <= y) z = y-x;



11.
var x = -10;
var y = 10;
var z = x/y;
if (x + y || x > 0) z = y-x;



12.
var x = -10;
var y = 10;
var z = x/y;
if (x + y || x < 0) z = y-x;



13.
var x = -10;
var y = 10;
var z = x/y;
if (x + y && x < 0) z = y-x;



14.
var x = -10;
var y = 10;
if (x + y && y < 0) z = y-x;
else                z = x+y;



15.
var x = -10;
var y = 10;
if (x + y || y < 0) z = y-x;
else                z = x+y;



16.
var x = -10;
var y = 10;
if (x+y==0 || y<0) z = y-x;
else               z = x+y;



Чтобы увидеть результат работы, нажмите кнопку Оценка.

 

задания
  1. Создайте экзамен для проверки знаний по теме "условная команда". Среди заданий, возможны такие:
    1. var x = 5; if (x!=5) x++; Теперь x = ?
    2. var x = 5; if (x==5) x++; Теперь x = ?
    3. var x = 5; var y = x++; if (y>x) x++; Теперь x = ?
    4. var x = 5; var y = ++x; if (y>x) x++; Теперь x = ?
    5. var x = 5; var y = x-5; if (y==0 || x>0) x++; Теперь x = ?
 

содержание урок 2 урок 4 письмо автору об авторах