Как можно было заметить, компьютеры сильны именно в однотипных задачах, и делают простые задачи очень быстро. Связанные друг с другом однотипные задачи
обычно
повторяются в циклах (однотипные операции над массивами данных, статистические задачи, отрисовка повторяющихся данных на экране и так далее). Так же есть
задачи по требованию, которые могут пригодится в любом месте кода. Например: prompt
, alert
, Math.random
и прочие встроенные функции, которые
являются подпрограммами, содержащими в себе программный код, вызываемый для решения определенной задачи. Я думаю понятно, что данные возможности
не являются возможностями аппаратуры, а воплощены на программном уровне.
Don't repeat yourself. Один из основопологающих принципов разработки. Суть в том, что в процессе программирования вы должны минимизировать повторяющиеся части кода, которые делают почти одинаковые задачи; так как копипаста в коде приводит к дублированию отладки, да и вообще некрасиво это :-)
Keep It Simple, Stupid. Решайте задачи самым простым способом.
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать. — Brian W. Kernighan.
Зачастую эти принципы противоречат друг другу; уменьшение объема кода требует более мощных и сложнее отлаживаемых средств языка; однако в долгосрочной перспективе принцип DRY полезней, чем простота кода (KISS).
var surname = prompt("Введите фамилию","")
if (surname === null || surname === ""){
surname = "Иванов"
}
var name = prompt("Введите имя","") || "Иван"
var fathername = prompt("Введите отчество","") || "Иванович"
Это наш пример, который спрашивает у пользователя ФИО ИЛИ берет эти параметры по умолчанию. Как видите, алгоритм ввода ФИО однотипен, и его
неплохо было бы выделить в функцию. Ко всему прочему, несмотря на эквивалентность алгоритма, surname
вводится кодом, отличающимся от
ввода name
и fathername
, что усложняет модификацию и отладку кода.
Порассуждаем о функциях, какие свойства должны быть у них, что бы они обеспечивали прозрачную работу в комбинации с другим кодом и не имели непредсказуемых побочных эффектов для кода, который их использует.
Функция - подпрограмма, которая принимает определенные параметры при вызове, выполняет определенный код, и возвращает выполнение кода в место вызова, опционально (не обязательно) вернув результат работы в место вызова.
Свойства функции, которые сделали её такой полезной для написания программ:
function d()
{
debugger;
}
var surname = "Петров";
function readSurname()
{
surname = prompt("Введите фамилию","")
if (surname === null || surname === ""){
surname = "Иванов"
}
}
alert(surname);
readSurname();
alert(surname);
Для решения этой проблемы используется концепция области видимости - правильно объявленная переменная
в функции (через var
) существует только в функции и создаются каждый раз при вызове функции; внешние же переменные с таким же именем остаются
нетронутыми
var surname = "Петров";
function readSurname()
{
var surname = prompt("Введите фамилию","")
if (surname === null || surname === ""){
surname = "Иванов"
}
}
alert(surname);
readSurname();
alert(surname);
confirm
, prompt
, alert
.
Задание: Каковы параметры и какой у них смысл в вышеуказанных встроенных функциях?var surname = "Петров";
function readSomething()
{
var surname = prompt("Введите фамилию","")
if (surname === null || surname === ""){
surname = "Иванов"
}
}
alert(surname);
readSurname();
alert(surname);