var apples = 5;
alert('Имеется ' + apples + ' яблок!');
var eat = prompt('Сколько яблок вы хотите съесть?', '1');
var eaten = parseInt(eat);
if(isNaN(eaten)){
alert('Вы должны ввести допустимое число яблок!');
} else if(eaten > apples){
alert('Простите, но имеется только ' + apples + ' яблок.
Вы не можете съесть ' + eaten +
' яблок!');
} else if(eaten < 0){
alert('Простите, но вы не можете съесть
отрицательное количество яблок!');
} else {
apples -= eaten;
alert('А теперь имеется только ' + apples + ' яблок!');
}
Теперь все это должно быть понятно читателю. Прежде всего проверяется, что введено допустимое значение. Если значение недопустимо, выводится соответствующее сообщение. Затем проверяется, что введенное число не превышает количество существующих яблок, а затем - что это число не является отрицательным. Если все эти проверки проходят успешно, пользователь сможет съесть столько яблок, сколько захочет. В коде сделано еще одно изменение, вместо if(eaten > 5) используется if(eaten > apples) . Если в последующем количество имеющихся яблок var apples = 5; изменится, то это изменение пришлось бы делать только в одном месте. Старайтесь всегда использовать в коде переменные. Если значения "жестко закодированы", как было сделано ранее в коде if(eaten > 5) , то очень часто при внесении изменений придется подолгу искать эти жестко закодированные значения, чтобы убедиться, что внесены все необходимые изменения.
Если пользователь ввел каким-либо образом недопустимое значение, то можно попросить его повторно ввести количество яблок, которое он хочет съесть. Одним из способов сделать это было бы копирование всего кода несколько раз. Однако обычно это не самое лучшее решение. Что, если пользователь вводит недопустимое значение снова и снова? Можно продолжить копирование кода, но легко видеть, что это крайне неэффективно и очень трудно поддерживать код в рабочем состоянии.
В этом случае лучшим решением будет использование так называемой функции. Функция содержит код, который выполняет определенную задачу. Мы уже видели использование функций alert , prompt , parseInt и isNaN , которые встроены в язык JavaScript . Преимущество использования функций состоит в том, что можно выполнять один и тот же блок кода снова и снова, не копируя этот код, Для выполнения функции необходимо написать ее имя, за которым следуют скобки () , а все значения, передаваемые в функцию, записываются между скобками.
var apples = 5;
function eatApples(){
alert('Имеется ' + apples + ' яблок!');
var eat = prompt('Сколько яблок вы хотите съесть?', '1');
var eaten = parseInt(eat);
if(isNaN(eaten)){
alert('Вы должны ввести допустимое число яблок!');
eatApples();
} else if(eaten > apples){
alert('Простите, но имеется только ' + apples + ' яблок.
Вы не можете съесть ' + eaten +
' яблок!');
eatApples();
} else if(eaten < 0){
alert('Простите, но вы не можете съесть
отрицательное количество яблок!');
eatApples();
} else {
apples -= eaten;
alert('А теперь имеется только ' + apples + ' яблок!');
if(apples > 0){
if(confirm('Не хотите съесть еще яблочко?')){
eatApples();
}
} else {
alert('Яблок больше нет!');
}
}
}
Здесь весь наш код записан в виде функции с именем eatApples . Можно видеть, что каждый раз, когда пользователь вводит неверное значение, снова вызывается функция eatApples(); , чтобы пользователь мог ввести новое значение. Когда пользователь вводит допустимое значение, то он либо может еще есть яблоки, либо, если все яблоки закончились, он получит соответствующее сообщение. Здесь используется также одна новая функция, confirm . Функция confirm просто выводит пользователю приглашение OK or Cancel ("Да или Отмена"). Если пользователь нажмет кнопку " OK ", то функция возвращает значение true (да). Если пользователь нажмет кнопку Cancel или просто закроет окно, то функция confirm возвращает значение false (нет). Поэтому в нашем примере функция eatApples вызывается снова только в том случае, когда пользователь щелкнет на кнопке OK .
В конце этой лекции будет рассмотрена область действия переменной. Как можно видеть, в последнем примере переменная apples находится вне функции eatApples . Это делает переменную apples "глобальной переменной", т.е. она будет доступна из любой функции. Переменная eat , с другой стороны, является локальной переменной и существует только внутри функции eatApples . Кроме того, каждый раз при вызове функции eatApples переменная eat не будет существовать, пока не будет снова определена функцией prompt .
Чтобы увидеть эту концепцию в действии, напишем две простые функции счета:
Читать дальше