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