|
@@ -0,0 +1,208 @@
|
|
|
+# Домашнее задание. Функции
|
|
|
+
|
|
|
+## Анализ
|
|
|
+
|
|
|
+Проанализируйте свои предыдущие ДЗ на предмет повторяющихся действий и придумайте названия, параметры и возвращаемое значение для функций
|
|
|
+в этих случаях
|
|
|
+
|
|
|
+## a
|
|
|
+
|
|
|
+Напишите функцию `a`, которая просто является коротким именем для alert. Смотрите пример с `d()`, которая является коротким именем для `debugger` из
|
|
|
+материала лекции
|
|
|
+
|
|
|
+```javascript
|
|
|
+a("Привет!") // вызывает alert("Привет!")
|
|
|
+```
|
|
|
+
|
|
|
+## cube
|
|
|
+
|
|
|
+Напишите функцию `cube`, которая возвращает число в третьей степени:
|
|
|
+
|
|
|
+```javascript
|
|
|
+cube(1) // возвращает 1
|
|
|
+cube(2) // возвращает 8
|
|
|
+cube(3) // возвращает 27
|
|
|
+```
|
|
|
+
|
|
|
+## avg2
|
|
|
+
|
|
|
+Напишите функцию `avg2`, которая рассчитывает среднюю для двух чисел:
|
|
|
+
|
|
|
+```javascript
|
|
|
+avg2(1,2) // возвращает 1.5
|
|
|
+avg2(10,5) // возвращает 7.5
|
|
|
+```
|
|
|
+
|
|
|
+формула для подсчета среднего: (a + b) / 2
|
|
|
+
|
|
|
+## sum3
|
|
|
+
|
|
|
+Напишите функцию `sum3` для суммирования 3 чисел:
|
|
|
+
|
|
|
+```javascript
|
|
|
+sum3(1,2,3) // => 6
|
|
|
+sum3(5,10,100500) // => 100515
|
|
|
+sum3(5,10) // => 15
|
|
|
+```
|
|
|
+Обратите внимание, что `sum3` от двух параметров тоже работает корректно.
|
|
|
+
|
|
|
+## intRandom
|
|
|
+
|
|
|
+Напишите функцию `intRandom`, которая принимает два параметра: нижнюю и верхнюю границу, и возвращает
|
|
|
+**целое** случайное число из этого диапазона включительно:
|
|
|
+
|
|
|
+```javascript
|
|
|
+intRandom(2,15) // возвращает целое случайное число от 2 до 15 (включительно)
|
|
|
+intRandom(-1,-1) // вернет -1
|
|
|
+intRandom(0,1) // вернет 0 или 1
|
|
|
+intRandom(10) // вернет 0 до 10 включительно
|
|
|
+```
|
|
|
+
|
|
|
+Обратите внимание, что если передан один параметр (`intRandom(10)` в примере выше), то функция работает как будто первый параметр равен 0, а переданный
|
|
|
+параметр становится вторым параметром (`intRandom(0,10)`)
|
|
|
+
|
|
|
+Используйте умножение для расширения значения встроенной функции `Math.random` c диапозона 1, сложениe для смещения результата
|
|
|
+на первый параметр, и `Math.round` для округления результата
|
|
|
+
|
|
|
+## greetAll
|
|
|
+
|
|
|
+Сделайтей функцию, которая приветствует всех, кто передан в качестве параметров
|
|
|
+
|
|
|
+```javascript
|
|
|
+greetAll("Superman") // выводит alert "Hello Superman"
|
|
|
+greetAll("Superman", "SpiderMan") // выводит alert "Hello Superman, SpiderMan"
|
|
|
+greetAll("Superman", "SpiderMan", "Captain Obvious") // выводит alert "Hello Superman, SpiderMan, Captain Obvious"
|
|
|
+```
|
|
|
+Используйте `arguments` и `for`.
|
|
|
+
|
|
|
+## sum
|
|
|
+
|
|
|
+Напишите функцию `sum`, которая сумирует любое количество параметров:
|
|
|
+
|
|
|
+```javascript
|
|
|
+sum(1) // => 1
|
|
|
+sum(2) // => 2
|
|
|
+sum(10,20,40,100) // => 170
|
|
|
+```
|
|
|
+
|
|
|
+Используйте псевдомассив `arguments` для получения всех параметров, и `for` для итерирования по нему
|
|
|
+
|
|
|
+## avg
|
|
|
+
|
|
|
+Сделайте функцию `avg`, которая рассчитывает среднее значение любого количества параметров
|
|
|
+
|
|
|
+```javascript
|
|
|
+sum(1) // => 1
|
|
|
+sum(2) // => 2
|
|
|
+sum(10,20,40,100) // => 42.5
|
|
|
+```
|
|
|
+
|
|
|
+## Union
|
|
|
+
|
|
|
+Всё предыдущие функции и примеры с ними объедините в функции, которые вызывайте в `switch` по имени задания:
|
|
|
+```javascript
|
|
|
+
|
|
|
+function aSample(){
|
|
|
+ a("Привет!") // вызывает alert("Привет!")
|
|
|
+}
|
|
|
+
|
|
|
+function cubeSample(){
|
|
|
+ cube(5) // => 125
|
|
|
+}
|
|
|
+
|
|
|
+var sample = prompt("Введите название задания")
|
|
|
+switch (sample.toLowerCase()){
|
|
|
+ case "a": aSample()
|
|
|
+ break
|
|
|
+ case "cube": cubeSample()
|
|
|
+ break
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+## Union declarative
|
|
|
+
|
|
|
+Используйте ассоциативный массив вместо `switch`
|
|
|
+
|
|
|
+## Синий пояс: inputPerson
|
|
|
+
|
|
|
+Сделайте функцию inputPerson, которая будет спрашивать у пользователя фамилию, имя, отчество, и возвращать ассоциативный массив с новой
|
|
|
+персоной:
|
|
|
+
|
|
|
+```javascript
|
|
|
+inputPerson() // => {"name": "то, что ввел пользователь", "surname": ..., }
|
|
|
+var persons = [inputPerson(), inputPerson(), inputPerson()] // => вводим трех персон
|
|
|
+```
|
|
|
+
|
|
|
+## Коричневый пояс: inputAnything
|
|
|
+
|
|
|
+Сделайте функцию inputAnything, которая в качестве параметра принимает следующую структуру:
|
|
|
+
|
|
|
+```javascript
|
|
|
+var inputStructure = [
|
|
|
+ {prompt: "Введите Фамилию",
|
|
|
+ default_: "",
|
|
|
+ field: "surname"
|
|
|
+ },
|
|
|
+ {prompt: "Введите Имя",
|
|
|
+ default_: "",
|
|
|
+ field: "name"
|
|
|
+ },
|
|
|
+ {prompt: "Введите Отчество",
|
|
|
+ default_: "",
|
|
|
+ field: "fatherName"
|
|
|
+ },
|
|
|
+ {prompt: "Введите возраст",
|
|
|
+ default_: "0",
|
|
|
+ field: "age"
|
|
|
+ },
|
|
|
+]
|
|
|
+```
|
|
|
+Функция с таким параметром будет выводить 4 раза `prompt`, с текстом из полей `prompt` структуры ("Введите Фамилию" и так далее), и формировать внутренний
|
|
|
+объект `result` с полями `field` (`surname`, `name` и так далее), и значениями, который введет пользователь (вернет функция `prompt`).
|
|
|
+`default_` в структуре передается в `prompt` как значение по умолчанию.
|
|
|
+
|
|
|
+```javascript
|
|
|
+inputAnything([{prompt: "Введите число",
|
|
|
+ default_: "0",
|
|
|
+ field: "number"
|
|
|
+ }]) // => {number: "число, которое ввел пользователь"}
|
|
|
+inputAnything(inputStructure) // => {surname: "...", name: "...", fatherName: "...", age: "..."}
|
|
|
+```
|
|
|
+
|
|
|
+Таким образом вы сделаете функцию, которая может ввести вам данные в любой ассоциативный массив, указывая структуру получаемого массива
|
|
|
+в *декларативном стиле*.
|
|
|
+
|
|
|
+## Черный пояс: jqInputAnything
|
|
|
+Сделайте генератор форм по структуре, схожей из предыдущего задания, который при нажатии кнопки сохранения будет формировать объект со значениями из полей ввода по аналогии с `inputAnything`. Расширьте декларацию формы дополнительными полями `type` и `placeholder`:
|
|
|
+
|
|
|
+```javascript
|
|
|
+var inputStructure = [
|
|
|
+ {prompt: "Введите Фамилию",
|
|
|
+ default_: "",
|
|
|
+ field: "surname",
|
|
|
+ placeholder: "surname",
|
|
|
+ type: "text",
|
|
|
+ },
|
|
|
+ {prompt: "Введите Имя",
|
|
|
+ default_: "",
|
|
|
+ field: "name",
|
|
|
+ placeholder: "name",
|
|
|
+ type: "text",
|
|
|
+ },
|
|
|
+ {prompt: "Введите Отчество",
|
|
|
+ default_: "",
|
|
|
+ field: "fatherName",
|
|
|
+ placeholder: "father name",
|
|
|
+ type: "text",
|
|
|
+ },
|
|
|
+ {prompt: "Введите возраст",
|
|
|
+ default_: "0",
|
|
|
+ field: "age",
|
|
|
+ placeholder: "age",
|
|
|
+ type: "number",
|
|
|
+ },
|
|
|
+]
|
|
|
+
|
|
|
+inputAnything(inputStructure, "Сохранить") //второй параметр - текст на кнопке
|
|
|
+```
|
|
|
+
|