me@helium 8 سال پیش
والد
کامیت
1c2cd799c7
1فایلهای تغییر یافته به همراه53 افزوده شده و 0 حذف شده
  1. 53 0
      05.md

+ 53 - 0
05.md

@@ -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`, что усложняет модификацию и отладку кода.
+
+## Задание
+
+Порассуждаем о функциях, какие свойства должны быть у них, что бы они обеспечивали прозрачную работу в комбинации с другим кодом и не имели
+непредсказуемых побочных эффектов для кода, который их использует.
+
+![СПОЙЛЕР](http://www.websoldier.ru/wp-content/uploads/2015/02/kak-sdelat-spojler-dlya-sajta.jpg)
+
+