From 9cf1c0e8c84c6f72550d6e862e82bf929f9abf1f Mon Sep 17 00:00:00 2001 From: pkolev Date: Thu, 28 Dec 2017 17:21:26 +0200 Subject: [PATCH 1/2] =?UTF-8?q?[wip]=20=D0=BA=D0=BE=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BD=D0=B0=20=D0=B2=D1=81=D0=B8=D1=87?= =?UTF-8?q?=D0=BA=D0=BE=20=D0=B4=D0=BE=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapter-10-functions.md | 373 +++++++++++++++++----------------------- 1 file changed, 162 insertions(+), 211 deletions(-) diff --git a/chapter-10-functions.md b/chapter-10-functions.md index e5e4b7ce..f35fe8c3 100644 --- a/chapter-10-functions.md +++ b/chapter-10-functions.md @@ -1,73 +1,91 @@ # Глава 10. Функции +**JavaScript** е известен като **функционален език** за програмиране. Самото наименование подсказва, че **функциите** са изключително важна част от езика. + В настоящата глава ще се запознаем с **функциите** и ще научим какво **представляват** те, както и кои са **базовите концепции** при работа с тях. Ще научим защо е **добра практика** да ги използваме, как да ги **декларираме** и **извикваме**. Ще се запознаем с **параметри** и **връщана стойност от функция**, както и как да използваме тази връщана стойност. Накрая на главата, ще разгледаме **утвърдените практики** при използване на функциите. ## Какво е "функция"? До момента установихме, че при **писане** на код на програма, която решава дадена задача, ни **улеснява** това, че **разделяме** задачата на **части**. Всяка част отговаря за **дадено действие** и по този начин не само ни е **по-лесно** да решим задачата, но и значително се подобрява както **четимостта** на кода, така и проследяването за грешки. -Всяко едно парче код, което изпълнява дадена функционалност и което сме отделили логически, може да изземе функционалността на метода. Точно това представляват **методите – парчета код, които са именувани** от нас по определен начин и които могат да бъдат **извикани** толкова пъти, колкото имаме нужда. +Всяко едно парче код, което изпълнява дадена функционалност и което сме отделили логически се нарича **функция**. Точно това представляват **функциите – парчета код, които са именувани** от нас по определен начин и които могат да бъдат **извикани** толкова пъти, колкото имаме нужда и ще бъдат изпълнени съответния брой пъти. -Един метод може да бъде извикан толкова пъти, колкото ние преценим, че ни е нужно за решаване на даден проблем. Това ни **спестява** повторението на един и същи код няколко пъти, както и **намалява** възможността да пропуснем грешка при евентуална корекция на въпросния код. +Една **функция** може да бъде извикан толкова пъти, колкото ние преценим, че ни е нужно за решаване на даден проблем. Това ни **спестява** повторението на един и същи код няколко пъти, както и **намалява** възможността да пропуснем грешка при евентуална корекция на въпросния код. -### Прости методи +### Прости функции -**Простите** методи отговарят за изпълнението на дадено **действие**, което **спомага** за решаване на определен проблем. Такива действия могат да бъдат разпечатване на даден низ на конзолата, извършване на някаква проверка, изпълнение на цикъл и други. +**Простите** функции отговарят за изпълнението на дадено **действие**, което **спомага** за решаване на определен проблем. Такива действия могат да бъдат разпечатване на даден низ на конзолата, извършване на някаква проверка, изпълнение на цикъл и други. -Нека разгледаме следния **пример за прост метод**: +Нека разгледаме следния **пример за проста функция**: ![](assets/old-images/chapter-10-images/01.Simple-method-01.png) -Този метод има задачата да отпечата заглавие, което представлява поредица от символа **`-`**. Поради тази причина името му е **`PrintHeader`**. Кръглите скоби **`( `** и **`)` винаги** следват името, независимо как сме именували метода. По-късно ще разгледаме как трябва да именуваме методите, с които работим, а за момента ще отбележим само, че е важно **името му да описва действието**, което той извършва. +Тази функция има задачата да отпечата заглавие, което представлява поредица от символа **`-`**. Поради тази причина името му е **`printHeader`**. Кръглите скоби **`( `** и **`)` винаги** следват името, независимо как сме именували функцията. По-късно ще разгледаме как трябва да именуваме функциите, с които работим, а за момента ще отбележим само, че е важно **името на функцията да описва действието**, което тя извършва. + +**Тялото** на функцията съдържа **програмния код**, който се намира между къдравите скоби **`{`** и **`}`**. Между тях поставяме кода, който решава проблема, описан от името на функцията. + +### Защо да използваме функции? + +До тук установихме, че функциите спомагат за **разделянето на обемна задача на по-малки части**, което води до **по-лесно решаване** на въпросното задание. Това прави програмата ни не само по-добре структурирана и **лесно четима**, но и по-разбираема. + +Чрез функциите **избягваме повторението** на програмен код. **Повтарящият** се код е **лоша** практика, тъй като силно **затруднява поддръжката** на програмата и води до грешки. Ако дадена част от кода ни присъства в програмата няколко пъти и се наложи да променим нещо, то промените трябва да бъдат направени във всяко едно повторение на въпросния код. Вероятността да пропуснем място, на което трябва да нанесем корекция, е много голяма, което би довело до некоректно поведение на програмата. Това е причината, поради която е **добра практика**, ако използваме даден фрагмент код **повече от веднъж** в програмата си, да го **дефинираме като отделена функция**. -**Тялото** на метода съдържа **програмния код**, който се намира между къдравите скоби **`{`** и **`}`**. Тези скоби **винаги** следват **декларацията** му и между тях поставяме кода, който решава проблема, описан от името на метода. +Функциите ни предоставят **възможността** да използваме даден **код няколко пъти**. С решаването на все повече и повече задачи ще установите, че използването на вече декларирани функции спестява много време и усилия. -### Защо да използваме методи? +## Деклариране на функции -До тук установихме, че методите спомагат за **разделянето на обемна задача на по-малки части**, което води до **по-лесно решаване** на въпросното задание. Това прави програмата ни не само по-добре структурирана и лесно четима, но и по-разбираема. +В езика JavaScript можем да **декларираме** функции буквално навсякъде, по същият начин, по който можем да декларираме и променливи навсякъде. Декларирането представлява регистрирането на функцията в програмата, за да бъде разпознаван в останалата част от нея. -Чрез методите **избягваме повторението** на програмен код. **Повтарящият** се код е **лоша** практика, тъй като силно **затруднява поддръжката** на програмата и води до грешки. Ако дадена част от кода ни присъства в програмата няколко пъти и се наложи да променим нещо, то промените трябва да бъдат направени във всяко едно повторение на въпросния код. Вероятността да пропуснем място, на което трябва да нанесем корекция, е много голяма, което би довело до некоректно поведение на програмата. Това е причината, поради която е **добра практика**, ако използваме даден фрагмент код **повече от веднъж** в програмата си, да го **дефинираме като отделен метод**. +JavaScript не е **strongly typed** език (силно типизиран). Затова и когато **декларираме функция** тя няма тип (string, number, array и т.н.). -Методите ни предоставят **възможността** да използваме даден **код няколко** пъти. С решаването на все повече и повече задачи ще установите, че използването на вече съществуващи методи спестява много време и усилия. +Има 2 основни начина, по които могат да се декларирате функции в JavaScript - **декларативно - function declaration** и **експресивно - function expression**. -### Деклариране на методи +### Декларативно (function declaration) -В езика JavaScript **декларираме** методите в рамките на даден клас, т.е. между отварящата **`{`** и затваряща **`}`** скоби на класа. Декларирането представлява регистрирането на метода в програмата, за да бъде разпознаван в останалата част от нея. Най-добре познатият ни пример за метод е метода **`Main(…)`**, който използваме във всяка една програма, която пишем. +Със следващия пример ще разгледаме задължителните елементи в декларацията на една функция **чрез function declaration**. -![](assets/old-images/chapter-10-images/02.Declaring-methods-01.png) +![](assets/old-images/chapter-10-images/02.Declaring-methods-02.png) + +* **Ключовата думичка function**. Започваме с използването на **ключовата думичка** ***function***, чрез която заявяваме, че предстои декларация на функция. Наричаме я ключова, защото тя е запазена в езика или с други думи казано - не можем да имаме променлива, която да именуваме по този начин. +* **Име на функцията**. Името на функцията е **определено от нас**, като не забравяме, че трябва да **описва функцията**, която е изпълнявана от кода в тялото му. В примера името е **`getSquare`**, което ни указва, че задачата на тази функция е да изчисли лицето на квадрат. +* **Списък с параметри**. Декларира се между скобите **`(`** и **`)`**, които изписваме след името му. Тук изброяваме поредицата от **параметри**, които функцията ще използва. Може да присъства **само един** параметър, **няколко** такива или да е **празен** списък. Ако няма параметри, то ще запишем само скобите **`()`**. В конкретния пример декларираме параметъра **`num`**. +* **Тяло на функцията**. Декларира се между скобите **`{`** и **`}`**, които изписваме веднага след затварящата **`)`**. В **тялото на функцията** описваме **чрез код** всички операции, които искате функцията да извърши. В тялото на функцията описваме **алгоритъма**, по който той решава даден проблем. Реализираме **логиката** на функцията. В показания пример изчисляваме лицето на квадрат, а именно **`num * num`**. + +При деклариране на функции е важно да спазваме **последователността** на основните елементи - първо **ключовата думичка function**, след това **име на функцията**, **списък от параметри**, ограден с кръгли скоби **`()`** и накрая **тяло на функцията**, оградено с фигурни скоби **`{}`**. -Със следващия пример ще разгледаме задължителните елементи в декларацията на един метод. +## Експресивно (function expression) + +Със следващия пример ще разгледаме задължителните елементи в декларацията на една функция **чрез function expression**. То доста наподобява **декларацията**, която вече разгледахме и може да се каже, че е **комбинация** от **деклариране на променлива** и **деклариране на функция с function declaration**. ![](assets/old-images/chapter-10-images/02.Declaring-methods-02.png) -* **Тип на връщаната стойност**. В случая типа е **`double`**, което означава, че методът от примера ще **върне резултат**, който е от тип **`double`**. Връщаната стойност може да бъде както **`int`**, **`double`**, **`string`** и **т.н.**, така и **`void`**. Ако типът е **`void`**, то това означава, че методът **не връща** резултат, а само **изпълнява дадена операция**. -* **Име на метода**. Името на метода е **определено от нас**, като не забравяме, че трябва да **описва функцията**, която е изпълнявана от кода в тялото му. В примера името е **`GetSquare`**, което ни указва, че задачата на този метод е да изчисли лицето на квадрат. -* **Списък с параметри**. Декларира се между скобите **`(`** и **`)`**, които изписваме след името му. Тук изброяваме поредицата от **параметри**, които метода ще използва. Може да присъства **само един** параметър, **няколко** такива или да е **празен** списък. Ако няма параметри, то ще запишем само скобите **`()`**. В конкретния пример декларираме параметъра **`double num`**. -* Декларация **`static`** в описанието на метода. За момента може да приемем, че **`static`** се пише винаги, когато се декларира метод, а по-късно, когато се запознаем с обектно-ориентираното програмиране (ООП), ще разберем разликата между **статични методи** (споделени за целия клас) и **методи на обект**, които работят върху данните на конкретна инстанция на класа (обект). +* **Ключовата думичка let**. Започваме с използването на **ключовата думичка** **let**, чрез която заявяваме, че предстои декларация на променлива. +* **Име на променливата**. Името на променливата е **определено от нас**. В примера името е **`getSquare`**, което ни указва, че задачата на тази функция е да изчисли лицето на квадрат. +* **Декларация на функция**. Използвайки същата структура, която вече научихме при **function declaration** - първо **ключовата думичка function**, след това **име на функцията**, **списък от параметри**, ограден с кръгли скоби **`()`** и накрая **тяло на функцията**, оградено с фигурни скоби **`{}`**. Особеното в случая е, че **името на функцията** не е задължителен елемент, но е препоръчително да свикнете да го добавяте. В примерът програмата ще работи без проблеми, дори и да пропуснем да изпишем името **`getSquareFunc`**. Ако пропуснем името, функцията се нарича **анонимна**. + +Когато декларираме дадена променлива в тялото на една функция (чрез ключовата думичка **let** или **const**), я наричаме **локална** променлива за функцията. Областта, в която съществува и може да бъде използвана тази променлива, започва от реда, на който сме я декларирали и стига до затварящата къдрава скоба `}` на тялото на метода. Тази област се нарича **област на видимост** на променливата (variable scope). -При деклариране на методи е важно да спазваме **последователността** на основните му елементи - първо **тип на връщаната стойност**, след това **име на метода** и накрая **списък от параметри**, ограден с кръгли скоби **`()`**. +### Декларативно или експресивно -След като сме декларирали метода, следва неговата **имплементация (тяло)**. В тялото на метода описваме **алгоритъма**, по който той решава даден проблем, т.е. тялото съдържа кода (програмен блок), който реализира **логиката** на метода. В показания пример изчисляваме лицето на квадрат, а именно **`num * num`**. +Разликата между деклариране на функция чрез **експресия** или **декларация** е сравнително проста. Всички функции, декларирани чрез **function declaration**, се зареждат в паметта на програмата преди да започне нейното изпълнение, докато програмата разбира за функции, декларирани с **function expression** едва когато започне да се изпълнява и стигне до реда, на който е декларирана функцията. -Когато декларираме дадена променлива в тялото на един метод, я наричаме **локална** променлива за метода. Областта, в която съществува и може да бъде използвана тази променлива, започва от реда, на който сме я декларирали и стига до затварящата къдрава скоба `}` на тялото на метода. Тази област се нарича **област на видимост** на променливата (variable scope). +На практика това означава, че можете да **извикате функция**, декларирана с **function declaration** дори и в някои от предните редове - преди нейната декларация, докато ако опитате да направите това с **function expression** програмата ще ви **даде грешка**, че не разпознава тази функция по време на изпълнението. -### Извикване на методи +## Извикване на функции -Извикването на метод представлява **стартирането на изпълнението на кода**, който се намира в **тялото на метода**. Това става като изпишем **името** му, последвано от кръглите скоби **`()`** и знака **`;`** за край на реда. Ако методът ни изисква входни данни, то те се подават в скобите **`()`**, като последователността на фактическите параметри трябва да съвпада с последователността на подадените при декларирането на метода. Ето един пример: +Извикването на функции представлява **стартирането на изпълнението на кода**, който се намира в **тялото на функцията**. Това става като изпишем **името** на функцията, последвано от кръглите скоби **`()`** и знака **`;`** за край на реда. Ето един пример: ![](assets/old-images/chapter-10-images/03.Invoking-methods-01.png) -Даден метод може да бъде извикан от **няколко места** в нашата програма. Единият начин е да бъде извикан от **главния метод**. +Дадена функция може да бъде извикана от **няколко места** в нашата програма. Единият начин е да бъде извикана от **главната област на програмата** (global scope). ![](assets/old-images/chapter-10-images/03.Invoking-methods-02.png) -Метод може да бъде извикан и от **тялото на друг метод**, който **не** е главния метод на програмата ни. +Функция може да бъде извикана и от **тялото на друга функция**, която **не** е флавната област на програмата ни. ![](assets/old-images/chapter-10-images/03.Invoking-methods-03.png) -Съществува вариант методът да бъде извикан от **собственото си тяло**. Това се нарича **рекурсия** и можете да намерите повече информация за нея в [Wikipedia](https://bg.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F) или да потърсите сами в Интернет. - -Важно е да знаем, че ако един метод е деклариран в даден клас, то той може да бъде извикван преди реда, на който е деклариран. +Съществува вариант функцията да бъде извикана от **собственото си тяло**. Това се нарича **рекурсия** и можете да намерите повече информация за нея в [Wikipedia](https://bg.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F) или да потърсите сами в Интернет. ### Пример: празна касова бележка @@ -87,47 +105,57 @@ #### Насоки и подсказки -Първата ни стъпка е да създадем **`void`** метод за **принтиране на заглавната част** от касовата бележка (header). Нека му дадем смислено име, което описва кратко и ясно задачата му, например **`PrintReceiptHeader`**. В тялото му ще напишем кода от примера по-долу: +Първата ни стъпка е да създадем функция за **принтиране на заглавната част** от касовата бележка (header). Нека му дадем смислено име, което описва кратко и ясно задачата му, например **`printReceiptHeader`**. В тялото му ще напишем кода от примера по-долу: ![](assets/old-images/chapter-10-images/04.Print-receipt-01.png) -Съвсем аналогично ще създадем още два метода **за разпечатване на средната част** на бележката (тяло) **`PrintReceiptBody`** и **за разпечатване на долната част** на бележката (footer) **`PrintReceiptFooter`**. +Съвсем аналогично ще създадем още два метода **за разпечатване на средната част** на бележката (тяло) **`printReceiptBody`** и **за разпечатване на долната част** на бележката (footer) **`printReceiptFooter`**. След това ще създадем и **още един метод**, който ще извиква трите метода, които написахме до момента един след друг: ![](assets/old-images/chapter-10-images/04.Print-receipt-02.png) -Накрая ще **извикаме** метода **`PrintReceipt`** от тялото на главния **`Main`** метод за нашата програма: +Накрая ще **извикаме** метода **`printReceipt`** от global scope-a на нашата програма: ![](assets/old-images/chapter-10-images/04.Print-receipt-03.png) #### Тестване в Judge системата -Програмата с общо пет метода, които се извикват един от друг, е готова и можем **да я изпълним и тестваме**, след което да я пратим за проверка в judge системата: [https://judge.softuni.bg/Contests/Practice/Index/594#0](https://judge.softuni.bg/Contests/Practice/Index/594#0). +Програмата с общо четири функции, които се извикват един от друг, е готова и можем **да я изпълним и тестваме**, след което да я пратим за проверка в judge системата: [https://judge.softuni.bg/Contests/Practice/Index/594#0](https://judge.softuni.bg/Contests/Practice/Index/594#0). + +## Функции с параметри -## Методи с параметри +Много често в практиката, за да бъде решен даден проблем, функцията, с чиято помощ постигаме това, се нуждае от **допълнителна информация**, която зависи от задачата ѝ. Именно тази информация представляват **параметрите на функцията** и нейното поведение зависи от тях. -Много често в практиката, за да бъде решен даден проблем, методът, с чиято помощ постигаме това, се нуждае от **допълнителна информация**, която зависи от задачата му. Именно тази информация представляват **параметрите на метода** и неговото поведение зависи от тях. +### Използване на параметри във функции -### Използване на параметри в методите +Ако функцията ни изисква **входни данни**, то те се подават в скобите **`()`**, като последователността на **фактическите параметри** трябва да съвпада с последователността на подадените при декларирането на метода -Както отбелязахме по-горе, **параметрите освен нула на брой, могат също така да са един или няколко**. При декларацията им ги разделяме със запетая. Те могат да бъдат от всеки един тип (**`int`**, **`string`** и т.н.), а по-долу е показан пример как точно ще бъдат използвани от метода. +Както отбелязахме по-горе, **параметрите освен нула на брой, могат също така да са един или няколко**. При декларацията им ги разделяме със запетая. -**Декларираме** метода и **списъка** му с **параметри**, след което пишем кода, който той ще изпълнява. +**Декларираме** функцията и **списъка** му с **параметри**, от които тя се нуждае, за да работи коректно, след което пишем кода, който ще изпълнява. ![](assets/old-images/chapter-10-images/05.Method-parameters-01.png) -След това **извикваме** метода и му **подаваме конкретни стойности**: +След това **извикваме** функцията и му **подаваме конкретни стойности**: ![](assets/old-images/chapter-10-images/05.Method-parameters-02.png) -При **декларирането на параметри** можем да използваме **различни** типове променливи, като трябва да внимаване всеки един параметър да има **тип** и **име**. Важно е да отбележим, че при последващото извикване на метода, трябва да подаваме **стойности** за параметрите по **реда**, в който са **декларирани** самите те. Ако имаме подадени параметри в реда **`int`** и след това **`string`**, при извикването му не можем да подадем първо стойност за **`string`** и след това за **`int`**. Единствено можем да разменяме местата на подадените параметри, ако изрично изпишем преди това името на параметъра, както ще забележим малко по-нататък в един от примерите. Това като цяло не е добра практика! +При **декларирането на параметри** трябва да внимаване всеки един параметър да има **име**. Важно е при извикване на функцията, да подаваме **стойности** за параметрите по **реда**, в който са **декларирани** самите те. В примера, който разгледахме на променливата **start** ще бъде присвоена стойността на първият подаден параметър - в нашият случай числото 5. На променливата **end** ще бъде присвоена стойността на вторият параметър, който сме подали - в случая числото 10. + +Важно е да се отбележи, че в езикът **JavaScript** декларирането на функция с даден **брой параметри**, не ни задължава да извикваме функцията със **същият брой параметри**. Можем да извикаме функция като и подадем както **повече**, така и **по - малко** параметри, като това няма да доведе до грешка. + +Нека разгледаме следния пример: +---- +В случая извикваме функцията **`printNumbers`** като и подаваме 4, вместо **декларираните** 2 параметъра. Всички излишни параметри ще бъдат **игнорирани**. Т.е. числата 15 и 20, няма да стигнат до функцията, защото нямаме **деклариран параметър**, който да ги приеме. -Нека разгледаме примера за декларация на метод, който има няколко параметъра от различен тип. +Нека разгледаме още един пример: -![](assets/old-images/chapter-10-images/05.Method-parameters-03.png) +----- + +В случая извикваме функцията **`printNumbers`** като и подаваме 1, вместо **декларираните** 2 параметъра. Всички параметри, за които **не е подадена стойност**, ще получат автоматично стойност **`undefined`**. В нашият случай променливата **`secondNumber`** ще има стойност **`undefined`**. ### Пример: знак на цяло число @@ -143,13 +171,13 @@ #### Насоки и подсказки -Първата ни стъпка е **създаването** на метод и даването му на описателно име, например **`PrintSign`**. Този метод ще има само един параметър от тип **`int`**. +Първата ни стъпка е **създаването** на функция и даването ѝ на описателно име, например **`printSign`**. Тази функция ще има само един параметър. ![](assets/old-images/chapter-10-images/06.Print-sign-01.png) Следващата ни стъпка е **имплементирането** на логиката, по която програмата ни ще проверява какъв точно е знакът на числото. От примерите виждаме, че има три случая - числото е по-голямо от нула, равно на нула или по-малко от нула, което означава, че ще направим три проверки в тялото на метода. -Следващата ни стъпка е да прочетем входното число и да извикаме новия метод от тялото на **`Main`** метода. +Следващата ни стъпка е да извикаме функцията, която създадохме. ![](assets/old-images/chapter-10-images/06.Print-sign-02.png) @@ -166,13 +194,15 @@ ![](assets/old-images/chapter-10-images/07.Optional-parameters-01.png) -Показаният метод **`PrintNumbers`** може да бъде извикан по няколко начина: +Показаният метод **`printNumbers`** може да бъде извикан по няколко начина: ![](assets/old-images/chapter-10-images/07.Optional-parameters-02.png) +При липсата на **подадена стойност** на параметър, той ще **приеме стойността**, с която сме го **декларирали** при декларацията на функцията. + ### Пример: принтиране на триъгълник -Да се създаде метод, който принтира триъгълник, както е показано в примерите. +Да се създаде функция, която принтира триъгълник, както е показано в примерите. #### Примерен вход и изход @@ -182,7 +212,7 @@ #### Насоки и подсказки -Преди да създадем метод за принтиране на един ред с дадени начало и край, прочитаме входното число от конзолата. След това избираме смислено име за метода, което описва целта му, например **`PrintLine`**, и го имплементираме. +Избираме смислено име за метода, което описва целта му, например **`printLine`**, и го имплементираме. ![](assets/old-images/chapter-10-images/08.Print-triangle-01.png) @@ -217,15 +247,15 @@ #### Насоки и подсказки -Първата ни стъпка е да прочетем входа от конзолата. След това трябва да създадем метод, който ще принтира първия и последен ред, тъй като те са еднакви. Нека не забравяме, че трябва да му дадем **описателно име** и да му зададем като **параметър** дължината на страната. Ще използваме конструктора **`new string`**. +Създаваме функция, която ще принтира първия и последен ред, тъй като те са еднакви. Нека не забравяме, че трябва да му дадем **описателно име** и да му зададем като **параметър** дължината на страната. Ще използваме вградената функция **`repeat`**. ![](assets/old-images/chapter-10-images/09.Draw-filled-square-01.png) -Следващата ни стъпка е да създадем метод, който ще рисува на конзолата средните редове. Отново задаваме описателно име, например **`PrintMiddleRow`**. +Следващата ни стъпка е да създадем функция, която ще рисува на конзолата средните редове. Отново задаваме описателно име, например **`printMiddleRow`**. ![](assets/old-images/chapter-10-images/09.Draw-filled-square-02.png) -Накрая извикваме създадените методи в главния метод **`Main()`** на програмата, за да нарисуваме целия квадрат: +Накрая извикваме създадените функции в global scope-a на програмата, за да нарисуваме целия квадрат: ![](assets/old-images/chapter-10-images/09.Draw-filled-square-03.png) @@ -234,39 +264,21 @@ Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/594#3](https://judge.softuni.bg/Contests/Practice/Index/594#3). -## Връщане на резултат от метод - -До момента разгледахме методи, които извършват дадено действие, например отпечатване на даден текст, число или фигура на конзолата. Освен този тип методи, съществуват и такива, които могат да **връщат** някакъв **резултат**. Именно тези методи ще разгледаме в следващите редове. - -### Типове на връщаната от метода стойност +## Връщане на резултат от функция -До сега разглеждахме примери, в които при декларация на методи използвахме ключовата дума **`void`**, която указва, че методът **не** връща резултат, а изпълнява определено действие. - -![](assets/old-images/chapter-10-images/10.Return-types-01.png) - -Ако **заместим** **`void`** с **тип** на променлива, то това ще укаже на програмата, че метода трябва да върне някаква стойност от указания тип. Тази върната стойност може да бъде от всякакъв тип – **`int`**, **`string`**, **`double`** и т.н. - - -
-За да върне един метод резултат е нужно да внимаваме да напишем очаквания тип на резултата при декларацията на метода на мястото на void.
- -![](assets/old-images/chapter-10-images/10.Return-types-02.png) - -Важно е да отбележим, че **резултатът**, който се връща от метода, може да е от **тип, съвместим с типа на връщаната стойност** на метода. Например, ако декларираният тип на връщаната стойност е **`double`**, то можем да върнем резултат от тип **`int`**. +До момента разгледахме функции, които извършват дадено действие, например отпечатване на даден текст, число или фигура на конзолата. Освен този тип функции, съществуват и такива, които могат да **връщат** някакъв **резултат** от своето изпълнение - например резултатът от умножението на две числа. Именно тези функции ще разгледаме в следващите редове. ### Оператор return -За да получим резултат от метода, на помощ идва операторът **`return`**. Той трябва да бъде **използван в тялото** на метода и указва на програмата да **спре изпълнението** му и да **върне** на извиквача на метода определена **стойност**, която се определя от израза след въпросния оператор **`return`**. +За да получим резултат от функцията, на помощ идва операторът **`return`**. Той трябва да бъде **използван в тялото** на метода и указва на програмата да **спре изпълнението** на функцията и да **върне** на извиквача определена **стойност**, която се определя от израза след въпросния оператор **`return`**. -В примера по-долу имаме метод, който чете две имена от конзолата, съединява ги и ги връща като резултат. Връщаната стойност е от тип **`string`**: +В примера по-долу имаме функция, която получава име и фамилия като параметри, съединява ги и ги връща като резултат. ![](assets/old-images/chapter-10-images/11.Return-operator-01.png) -Операторът **`return`** може да бъде използван и във **`void`** методи. Тогава самият метод ще спре изпълнението си, без да връща никаква стойност, а след него не трябва да има израз, който да бъде върнат. В този случай употребата на **`return`** е единствено за излизане от метода. - -**Има случаи**, в които **`return`** може да бъде извикван от няколко места в метода, но само ако има **определени** входни условия. +**Има случаи**, в които **`return`** може да бъде извикван от няколко места във функцията, но само ако има **определени** входни условия. -В примера по-долу имаме метод, който сравнява две числа и връща резултат съответно **`-1`**, **`0`** или **`1`** според това дали първият аргумент е по-малък, равен или по-голям от втория аргумент, подаден на функцията. Методът използва ключо-вата дума **`return`** на три различни места, за да върне три различни стойности според логиката на сравненията на числата: +В примера по-долу имаме функция, която сравнява две числа и връща резултат съответно **`-1`**, **`0`** или **`1`** според това дали първият аргумент е по-малък, равен или по-голям от втория аргумент, подаден на функцията. Методът използва ключовата дума **`return`** на три различни места, за да върне три различни стойности според логиката на сравненията на числата: ![](assets/old-images/chapter-10-images/11.Return-operator-02.png) @@ -276,15 +288,22 @@ ![](assets/old-images/chapter-10-images/11.Return-operator-03.png) +Операторът **`return`** може да бъде използван и без да бъде специфицирана **конкретна стойност**, която да бъде върната. В този случай, просто ще бъде **прекратено** изпълнението на кода във функцията и ще бъде върната стойност по подразбиране **`undefined`**. + +----- + +В посоченият пример... + +
В програмирането не може да има два пъти оператор return един след друг, защото изпълнението на първия няма да позволи да се изпълни вторият. Понякога програмистите се шегуват с фразата “пиши return; return; и да си ходим”, за да обяснят, че логиката на програмата е объркана.
-### Употреба на връщаната от метода стойност +### Употреба на връщаната от функцията стойност -След като даден метод е изпълнен и върне стойност, то тази стойност може да се използва по **няколко** начина. +След като дадена функция е изпълнена и върне стойност, то тази стойност може да се използва по **няколко** начина. -Първият е да **присвоим резултата като стойност на променлива** от съвместим тип: +Първият е да **присвоим резултата като стойност на променлива**: ![](assets/old-images/chapter-10-images/12.Return-value-01.png) @@ -292,13 +311,13 @@ ![](assets/old-images/chapter-10-images/12.Return-value-02.png) -Третият е да **подадем** резултата от работата на метода към **друг метод**: +Третият е да **подадем** резултата от работата на функцията към **друга функция**: ![](assets/old-images/chapter-10-images/12.Return-value-03.png) ### Пример: пресмятане на лицето на триъгълник -Да се напише метод, който изчислява лицето на триъгълник по дадени основа и височина и връща стойността му. +Да се напише функция, който изчислява лицето на триъгълник по дадени основа и височина и връща стойността му. #### Примерен вход и изход @@ -308,11 +327,11 @@ #### Насоки и подсказки -Първата ни стъпка е да прочетем входа. След това **създаваме** метод, но този път внимаваме при **декларацията** да подадем коректния **тип** данни, които искаме метода да върне, а именно **`double`**. +**Създаваме** функция, с коректно име. ![](assets/old-images/chapter-10-images/13.Calculate-triangle-area-01.png) -Следващата ни стъпка е да **извикаме новия** метод от нашия **`Main()`** метод и да **запишем върнатата стойност в подходяща променлива**. +Следващата ни стъпка е да **извикаме новата** функция и да **запишем върнатата стойност в подходяща променлива**. ![](assets/old-images/chapter-10-images/13.Calculate-triangle-area-02.png) @@ -323,7 +342,7 @@ ### Пример: степен на число -Да се напише метод, който изчислява и връща резултата от повдигането на число на дадена степен. +Да се напише функция, която изчислява и връща резултата от повдигането на число на дадена степен. #### Примерен вход и изход @@ -333,122 +352,54 @@ #### Насоки и подсказки -Първата ни стъпка отново ще е да прочетем входните данни от конзолата. Следващата стъпка е да създадем метод, който ще приема два параметъра (числото и степента) и ще връща като резултат число от тип **`double`**. +Първата ни стъпка отново ще е да създадем функция, която ще приема два параметъра (числото и степента) и ще връща като резултат числото повдигнато на съответната степен. ![](assets/old-images/chapter-10-images/14.Number-power-01.png) -След като сме направили нужните изчисления, ни остава да разпечатаме резултата в главния метод **`Main()`** на програмата. +След като сме направили нужните изчисления, ни остава да извикаме декларираната функция. #### Тестване в Judge системата Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/594#5](https://judge.softuni.bg/Contests/Practice/Index/594#5). -### Методи, връщащи няколко стойности - -[TODO: да се редактира и адаптира за JS] -В практиката се срещат случаи, в които се нуждаем даден метод да върне повече от един елемент като резултат. За да е възможен подобен сценарий във Visual Studio Code и JavaScript (от ES6 нататък) е интегриран стойностният тип **`ValueTuple`**, както и литерал от тип **`ValueTuple`**. Накратко типът **`ValueTuple`** представлява съвкупност от две стойности, позволяващи временното съхранение на **множество стойности**. Стойностите биват съхранявани в променливи (полета - какво са полета, ще разгледаме на по-късен етап) от съответните типове. Въпреки, че типът **`Tuple`** съществува и преди C# 7, той не е добре поддържан от езика в предишните му версии и е неефективен. Затова в предходните версии на езика C# елементите в един **`Tuple`** са представяни като **`Item1`**, **`Item2`** и т.н. и имената на техните променливи (променливите, в които се съхраняват) е било невъзможно да бъдат променяни. В C# 7 е въведена поддръжка на типа (**`ValueTuple`**), което позволява задаване на смислови имена на елементите в един **`ValueTuple`**. - -#### Деклариране на ValueTuple - -Нека разгледаме примерна декларация на променлива от тип **`ValueTuple`**: - -```javascript -var personInfo = (name: "Steeve", age: 27, "Bulgaria"); -``` - -За улеснение при декларирането използваме ключовата дума **`var`**, а в скобите изброяваме **имената на желаните стойности**, следвани от **самите стойности**. Нека погледнем и в дебъг режим какво се съдържа в променливата **`personInfo`**: - -![](assets/old-images/chapter-10-images/15.Tuples-01.jpg) - -Виждаме, че се състои от няколко **полета с имена и стойности**, описани при инициализацията на променливата. Забелязваме, че последната променлива е именувана **`Item3`**. Това е така, защото по време на инициализацията не сме уточнили име за променливата, в която се пази стойността **"Bulgaria"**. В такъв случай именуването е **по подразбиране**, т.е. променливите са именувани с **`Item1`**,** `Item2`**, **`Item3`** и т.н. - -#### Метод, връщащ няколко стойности - -Следният метод приема за параметри две целочислени числа (**`x`** и **`y`**) и **връща две стойности** - резултата от целочислено деление на двете числа и остатъка от делението им: - -```javascript -static (int result, int reminder) Divide(int x, int y) -{ - int result = x / y; - int reminder = x % y; - - return (result, reminder); -} -``` - -Този метод връща резултат от тип **`ValueTuple`**, съдържащ две променливи (полета) от тип **`int`**, съответно именувани **`result`** и **`reminder`**. Извикването на метода се осъществява по следния начин: - -```javascript -var division = Divide(1, 3); -``` - -За да достъпим резултатите, върнати от метода, прилагаме **точковата нотация към променливата** **`division`**: - -![](assets/old-images/chapter-10-images/15.Tuples-02.jpg) - -## Варианти на методи - -В много езици за програмиране един и същ метод може да е деклариран в **няколко варианта** с еднакво име и различни параметри. Това е известно с термина “**method overloading**”. Сега нека разгледаме как се пишат тези overloaded methods. - -### Сигнатура на метода +### Функции, връщащи няколко стойности -В програмирането **начинът**, по който се **идентифицира** един метод, е чрез **двойката елементи** от декларацията му – **име** на метода и **списък** от неговите параметри. Тези два елемента определят неговата **спецификация**, т. нар. **сигнатура** на метода. +В практиката се срещат случаи, в които се нуждаем даден метод да върне повече от един елемент като резултат. В езикът **JavaScript** има 2 начина по които може да бъде постигнато това - чрез деструкция и чрез връщане на обект. -![](assets/old-images/chapter-10-images/16.Method-signature-01.png) +#### Деструкция -В този пример сигнатурата на метода е неговото име (**`Print`**), както и неговият параметър (**`string text`**). +Когато желаем функция да върне **повече от една стойност**, използваме ключовата думичка **`return`**, след което изброяваме всички стойности, които желаем да върнем, като ги ограждаме в квадратни скоби - **`[`**, **`]`**: -Ако в програмата ни има **методи с еднакви имена**, но с **различни сигнатури**, то казваме, че имаме **варианти на методи (method overloading)**. +------ -### Варианти на методи +След това за да получим върнатите стойности, отново на помощ идват квадратните скоби. Изброяваме параметри, които да получат тези стойности, като присвояването ще стане по реда, по който стойностите са върнати: -Както споменахме, ако използваме **едно и също име за няколко метода с различни сигнатури**, то това означава, че имаме **варианти на метод**. Кодът по-долу показва как три различни метода могат да са с едно и също име, но да имат различни сигнатури и да изпълняват различни действия. +------ -![](assets/old-images/chapter-10-images/17.Method-overloading-01.png) +В горният пример.... -### Сигнатура и тип на връщаната стойност +#### Обекти -Важно е да отбележим, че **връщаният тип като резултат** на метода **не е част от сигнатурата му**. Ако връщаната стойност беше част от сигнатурата на метода, то няма как компилаторът да знае кой метод точно да извика. +Този подход е много подобен на предния, като разликата е, че не просто **изброяваме** стойностите, които искаме да върнем, но и им даваме **имена**. **Обектите** са изключително важна и основна част от езика **JavaScript**. За сега е достатъчно да знаете, че се декларират с фигурните скоби **`{`** **`}`**, като между тях изброяваме **името** на стойността (нарича **ключ**), последвано от знака две точки - **`:`** и самата стойност: -Нека разгледаме следния пример - имаме два метода с различен тип на връщаната стойност. Въпреки това Visual Studio ни показва, че има грешка, защото сигнатурите и на двата са еднакви. Съответно при опит за извикване на метод с име **`Print(…)`**, компилаторът не би могъл да прецени кой от двата метода да изпълни. +------ -![](assets/old-images/chapter-10-images/17.Method-overloading-02.png) +В този пример връщаме.... -### Пример: по-голямата от две стойности +След това, за да получим върнатите стойности, трябва да използваме имената, с които те са върнати: -Като входни данни са дадени две стойности от един и същ тип. Стойностите могат да са от тип **`int`**, **`char`** или **`string`**. Да се създаде метод **`GetMax()`**, който връща като резултат по-голямата от двете стойности. +----- -#### Примерен вход и изход - -|Вход|Изход|Вход|Изход|Вход|Изход| -|---|---|---|---|---|---| -|int
2
16|16|char
a
z|z|string
Ivan
Todor|Todor| - -#### Насоки и подсказки - -За да създадем този метод, първо трябва да създадем три други метода с едно и също име и различни сигнатури. Първо създаваме метод, който ще сравнява цели числа. - -![](assets/old-images/chapter-10-images/18.Greater-of-two-values-01.png) - -Следвайки логиката от предходния метод, създаваме такъв със същото име, който обаче ще сравнява символи. - -![](assets/old-images/chapter-10-images/18.Greater-of-two-values-02.png) +В горният пример .... -Следващият метод, който трябва да създадем, ще сравнява низове. Тук логиката ще е малко по-различна, тъй като стойностите от тип **`string`** не позволяват да бъдат сравнявани чрез операторите **`<`** и **`>`**. Ще използваме метода **`CompareTo(…)`**, който връща числова стойност: по-голяма от 0 (сравняваният обект е по-голям), по-малка от 0 (сравняваният обект е по-малък) и 0 (при два еднакви обекта). +## Варианти на функции -![](assets/old-images/chapter-10-images/18.Greater-of-two-values-03.png) +В много езици за програмиране едина и съща функция може да е декларирана в **няколко варианта** с еднакво име и различни параметри. Това е известно с термина “**method overloading**”. За добро или лошо **JavaScript** не поддържа тази възможност. -Последната стъпка е да прочетем входните данни, да използваме подходящи променливи и да извикаме метода **`GetMax()`** от тялото на метода **`Main()`**. +Когато декларирате **две или повече функции с еднакви имена**, програмата ще използва **последно декларираната** такава. Декларирайки втора функция със същото име, вие реално премахвате старата функция и записвате на нейно място новата. -![](assets/old-images/chapter-10-images/18.Greater-of-two-values-04.png) - -#### Тестване в Judge системата - -Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/594#6](https://judge.softuni.bg/Contests/Practice/Index/594#6). - - -## Вложени методи (локални функции) +## Вложени функции Нека разгледаме следния пример: @@ -456,13 +407,11 @@ var division = Divide(1, 3); ### Какво е локална функция? -[TODO: да се редактира и адаптира за JS] - -Виждаме, че в този код, в главния метод **`Main()`** има **друг** деклариран метод **`Result()`**. Такъв **вложен** метод се нарича **локална** функция и е нововъведение в C# 7. Локалните функции могат да се декларират във всеки един друг метод. Когато C# компилаторът компилира такива функции, те биват превърнати в private методи. Тъй като разликата между **`public`** и **`private`** методи се изучава на по-късен етап, за момента ще отбележим, че **`private`** методите могат да се използват само в класа, в който са декларирани. Програмите, които пишем на това ниво, използват само един клас, затова и приемаме, че можем да използваме вложените методи без каквито и да било притеснения. +Виждаме, че в този код, в нашата функция **`main()`** има **другa** декларирана функция **`result()`**. Такъвa **вложенa** функция се нарича **локална** функция. Локалните функции могат да се декларират във всяка една друга функция. ### Защо да използваме локални функции? -С времето и практиката ще открием, че когато пишем код, често се нуждаем от методи, които бихме използвали само един път, или пък нужният ни метод става твърде дълъг. По-нагоре споменахме, че когато един метод съдържа в себе си прекалено много редове код, то той става труден за поддръжка и четене. В тези случаи на помощ идват локалните функции - те предоставят възможност в даден метод да се декларира друг метод, който ще бъде използван например само един път. Това спомага кода ни да е по-добре подреден и по-лесно четим, което от своя страна спомага за по-бърза корекция на евентуална грешка в кода и намалява възможността за грешки при промени в програмната логика. +С времето и практиката ще открием, че когато пишем код, често се нуждаем от функции, които бихме използвали само един път, или пък нужната ни функция става твърде дълга. По-нагоре споменахме, че когато една функция съдържа в себе си прекалено много редове код, то той става труден за поддръжка и четене. В тези случаи на помощ идват локалните функции - те предоставят възможност в дадена функция да се декларира друга функция, която ще бъде използвана например само един път. Това спомага кода ни да е по-добре подреден и по-лесно четим, което от своя страна спомага за по-бърза корекция на евентуална грешка в кода и намалява възможността за грешки при промени в програмната логика. ### Деклариране на локални функции @@ -470,44 +419,46 @@ var division = Divide(1, 3); ![](assets/old-images/chapter-10-images/19.Local-functions-01.png) -В този пример, методът **`Result()`** е локална функция, тъй като е вложен в метода **`Main()`**, т.е. **`Result()`** е локален за **`Main()`**. Това означава, че методът **`Result()`** може да бъде използван само в метода **`Main()`**, тъй като е деклариран в него. Единствената разлика между вложените методи и обикновените методи е, че вложените методи не могат да бъдат **`static`**. Тъй като дефиницията за **`static`** метод се разглежда на по-късен етап, за момента ще приемем, че при декларирането на една локална функция, изписваме единствено типa на връщаната стойност, името на метода и списъка му с параметри. В конкретния разглеждан случай, това е **`double Result(double a, double b)`**. +В този пример, функцията **`result()`** е локална функция, тъй като е вложена във функцията **`main()`**, т.е. **`result()`** е локална за **`main()`**. Това означава, че функцията **`result()`** може да бъде използван **само** във функцията **`main()`**, тъй като е декларирана в него. -Локалните функции имат достъп до променливи, които се използват в съдържащия ги метод. Следващият пример демонстрира как се случва това. +Локалните функции имат достъп до променливи, които се използват в съдържащата ги функция. Следващият пример демонстрира как се случва това. ![](assets/old-images/chapter-10-images/19.Local-functions-02.png) -Тази особеност на вложените методи ги прави много удобни помощници при решаването на дадена задача. Те спестяват време и код, които иначе бихме вложили, за да предаваме на вложените методи параметри и променливи, които се използват в методите, в които са вложени. +Тази особеност на вложените функции ги прави много удобни помощници при решаването на дадена задача. Те спестяват време и код, които иначе бихме вложили, за да предаваме на вложените функции параметри и променливи, които се използват във функциите, в които са вложени. -## Именуване на методи. Добри практики при работа с методи +## Именуване на функции. Добри практики при работа с функции -В тази част ще се запознаем с някои **утвърдени практики** при работа с методи, свързани с именуването, подредбата на кода и неговата структура. +В тази част ще се запознаем с някои **утвърдени практики** при работа с функции, свързани с именуването, подредбата на кода и неговата структура. -### Именуване на методи +### Именуване на функции -Когато именуваме даден метод е препоръчително да използваме **смислени имена**. Тъй като всеки метод **отговаря** за някаква част от нашия проблем, то при именуването му трябва да вземем предвид **действието, което той извършва**, т.е. добра практика е **името да описва неговата цел**. +Когато именуваме дадена функция е препоръчително да използваме **смислени имена**. Тъй като всяка функция **отговаря** за някаква част от нашия проблем, то при именуването ѝ трябва да вземем предвид **действието, което тя извършва**, т.е. добра практика е **името да описва целта**. -Задължително е името да започва с **главна буква** и трябва да е съставено от глагол или от двойка: глагол + съществително име. Форматирането на името става, спазвайки **Upper Case Camel** конвенцията, т.е. **всяка дума, включително първата, започва с главна буква**. Кръглите скоби **`( `** и **`)`** винаги следват името му. +Задължително е името да започва с **малка буква** и трябва да е съставено от глагол или от двойка: глагол + съществително име. Форматирането на името става, спазвайки **Lower Camel Case** конвенцията, т.е. **всяка дума, с изключение на първата, започва с главна буква**. Кръглите скоби **`( `** и **`)`** винаги следват името на функцията. -Всеки метод трябва да изпълнява самостоятелна задача, а името на метода трябва да описва каква е неговата функция. +Всяка функция трябва да изпълнява самостоятелна задача, а името на функцията трябва да описва каква е неговата роля. -Няколко примера за **коректно** именуване на методи: -* **`FindStudent`** -* **`LoadReport`** -* **`Sine`** +Няколко примера за **коректно** именуване на функции: +* **`findStudent`** +* **`loadReport`** +* **`sine`** -Няколко примера за **лошо** именуване на методи: -* **`Method1`** -* **`DoSomething`** -* **`HandleStuff`** -* **`SampleMethod`** -* **`DirtyHack`** +Няколко примера за **лошо** именуване на функции: +* **`method1`** +* **`doSomething`** +* **`handleStuff`** +* **`sampleMethod`** +* **`dirtyHack`** +* **`FindStudent`** +* **`LoadReport`** -Ако не можем да измислим подходящо име, то най-вероятно методът решава повече от една задача или няма ясно дефинирана цел и тогава трябва да помислим как да го разделим на няколко отделни метода. +Ако не можем да измислим подходящо име, то най-вероятно функцията решава повече от една задача или няма ясно дефинирана цел и тогава трябва да помислим как да го разделим на няколко отделни функции. -### Именуване на параметрите на методите +### Именуване на параметрите на функциите -При именуването на **параметрите** на метода важат почти същите правила, както и при самите методи. Разликите тук са, че за имената на параметрите е добре да използваме съществително име или двойка от прилагателно и съществително име, както и че при именуване на параметрите се спазва **`lowerCamelCase`** конвенцията, т.е. **всички думи без първата започват с главна буква**. Трябва да отбележим, че е добра практика името на параметъра да **указва** каква е **мерната единица**, която се използва при работа с него. +При именуването на **параметрите** на функцията важат почти същите правила, както и при самите функции. Разликите тук са, че за имената на параметрите е добре да използваме съществително име или двойка от прилагателно и съществително име. Трябва да отбележим, че е добра практика името на параметъра да **указва** каква е **мерната единица**, която се използва при работа с него. Няколко примера за **коректно** именуване на параметри на методи: * **`firstName`** @@ -525,15 +476,15 @@ var division = Divide(1, 3); * **`LastName`** * **`last_name`** -### Добри практики при работа с методи +### Добри практики при работа с функции -Нека отново припомним, че един метод трябва да изпълнява **само една** точно определена **задача**. Ако това не може да бъде постигнато, тогава трябва да помислим как да **разделим** метода на няколко отделни такива. Както казахме, името на метода трябва точно и ясно да описва неговата цел. Друга добра практика в програмирането е да **избягваме** методи, по-дълги от екрана ни (приблизително). Ако все пак кода стане много обемен, то е препоръчително метода да се **раздели** на няколко по-кратки, както в примера по-долу. +Нека отново припомним, че едина функция трябва да изпълнява **само една** точно определена **задача**. Ако това не може да бъде постигнато, тогава трябва да помислим как да **разделим** функцията на няколко отделни такива. Както казахме, името на функцията трябва точно и ясно да описва неговата цел. Друга добра практика в програмирането е да **избягваме** функции, по-дълги от екрана ни (приблизително). Ако все пак кода стане много обемен, то е препоръчително функцията да се **раздели** на няколко по-кратки, както в примера по-долу. ![](assets/old-images/chapter-10-images/20.Good-practice-01.png) ### Структура и форматиране на кода -При писането на методи трябва да внимаваме да спазваме коректна **индентация** (отместване по-навътре на блокове от кода). +При писането на функции трябва да внимаваме да спазваме коректна **индентация** (отместване по-навътре на блокове от кода). Пример за **правилно** форматиран JavaScript код: @@ -543,32 +494,32 @@ var division = Divide(1, 3); ![](assets/old-images/chapter-10-images/20.Good-practice-03.png) -Когато заглавният ред на метода е **твърде дълъг**, се препоръчва той да се раздели на няколко реда, като всеки ред след първия се отмества с две табулации надясно (за по-добра четимост): +Когато заглавният ред на функцията е **твърде дълъг**, се препоръчва той да се раздели на няколко реда, като всеки ред след първия се отмества с две табулации надясно (за по-добра четимост): ![](assets/old-images/chapter-10-images/13.Calculate-triangle-area-01.png) -Друга добра практика при писане на код е да **оставяме празен ред** между методите, след циклите и условните конструкции. Също така, опитвайте да **избягвате** да пишете **дълги редове и сложни изрази**. С времето ще установите, че това подобрява четимостта на кода и спестява време. +Друга добра практика при писане на код е да **оставяме празен ред** между функциите, след циклите и условните конструкции. Също така, опитвайте да **избягвате** да пишете **дълги редове и сложни изрази**. С времето ще установите, че това подобрява четимостта на кода и спестява време. Препоръчваме винаги да се **използват къдрави скоби за тялото на проверки и цикли**. Скобите не само подобряват четимостта, но и намалят възможността да бъде допусната грешка и програмата ни да се държи некоректно. ## Какво научихме от тази глава? -В тази глава се запознахме с базовите концепции при работа с методи: -* Научихме, че **целта** на методите е да **разделят** големи програми с много редове код на по-малки и кратки задачи. -* Запознахме се със **структурата** на методите, как да ги **декларираме** и **извикваме** по тяхното име. -* Разгледахме примери за методи с **параметри** и как да ги използваме в нашата програма. -* Научихме какво представляват **сигнатурата** и **връщаната стойност** на метода, както и каква е функцията на оператора **`return`** в методите. -* Запознахме се с **добрите практики** при работа с методи, как да именуваме методите и техните параметри, как да форматираме кода и други. +В тази глава се запознахме с базовите концепции при работа с функции: +* Научихме, че **целта** на функциите е да **разделят** големи програми с много редове код на по-малки и кратки задачи. +* Запознахме се със **структурата** на функциите, как да ги **декларираме** и **извикваме** по тяхното име. +* Разгледахме примери за функции с **параметри** и как да ги използваме в нашата програма. +* Научихме какво представляват **сигнатурата** и **връщаната стойност** на функцията, както и каква е ролята на оператора **`return`**. +* Запознахме се с **добрите практики** при работа с функции, как да именуваме функциите и техните параметри, как да форматираме кода и други. ## Упражнения -За да затвърдим работата с методи, ще решим няколко задачи. В тях се изисква да напишете метод с определена функционалност и след това да го извикате като му подадете данни, прочетени от конзолата, точно както е показано в примерния вход и изход. +За да затвърдим работата с функции, ще решим няколко задачи. В тях се изисква да напишете функция с определена функционалност и след това да го извикате като му подадете данни, точно както е показано в примерния вход и изход. ### Задача: "Hello, Име!" -Да се напише метод, който получава като параметър име и принтира на конзолата "*Hello, \!*". +Да се напише функция, който получава като параметър име и принтира на конзолата "*Hello, \!*". #### Примерен вход и изход @@ -578,7 +529,7 @@ var division = Divide(1, 3); #### Насоки и подсказки -Дефинирайте метод **`PrintName(string name)`** и го имплементирайте, след което в главната програма прочетете от конзолата име на човек и извикайте метода като му подадете прочетеното име. +Дефинирайте функция **`printName(name)`** и го имплементирайте, след което в главната програма прочетете от конзолата име на човек и извикайте метода като му подадете прочетеното име. #### Тестване в Judge системата From 01d0a4a9a77cd20410a99abcb3c1578e822077ba Mon Sep 17 00:00:00 2001 From: pkolev Date: Sun, 28 Jan 2018 13:01:16 +0200 Subject: [PATCH 2/2] Update chapter 10 - functions --- .../chapter-10-images/01.Simple-method-01.png | Bin 0 -> 3095 bytes .../02.Declaring-methods-02.png | Bin 0 -> 2642 bytes .../02.Declaring-methods-03.png | Bin 0 -> 3800 bytes .../03.Invoking-methods-01.png | Bin 0 -> 1225 bytes .../03.Invoking-methods-02.png | Bin 0 -> 4250 bytes .../03.Invoking-methods-03.png | Bin 0 -> 9106 bytes .../chapter-10-images/04.Print-receipt-01.png | Bin 0 -> 5670 bytes .../chapter-10-images/04.Print-receipt-02.png | Bin 0 -> 4182 bytes .../chapter-10-images/04.Print-receipt-03.png | Bin 0 -> 1208 bytes .../05.Method-parameters-01.png | Bin 0 -> 5610 bytes .../05.Method-parameters-02.png | Bin 0 -> 1796 bytes .../05.Method-parameters-03.png | Bin 0 -> 7867 bytes .../05.Method-parameters-04.png | Bin 0 -> 11176 bytes assets/chapter-10-images/06.Print-sign-01.png | Bin 0 -> 2126 bytes assets/chapter-10-images/06.Print-sign-02.png | Bin 0 -> 6280 bytes .../07.Optional-parameters-01.png | Bin 0 -> 5937 bytes .../07.Optional-parameters-02.png | Bin 0 -> 2341 bytes .../08.Print-triangle-01.png | Bin 0 -> 7112 bytes .../08.Print-triangle-02.png | Bin 0 -> 2579 bytes .../08.Print-triangle-03.png | Bin 0 -> 1274 bytes .../08.Print-triangle-04.png | Bin 0 -> 2774 bytes .../09.Draw-filled-square-01.png | Bin 0 -> 4387 bytes .../09.Draw-filled-square-02.png | Bin 0 -> 7921 bytes .../09.Draw-filled-square-03.png | Bin 0 -> 6862 bytes .../11.Return-operator-01.png | Bin 0 -> 4235 bytes .../11.Return-operator-02.png | Bin 0 -> 7995 bytes .../11.Return-operator-03.png | Bin 0 -> 12286 bytes .../chapter-10-images/12.Return-value-01.png | Bin 0 -> 2000 bytes .../chapter-10-images/12.Return-value-02.png | Bin 0 -> 2681 bytes .../chapter-10-images/12.Return-value-03.png | Bin 0 -> 2271 bytes .../13.Calculate-triangle-area-01.png | Bin 0 -> 3644 bytes .../13.Calculate-triangle-area-02.png | Bin 0 -> 7957 bytes .../chapter-10-images/14.Number-power-01.png | Bin 0 -> 7506 bytes .../15.Return-multiple-values-01.png | Bin 0 -> 10517 bytes .../15.Return-multiple-values-02.png | Bin 0 -> 3602 bytes .../15.Return-multiple-values-03.png | Bin 0 -> 5358 bytes .../15.Return-multiple-values-04.png | Bin 0 -> 12878 bytes .../15.Return-multiple-values-05.png | Bin 0 -> 2909 bytes .../19.Local-functions-01.png | Bin 0 -> 6766 bytes .../19.Local-functions-02.png | Bin 0 -> 9569 bytes .../chapter-10-images/20.Good-practice-01.png | Bin 0 -> 4068 bytes .../chapter-10-images/20.Good-practice-02.png | Bin 0 -> 2899 bytes .../chapter-10-images/20.Good-practice-03.png | Bin 0 -> 3339 bytes .../chapter-10-images/20.Good-practice-04.png | Bin 0 -> 4857 bytes .../21.Repeated-string-01.png | Bin 0 -> 8359 bytes .../chapter-10-images/23.Notifications-01.png | Bin 0 -> 11722 bytes .../chapter-10-images/23.Notifications-02.png | Bin 0 -> 3674 bytes chapter-10-functions.md | 271 +++++++++--------- 48 files changed, 136 insertions(+), 135 deletions(-) create mode 100644 assets/chapter-10-images/01.Simple-method-01.png create mode 100644 assets/chapter-10-images/02.Declaring-methods-02.png create mode 100644 assets/chapter-10-images/02.Declaring-methods-03.png create mode 100644 assets/chapter-10-images/03.Invoking-methods-01.png create mode 100644 assets/chapter-10-images/03.Invoking-methods-02.png create mode 100644 assets/chapter-10-images/03.Invoking-methods-03.png create mode 100644 assets/chapter-10-images/04.Print-receipt-01.png create mode 100644 assets/chapter-10-images/04.Print-receipt-02.png create mode 100644 assets/chapter-10-images/04.Print-receipt-03.png create mode 100644 assets/chapter-10-images/05.Method-parameters-01.png create mode 100644 assets/chapter-10-images/05.Method-parameters-02.png create mode 100644 assets/chapter-10-images/05.Method-parameters-03.png create mode 100644 assets/chapter-10-images/05.Method-parameters-04.png create mode 100644 assets/chapter-10-images/06.Print-sign-01.png create mode 100644 assets/chapter-10-images/06.Print-sign-02.png create mode 100644 assets/chapter-10-images/07.Optional-parameters-01.png create mode 100644 assets/chapter-10-images/07.Optional-parameters-02.png create mode 100644 assets/chapter-10-images/08.Print-triangle-01.png create mode 100644 assets/chapter-10-images/08.Print-triangle-02.png create mode 100644 assets/chapter-10-images/08.Print-triangle-03.png create mode 100644 assets/chapter-10-images/08.Print-triangle-04.png create mode 100644 assets/chapter-10-images/09.Draw-filled-square-01.png create mode 100644 assets/chapter-10-images/09.Draw-filled-square-02.png create mode 100644 assets/chapter-10-images/09.Draw-filled-square-03.png create mode 100644 assets/chapter-10-images/11.Return-operator-01.png create mode 100644 assets/chapter-10-images/11.Return-operator-02.png create mode 100644 assets/chapter-10-images/11.Return-operator-03.png create mode 100644 assets/chapter-10-images/12.Return-value-01.png create mode 100644 assets/chapter-10-images/12.Return-value-02.png create mode 100644 assets/chapter-10-images/12.Return-value-03.png create mode 100644 assets/chapter-10-images/13.Calculate-triangle-area-01.png create mode 100644 assets/chapter-10-images/13.Calculate-triangle-area-02.png create mode 100644 assets/chapter-10-images/14.Number-power-01.png create mode 100644 assets/chapter-10-images/15.Return-multiple-values-01.png create mode 100644 assets/chapter-10-images/15.Return-multiple-values-02.png create mode 100644 assets/chapter-10-images/15.Return-multiple-values-03.png create mode 100644 assets/chapter-10-images/15.Return-multiple-values-04.png create mode 100644 assets/chapter-10-images/15.Return-multiple-values-05.png create mode 100644 assets/chapter-10-images/19.Local-functions-01.png create mode 100644 assets/chapter-10-images/19.Local-functions-02.png create mode 100644 assets/chapter-10-images/20.Good-practice-01.png create mode 100644 assets/chapter-10-images/20.Good-practice-02.png create mode 100644 assets/chapter-10-images/20.Good-practice-03.png create mode 100644 assets/chapter-10-images/20.Good-practice-04.png create mode 100644 assets/chapter-10-images/21.Repeated-string-01.png create mode 100644 assets/chapter-10-images/23.Notifications-01.png create mode 100644 assets/chapter-10-images/23.Notifications-02.png diff --git a/assets/chapter-10-images/01.Simple-method-01.png b/assets/chapter-10-images/01.Simple-method-01.png new file mode 100644 index 0000000000000000000000000000000000000000..14abfc6fde7522d6a5cc8af09431332ff46210ed GIT binary patch literal 3095 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 tsgxY}x;mSn1e`VbZ?}?T00g+WxK3MH z!X1y}&avI#<2m*hb!(iD!-5Ew2Vsl9^MAqA(>^n5m=c>2 zA=jpKl#U2Vf6ZP~w@>0kh@!X~&xWp^*Y!vdtG%rwmV1F?zx7^{niR>e(66G04&jSY zX;(K;aW6?n1KzUsy7Ge;FwE4LS<)rA;zZW^z_JG>jfts&$ji;Lr^bfb7S2(6Xd`; zT{{~dJ5>Hqa@D~^sE^*IO>Ch4=>x`!{zmT6`~2f&1Np0vR@uJAPJlIL;Cr*0NtRuG zCtLEW7xoQU{ISA>_O$Cc?J5dm-NjV>vJh7 znfGENDnR#fETPgdD`|U%>vV}0vbpKegoHX37mU3%;-Ed>FJbE5S2MsFR;RU>M99R_ow%`x4XehesS&wsVSF=bz^ODSJPClkWW$Ge zsCnmC+K2uO9&>anN>4xIxca=*= z>>Tl6Dq*EIYfL0PtsEukli2b7EoGz7EpfVWy)i>C-m}u~1e8U&#|O8UW{X#E`#0xI zQnP(bk;_{dl*M0kAXqh(nzgN!aGw}%PetHlUxD|Vf~3&arC9woUAMyYm4oY0*6N;u zjb2Bom?g@crfb}H2_dVu%7o$EHa~&}aNxd={=^@~F*xCQ4fv!aX*a?7kR+8!B>9#d z;%TI)^g-`5|5-xiNa5morz}XHpzhH=HWC@hU95uj`uHhp610-}v_Ke$Y6oh70d0+y z8}qdUhTw-C!wmDhLwKakcAidQ6ALyNHyTqAdN0l)PuK}(X8IaXcD_n=8zrn>O*sl1 z=a@7UUxgdC_+IeM>0u*o6Fa|$AkTZIq)@JM^z(d8=O|?P#kdE>layuSzVSpF@ly_F z?~6rkhFV;cp@IM{r4=3+lM3qAq5-5nM`ROdMdDb)03t6Ty`y=_-3XF$!+*~;5#9dT z*Qvl?2J4DjZCNPC?jMTTx7q|Tw#D8fhSbC_oSWaaNJ|x6-_0aDU$zB*y-0N9_ZPR0 zpFuOS=qq0gdh%SEx291;mgAx zLs_}f8ok3tYTO&ifX@*dU97KdTOk?MGXt5g3jFV^@{n7&rfxAXWNSeR&Z&(6iq3Ju$&?QX5295A(6c#kcJ>N^z*LGeB)|W3 z9~U?Iy{+r)i~Uu#hLpE6X{)V-PNsF1$a%}isFP-QZx*g)Rg2bD)Sl9LajmMPf;jmj z1uL~E)RcQjNi|MDtvM!D<=9ZVe`{^Tg17i&asz;^?lp|VNA);I=D$kCS4fSPsR^vt z^P`$A&E1#!lq@FmbAxr&8m1N8>nUHP>qu9Cn(uhZ`j;BZJtR6NfLp>+by4>h7)Nps ztyvh=ZXiUZedeP0nQB?rBS2i@w>M^nP8$e<6}{wzL9aU@(FXbEdS-AO=|>3braQ5J zCd;&QaM1Iss`AY#7%RCtY;W8mY^V85U4w{@L{y4kGDpP$oTUldrY0J(o&p*==RD>E z;isQ#Evv3dRL~c4`-|2^gH$m^xuT2hT1O4VWd8d?$$6qZe?f{n>Brt?5&NmAPKc@> z>|7j4xl8*$uwt6xc0v2IY{-_h0}Ig|mECx#g%=snQc-E9Tp4{v< z5;1{?`$508qAzRLGW$6}JCV=l9zBe4m!UAH4VQlU@HjNTHDJe2(r(7F0b6_jSTtoI<4$`lxn4n!8?`1XdG78 z1<8wlQhF`dI9j_L+C#B9dtWD^kwS~^AhPTBhziMxzc;ZFzv@lU}XYi!cs!tV( zX!f!`w~a|T$-1dw_A^9R$E$La$%c@EG;EaojMI9<_x94vS#^>9>YJ0MQu(evZ)}hv zy^yomF?SNC-Yj@y+v3o8G8f6DPKB9ahLsu@yZ?#$ot6FhJVy8FBM z-TfF^peQUVd6vj&$d%7k|v?)KJDJAtDVWs-sSnz|u3%LLs2icRLr@*i8rrI8m|{31nKH0_EL=Jj$BJw-kpcfrMUt;cry5OT z?RvS=db_381<-EeLj&psKQ9`WZ#gjY#CfG6L13OZfK+6P({&V&R3ukKo*s{s%yD56 zcKDi01nKec9z{ff^o&##Adw)wa2WEhJOFuubGD!1!ljH=L7HR z2E@mo?uE9HMj))a3p&83fe zHc^&7WsGYV{R56aeKj}rbHw)w86~%gkL~=2A8ib(x_exCH@v_fmiqW3S|TT-%nxq*IKY`6Kvz%PDFte;xVk9P|afvw(` zu{yfs>Z;Po@Q(8xKRq;zC%wBRVgRT2tGheX%@g}9@0Q0eRclU;lPY;nCBGWPmORj! zL@!6B8!S+8=1EO!-&`>6~G zS$nj_2c6-YqB{Rb`QE;Q3-#`w9TIdmt}LIG^xCV@nn|t+-h31j@4ndOvTI;CRpHfT zso=D;_Yf?y@m4ncg}9l+@^)=A*3V;SDZ6b?VSy*<8G}&ynQDJg<=KOfU~MvEkW%(k z4Smf`+NGJ?SozNdR}~e;3CPXZUiXN&;;L+L_6?}(Y87Me)1TrIOB7(_?JejXb6&>G z+iZekNS8*meu+zg4MUEyi84rbW>~o>E-ytEGJbTwA^dCJgTH2UeFsmMC7wJf9_q?IPA2Wnay0%OAe%rI7`f9 zj09Oi7gBDg;(73ancJNEqF-q&!ixJNWq;_h6<+EA1bNdFq(RyO!8&%V>^-u|{Yplx zQE`cHseMxu+b<=6~n)Y$8$p(=#BQ|Y_d zg%gS-)7CH&e)C!-O;n_@W9EMHZfxEg zeZ^f2a3jDJb+WgIPw->nR;xGABYw|VGevlXEXe8vx?-fo0Q6CtGqEY`%X`*9B@$+by*QhfRc! z3Avm~y8jeHoG987k4tW*_1#?&GbVFCL>+nJAmC+P6GnzNy|tb@-M@tzU85cr8K#uO z!8*+ntun^0bS2pNN$>pZ{Xx-O_n(PE)V0QTRm8X*cx{R7QM$`{oL|RV;_G%Npq^-` z>JZ^uKqRJe2GhKL-GPxqv9)m5#^bFXeFO8$ss&c73xnEyo9o#*2boZuG=<)E!}n}e zP#g5}LLO)R&Rtu49VxtnSlUI`@;O`+{yy!g+s(%@EhU?N>Vzue0@gbcQ=*>Oq6t2o z-~7FOZS>K0SAG-k_kxwX3#qcyClfswDg{EU;EDP}68!5>Ct4Y#gQC^t3x*z`6@7Zfb$M zoRZPQj=+2sbTY$R3YD)ACo11CHH?H7%GI9a@btFt;j6IpH03!yIu(pzxt! zI^~L2C8J4;ZXkqLQXjF)S}&t8YfMXQV-}}_iGQ&DXGJ>z;97vW_|)u-LrZh9q-y-3 zq}tE^W@Ms*vTsZJ1^r_Y3~#4VI3h6mj_f;ItHLvKAEvn3eZhP0<$dcao05zTRKCHP zh>FE`e$K5}h8M#xrAzeJ5p)mD+@~m!klMgpnyk^Ee5RB58q-gzt&@ehMP)eGx(D%# z&Yab~P587$9zB;Rr*7}I+vaZgc4~O}5DtZk$S!j%m+mRnyNo(CByQnthsCi!Rz|AG zxQsx&vGv1{iuz}F5Xt|%>0^k}g#EtOgzc?=Zr?=^m4?I{V{mMKkHe3c3EIfgjxln^c*uQJ8-l&jgc? zTJ7iU*VBj!Cdfc}`EeEm*|RQ--Y_{$hrH@)P%dBzDnO>iH^y#2Wp-0=lu!M;oU&ZP zxDwFhh-32ImMx+(7gGR>Bi0p5BZctiMqct!LnYz>fkK=42Hr*pC4;~d={rybh$EbT zyj$?pQBvIeT!-u_?7hQcP&YTDb;A6rf9zjVm>m7z?cf6u+`;~CH!GR#3g`aE&A%DN zP|#*d?I8WEpk9j@vo_CH(7t&s2D^t%^~_u_93wg+&LOLF$Z4~VK~K1(BKueU5l3Kt zk-Z1v$ZA|k^6T@iua#YKMKTiIvIj2>$3S}fyb2Jvt!|%@c3(9JP4TNTKuSiX(E_D5 zeS?2I%U?Pc6JsD#HcX@xLvQBm?p27bcuV|?#rMjnm&F8BJS^ax3BWaOjE;L z*%wv5^0k9H^M!VmWArSl13_8X(DwBZ=H4eAT=iR0S%DfsiTi3opYHWfS~CjP zOx-vWy?3B%VZ(QI*knp2Yomcd6fi%6_ z(K-yr`eTcJ7Or@4?#{voNZ6bHTXOAcjaeOsY$V z>ssUJ@h~c%v)u6VxIv&K@?m?th{z>=YS0|*s!HCk`g3*r=1)Qb?{C^ELKaN$+geZb zjCl1N)N>$^0jK5OZTA}<4#x~os2t6v!M|U8m7Djg@JmqMn!r2aM#vF})O1N$%20>5 zFitNPfC0XigjB`?POf9MeI;cL9R2aMehEcZp%d!+Zs6c{FPm2dIMGu#L6fb0ue9!-nO` zxY?wS)-5iuU7uPb?_|RFYXtoy19TDBAJpZs_qR*GjR4MWi zaKzPLS$~J;E$4r+(lIb@_pwsX6D334fOIxb@w1=QpPi~RmBp`kV%aquPRKzJ%GQ7W zVwlDk=>G<=qp^TcmJz#R;(p#YO2ywH%#9&x0bh1lev5KsSI9iB!9uXr75_J+{r|WQ cBzdQRd00;ldMMgRZ+ literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/03.Invoking-methods-01.png b/assets/chapter-10-images/03.Invoking-methods-01.png new file mode 100644 index 0000000000000000000000000000000000000000..e6fededd2a8fb5c69c79a259d1d6ef3497b75b91 GIT binary patch literal 1225 zcmeAS@N?(olHy`uVBq!ia0vp^+kse}gAGXfa@@QFq!^2X+?^QKos)S9a~60+7BevL9R^{> z>U2@6WKj`{>|EobH1UL&icsgDcPb9j8eh`q-mVTWPFvrq!J8sg*5-Mx@PNUzLq*2d zh{yGYXDuBH@{aop>vm~4-RqIBH~jDW&Z=0krF)H>{|%R^2MUEk9v}C=5G)_`W3`a^ zPXA=-MK6vC@1LSSZMXBx3hkNR7nSU-ES`10za`^--0_p=YmxcWc54fCF+W-*@2~SR z@F+XSe;?(K)juC?N^wr;JzF$+2WO|Wn8{vw1HXopVx}AXr~h)=X_m(;74dn*S3JJ@ zlJVST&jdsL(|4b_TO5}uovJj!x~hV&EUx9yil58Oe4~}Veiw+&eetJ2rttYQ4Y$IR zf|btpN$-Py8l^7aI{Ee2Q$xVUfhIf2zO z(`D@1$s&)-r=MB;d)W;2)z4>E3;g>x<4NB6Egy`2y}Zq|QG}y+YDBf)1hMJae_}nk zE!~xN_o!FR$|>osU$s8>SCD5a$BlUpxjTPc6YPpO=gn;^$L{e`Y01gO=gLdwHyg)G zm?bks{=QnC)4Q?h=|01hI~5aqpEa9r3A~y9W6i~z$*Pxarc_t|Mb-P2- zv(p+*qw^xhz@8@3feH-AARkyT^8X zE0fq?EOy)M?8(2@Gk=SJFy1*^IOg%zpRq;PJv?qKonD;56d7SnQX=7QgIjs-2u&)8UgGDGrz=uXe8Mq=l`@4R|Mq+iXkdCsKCU5_j0-#>Z&l+d&P3(Dh< z+)es%?1%U%b>W1HW#9BHBH!sheffWyM^#w=sor%iN-ufeJpVjbt~+7p{uyfg0(WlS zeI&!O`jY>P^qrGAE`16Ui#&0<$oS0mgT!a_X-t0@ZP{Nzopr E0C9s?5&!@I literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/03.Invoking-methods-02.png b/assets/chapter-10-images/03.Invoking-methods-02.png new file mode 100644 index 0000000000000000000000000000000000000000..fb2ce0c15292a9c1d6592fb917330b5e4172b8bb GIT binary patch literal 4250 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 U97%RL`A-1MO{|R@4euoV3#2jw!~g&Q literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/03.Invoking-methods-03.png b/assets/chapter-10-images/03.Invoking-methods-03.png new file mode 100644 index 0000000000000000000000000000000000000000..7457133cbad169c671071ccdfcd03d07d58d2db1 GIT binary patch literal 9106 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 RXv#wY>Q5n03PG>m{}-}23`hU~ literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/04.Print-receipt-02.png b/assets/chapter-10-images/04.Print-receipt-02.png new file mode 100644 index 0000000000000000000000000000000000000000..5a20bdc99045fa129c71ad0ce8318ffe88647f01 GIT binary patch literal 4182 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 Gr~d;G+PR1T literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/04.Print-receipt-03.png b/assets/chapter-10-images/04.Print-receipt-03.png new file mode 100644 index 0000000000000000000000000000000000000000..93a5856b42b3de64e4862362a214f57c1e83e1e2 GIT binary patch literal 1208 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 Sgp`~;7r+UNvum;OBmW<4heg5w literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/05.Method-parameters-03.png b/assets/chapter-10-images/05.Method-parameters-03.png new file mode 100644 index 0000000000000000000000000000000000000000..1ea1562fae93477de0282554ae8005e1ebbc8433 GIT binary patch literal 7867 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 sNr2tUvVYLBH~$SS`yYk@GN<&DgrbBR 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 DoTnV3 literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/06.Print-sign-02.png b/assets/chapter-10-images/06.Print-sign-02.png new file mode 100644 index 0000000000000000000000000000000000000000..eae4f0bf6c55e5843564a7d37ba1059caa5218ec GIT binary patch literal 6280 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 Vxr8~o>1i2hB7sjM{|!+CEIa@J literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/07.Optional-parameters-01.png b/assets/chapter-10-images/07.Optional-parameters-01.png new file mode 100644 index 0000000000000000000000000000000000000000..7b9a819a93496ba499a161ce23f346c6a5bc13e6 GIT binary patch literal 5937 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 literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/07.Optional-parameters-02.png b/assets/chapter-10-images/07.Optional-parameters-02.png new file mode 100644 index 0000000000000000000000000000000000000000..f3b75ccf5ab517b580079ecb2090be4affd70b84 GIT binary patch literal 2341 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 PIKB*Sm|Vx{+>7}iDRZCK literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/08.Print-triangle-02.png b/assets/chapter-10-images/08.Print-triangle-02.png new file mode 100644 index 0000000000000000000000000000000000000000..265fefe1b875cca2bec7bf7e2e9a601629b42b96 GIT binary patch literal 2579 zcma);c{tSV8pnTLq7q|Ek=M{awbfz%1Mk_k zCQMRlQDua*!n3!Ck5M)f9)e91g8BK?xxKcgy~iY*f?SdPkFqFl^)_X6xAle=vXY&! zozV5~*>ClnL;>I=KZ6H2De%8B|CS<7R9TyopnfF+o$?zD$3TVX$Kv`I zZZi;^+D7ryEW<$scHj z_BOs~Htr>O&%7*EwYC;)v^=s!6SYg;a4|IE zu6vD(O)&dMJ*xb>ln&N8oF|$#AxcYiage~84UQTxq8|v7 zl!qxz10UoWbMyZAIl7Tr_Oo8+p6$1~g~7F!otLk8Rqzyz)Q0z{Zc%f)Hg*N!a#@ApUWp9< zMuogHcZm*<+(!I_5Ic9gRSP{bPC!E1I4x5ufrb9>Fge$coVOy46ZBnQ!N{3?UH02@ zvJM$BAZO6jPK?d>s|YsLxmCglX?=`kjEo#uy-(?Yf(L^>^VebAFBDtaV)NOT+mU!j zh1e4IDsI1#TcV7I&`>%oCK78sekPz(pZxGib9~p#W9tlYNC>1Z#b@OK`*)koi!Xza z7r#`E&gs<>xH63-iE}YCr^s6zV-L}Sv z;1^3lKKYvuUE64D7mw9j3%Kdu9ogrzh>oo1u1-IRi==BcU~=v_U%W`sFn)DRw7QT_xGJNlOEipXY)Yum^adv zl8hAkFst^wQ^=W_IEhQ2cs0_~5t97)Q$$Jb3}aDJ^V(Cx)H0_hmgv)v`19&}dN2}N z4SR7&+mOSo^xTgX!_tl~qA0L>Zn@+DY`UU*rfAHYHTgodvdiLJv6sz;WcR{{O=%G$ zF&#vEk*`3ol&lFdmLL|3h>h@}~Ny-2)!uOY-6(@oE!Mi2Fyg=yA6(j)6{5$0GAlg1MS28goPOHKXGRERa^M~}-qh?XNC+hHJv6dwvsyTCPv?4wcasm#2Y?{vtw$?fpz zppCo@ztm`I$3y1}0dLD7K8G$Jc#-lJ#TtbyN+4Q&2CMc%_VZWwzMa|`y||y-8o1sd z%6^Wrms>v3Bt7gZM>bl_0i#_OqV`*I)q}ss?{d3@Ns%+BGg@z9FBp7u8YHs2*&e?f z^(!0x5V<)pqoL=mf_&EPo7*>4kmr%8^RS1GQB63dH1GA|g)_6 z^%4SaaQ5A0D^zqhuS>C+oJM8y3}f`9Pe8r@!p^<&QlCNsLLn{F?R3sl?YwQOMBS`0 z(ftmx=MrMk_cIjYqB}FY+qa=#+R0xm;K2qMqE+WH_nWa8O~mu3dIc6wI!)P42{W;T zKc?TL!WQq`Xl!yk+dd@{Pqj$0yKF9>GX zy|?s@hznqlV450@7BG0)Z>?r3>@$8fyElw+ah)zy;O7&5F?&(;)G%4j&#yQfbUs9% zOD-BVo29~vaCYWd%>Fd~XB5R;5pQ1jfRuJd2J{HEIn7uUutGT~2aI0n9OgxP#2(FNeGae_OJhBBL)G0^E?z@KtuRHfe~VtY(1bH4s17C z*9-vKw5<&o2v24Vi2q#84}?m*E*irf>-1qaY6E~ofr2dJsLVlwlEXi{#HE6azS!k7 zDUUU24IuZI+YHga8?b)UZ!i?(CGrAh1xjQBMm-7yfa54A1ZcY?@)vG1+Iho)(90ty zAh`4cS161CwbV)dbtikEfTh&yBFO`d=P#%DKX#!1x)QOl@A_`j>q(`7;lUyYm|nx6 J%da|y{S#Bc+A{zE literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/08.Print-triangle-03.png b/assets/chapter-10-images/08.Print-triangle-03.png new file mode 100644 index 0000000000000000000000000000000000000000..729afdd869e574fdfa888b5937b1c99118a92058 GIT binary patch literal 1274 zcmeAS@N?(olHy`uVBq!ia0vp^8-Q4agAGV(I&9zuQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjKsEiIE{-7;ac^hou7B(%($@Y?Ujhg+GBUO` zPV?$nb)aEg%C;+~&q!TiTdSknx#h@IF&4MmOx~)26Q_r0de3}#+xVZyAIaOZXFu_) zk~=x+ZO`MG#{KE%ECdrIdJ`KZ*Am9^j(Zv(=MK_CjIwd`Omywh8{Ks|iJ)dRw{QPZ1@l5`dqW|^l=KXfM5())X>py?J_w&)5H*s-0 z+&65|IJ=;zh->zzd8cwJdN#y8nIEi`WML=udRj{N(h0iXGm3&6s~<;y3ACK{eBaqu zOCCABjQ8li$ho!BX|tC|Ql{6f@(Z)B9%X!1a(0*L*X38TJWF5h`o{E_W!j_`9joUa z8x0iJn08q$O-*CtDQ-+y&lNcD)j0(*#kW^2Rf zmbdGs?s_4-qvqd3rf{ub&DmQcdoP_``>FP$)U#}%9ha887q;m3wmkQj$vnA6_B!XB zvQw3zfA@=2B&S!_m)$tK`V`Ox^SPl}AMdR{^O{BP*KYHG#}ad$T3pwy7t`C;;`lkG z@YO!1)t9$q%ve8R*=^o;$_8J}#I~4ixE^SHe*J=bjOF`VHHsr2uuP1q_L%%CAkvF3 z*`r2T-Z=58adwmQi$e>{;*|@2i7lF#CHlnDVCzZwpPMR{9C-dR&`(z}w$sDD!s(OoV-){+#_^-kndRH!~KB2iLwV~D{bzgKs)Qd=_ zbIW#bTW-cXbCFlfbSDF4%LM1m(_->guYY)K(uEcNb9LRzzAZjc*ZI1Vea^WPt9<_& zhe(S3xEJ#`zC*dUZglfe z)w#3%?7vlpfBaU|)Ye&s+iyL2eA~QAo`ektcs@%JE(E{@MK9w&=Dkxy!!KpOz6>m{ O7(8A5T-G@yGywn%EMfxy literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/08.Print-triangle-04.png b/assets/chapter-10-images/08.Print-triangle-04.png new file mode 100644 index 0000000000000000000000000000000000000000..4ad4b3ad2ee1966e9f9ab761ce87f6182fe6c465 GIT binary patch literal 2774 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 literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/09.Draw-filled-square-01.png b/assets/chapter-10-images/09.Draw-filled-square-01.png new file mode 100644 index 0000000000000000000000000000000000000000..1e12536b13475384430109ad3f51d50f41d2df2d GIT binary patch literal 4387 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 K(?*lqiT?qT7I8uV literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/09.Draw-filled-square-02.png b/assets/chapter-10-images/09.Draw-filled-square-02.png new file mode 100644 index 0000000000000000000000000000000000000000..2cdb6ce3a2883c4c8d4f4b8044e2635291aad100 GIT binary patch literal 7921 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 literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/11.Return-operator-01.png b/assets/chapter-10-images/11.Return-operator-01.png new file mode 100644 index 0000000000000000000000000000000000000000..f61ff500131f7b7b150b01d62c7f88c6a11a0927 GIT binary patch literal 4235 zcmZXYcQhMp`^Qr=slB?W5h<-vMXhRMB?Lvx)~;1GYLv%njFz@S(a=z}DWX)KPjpc|qf-qN4%;5Mmf8Hnit8$OB>O1pqKN{#h4V-EsB+ z04u*HOvT90YCQ#yUu)xP-PJ2#q~>G1`!Lbw$;dV1SFbKO+<4okc8lRLD{{pYu8z$f zG`YZXMXX#T;*!JVY@7gAw@%tl(XQ1_@j&QcQD`dW?&gi{n5$_DUbU%&%}!;YKo~1M zCrA}2pnH=&j8!!m2{~`cXCPQrfu5=u{xH_rFtAGMJ4-Q}D;>}?t+qg~kFH!=-yh6R zDZTv-_8f@_gEIeMy9Xz~eMuvm!UTUSeS+Du6=f6gL4E;p1*xY6ZhRDM-*_oCN!;OE z<*~0~Z01WX#0UA0I*X;s#T&<;DHk>bNh^>Co`AW(`u+6eMk{SO_;aO=Yf7=qN75_m z$=0~XAE9Z+j6)t|-90;f^@UY8JIAxoSp#e>oVdV9p@gGZP>m})myE18=RFr z0{zzE`^wNNEfgZHryeQ3(e-)s8}-#g%olOy-P_6{yyyC&L$s-cms!DqVnaS_MS9@&qnA{OfbOL=+4+U;UI58 zLti^VcOesuGjZk-_2J-kKR*}CsoX$(%ggYl-0$u}+ScTyajo<*q6>-w#+1_we?cUB zxr5o731Rh>)p>^_>OLR6p&#^Jf@@gOid$Q}D#TjiOZWy1ve8%jPX7Mdj70<+x&xnS z4Dryt@?C+;KQEmr=@GJS^p!=5u-4YGg*`6%0G1;@5?r(3MF**?3rHYB34-1=o{H>>};c zvii|~HR5Dy<6Cx~Vn)DsBy{I+OAF)Lm7g=1?+1$iPEcMk>deSpzlqp%7Ka=uY zC?7-&@6oR6nY68nwG;6&dNQ~0j62!YOw+_apVZ6Q6tMV`NNc6?KomenOvWx1MBw= z#f6*%plOKw3^Z0q;f+?aJL$CEo_Arw*(LYhzd*W5?vH0%PTi@U+zPa zRXQ!oHe+st8+fJQ&VD|zCo}G=gd{a%f2H)B4f{Tua+&?UX*K)o)=zDJc&s{fwpmN2 zD_NrqZ(KU;fpCy4Iw2?l11BxiAjHj!By<1zzuOBOSqsy~X;Cu;7KJE}V$h9u*7H+} z9pmrl91G}&Toq#LC**C>%+7}B=XPcHO26{SOY-187o3o`H^tbO3-F;xqoj3CLc3=U zhRdgqoIdk0ZTG%J@#Jwhj8uPE=%XuLNR+VkS1{7D%q}V1?5!Pca+;#+Chjfo%lJQ( zkgZj4OAk=A^qppAJ*upzKukCN?IN*+`~Q);QAp+y0;Q(7I`A1$(+^8;JLY6Wo0@%k z!Lo0q>FDs_66o0rp4HTTQ?ikqBF~Z@^ znYISrb(PD)sk2opg(bTt7$kY1mE`s-?uTW)w|qSRooLJJWq0i{!qgLiKEGB+z6RZc zQCTkOcafuU<>rxLQp5&pEsI-x`zmu6(~ao63eX`1|}z}24jOkgS@1{9vwbRsQb&a(pB&0icCb4O+VaEp}{%-kc%deqb;}%1^L}!bl=W=uWf{B;s z5@hbdXFs$tzIu^*U^_rf%By9lBp^auuOhCPE%d8!cbnZLc?z$*$mEm#Ja;5h^t)8e zQ1|JhfU1=Ua0ZV%hb#?YsIpe$n3rt}b%Hc`uocL`e9YUgfHIESUYZgBXp{KM;Sk=| zTDlXT{=>bNK^G)BI2?f!wGdbaFHXCedX&9aen0I>Z~F1uqh1{W`DJ})OkdtDJ*@So zy1zc=?%X{@@|tV=n0!T@_EMl>$}j@-x#rYPDOJ{+wkPsN-Hb~}&AR#zMj~U?7mU}` zFEcw4v=_FAUe)?Fqm(ocJ*j@nd^-u%Yq`3Ty}(`4uif3?6f`%AkiDX zyW+bS+U^C~;U(Tkl^vk3VAdEkd|vJ%{HUJNOd3B`SG9r7?$iR|vqHG^yC2vBn2x1H zt~;cOd0*a@VTozuUP-P(S4W51i_%CQk#u^!udyk zQgv%}6SOIJ;(5)FS7zDf4C;c8k@S0B3hgX9KDeQ%nU#mujA}IN`X_grZn4*$9=V*N zSykJL|AS(nKobc5npHKNBZB6f-NKw`y+)PN4kYTqS*#|>l=ZhmM$oUey0d*@^2$5D zg(W4}>2Zhk7MY&hDslOgZ6Nsc)|AJDo^{<^hkLBR(UuEkvTngokjNr~U_L*>I!^2vBiHlpnSZw6uKT9cTqf@C8o z0!nA$JxW1wQ(Y}ASy0JIab$iKt9ldIC%_)So0(GrKC*fHsW!q*CKwf0mv7bV9?(zwNg$^#*ib7}_K*v_J-oT2bh6I1 zoHuDcWU>6yGMuKgS=;)OlVq3%#!mu@Mf`YFVp#18qblJI6PB{fbNXA1H8B$v$WZd& zlieALzUhKEvknOQICFmwoo7#QG(Nr`X3jnZUVK@*&CWdQwrL#9|cKGhxC4GOgzc z$wPgBIDG9O5I8BMtSm@V)jI|p8W6fyspANa8w?YF< z1Nw@EXBfS6RLG}S7P^K{;Gu@1-YGf0EzoCoio4(FbaO9(T$0TEU2KNjagj~DuN)Gq zKl&i&`kXKRRgC&pVbWtLicxW0TrD;u5z`Z_#X<+6>Xu2^n!BwJR>w3f>z>YVD`Pxn zInk~+c1fkl%xAcGBI)Z|dA^jN$ILQC`ZocC z!_d+kH@IzBx_kaTN-pDaxVDrs ze`(p}`YHpAhZxrn%cxvD;yX5*6{N^=lH~HH&ZJO~J*#<0MBh1|k50^5~I-Ci|gxf@v7 zP}w`G5~V!9q?X~qIbAG+X&1r>PdAJq5&RQ06hL%uvIrAzbas#z`H>-XRc>6Ms{KU_ zxX+(rBbuLRDrE3iv15Mquzm&}G3~uPM*j@!cwyT08&h1TX9Z$jm_R)+>bN#y7~tSB ztTOL)F_b~@iX2gsN6NHE2s>P4{PlR$rm8(*Wp7^lPMmS0>V6=+VWLwEVjPJOz#9^n zW4}3;*oc3bm9Gj~_c3siUQEW$Mb6(Gmkzlz)al5Heu$>o*id|Bm+?C#ie4^n5anSf z*?8)sxFXV#%L!sA89{L>i*>(N3&tQLTO=siO<48lKz?Qw2jUpCFb!dkc~^N`s*;Km zB-{nIS^b$b!(3Ipy|L4uMI6X4WQ{ypIf|s&kQ{my=4r7lQxhYnCb2WXfa4j~hDfa^ z4SVNn0Bi~pdv3Dh?7W|MNu%Ra#d)Zg>VtM?N8wTSLbF|iHJ~3#Yk8oXdKnZQ&!EOoi^`I&Db1&3pSPtKq;5 zguK%wbV@<1Gf-M)eLh@~9OchCvFNCA_-urqz5SGzSm*q>V*8;ovm{ES$zQj&)I7%F zjw(wdCtXT%ROetM%Vl)f3sGyjqeNK3qlF&Gs)XTvexO|!N(%#6zL4dTR5xk#SEC1f2-;GWoY_*TCn7y3R9TpVz3eM$}DZAXZHCgf)K)sV*6mt({RXcijPYpc_GbyL@ve3f--npi**i9dRP01hR(nG&G3`?cJ zmOg!JmrIJ6`Pr4Z>Zp#>ZCyKZLp5*S9R2FA{z@A2qjsg?P;Z5~^`S{~lFq75*{Ig9 zu37K%G-SOslR4L^>6e_+;_-)3o2F25IRASYuNbfjP{3C$$Zi3?Ao`l+Ux2&4$nP|t zH7td#`UISL`v;Hn?A|O56oOS_q!|nS|1j`h{+j$JBCLov3-9Wmxa{50^d$$_xT3` OKohPDD^z{*`u_lfWgNT! literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/11.Return-operator-02.png b/assets/chapter-10-images/11.Return-operator-02.png new file mode 100644 index 0000000000000000000000000000000000000000..88b80e8329d75b1ae34602b1911455858a325a7a GIT binary patch literal 7995 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 G=sy702Q%IP literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/11.Return-operator-03.png b/assets/chapter-10-images/11.Return-operator-03.png new file mode 100644 index 0000000000000000000000000000000000000000..4fde37b0ce53f3eb9c4f4ee978064520d7c62761 GIT binary patch literal 12286 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 m=PqAzcfmMED8~>D)lhD0FU_@b zEMK{%T*WLk%8|5v9qIA>1<&jG;r;%+-haU-!^^`-;;8ab001BXbB1{D@9I99heh`N z$*ag=e}rPZo$LYi?^Kuez-gQtCJML5Mi}Ey%1_ov#N>P`^l16+*L5K0!w1;o7UTz0^ zlw4vtN52#n$ELe$;{0`8NUt@IsbcILNYNF73H`YU=(%Bj7e%ox^!O%+#Y?*p8nI~Q8 zYcinu>f(^Tk~Xze7nFRd)TD~LhK-B{ww-525N<5pP@SJ2VMTLa>wiD-iAk8sy?o;* z%C@88WVJ5(qS5w}=q1w##d=r6c7s`YyV2}7fQEoy-+$QBdx1i0IEB@~g>KlPMcSA5@`muSrw5LT_ zbz4W?Heu5LDdW>@^C(6NNONC4|1v&m_&G7X9dm!>XW8cT?Yca}SzN)Vt9AsWg)VE6Z5tCPw74y~-2$-sz~mh#h_!=Gcq7uJ%)nj36tAkM*T zZ~kQnJ!HbZBM{M2wNP^7X4u>Xi%v%|!)6Lp^eTzky2aQDhlGmf2!d8t7Un^1(Zc`8 zN3B_x+kEQfbLDpR#<>Z9&U4<6-Ac|jfYLW}cqhY*mlWd(96h1s5Vs?y;sJjZ#4eLH zzf(L%Z|A^2f1K1G$e`maRmQce+@YJSdvb26_Q3r5uLZ#o-jh%peftYaC0@ybMDz)n_S$`pp z2O4(bGrLEOftbmUcX}vvzI*APTQac1R*H^$<1xluac;h7 zO2>w+xIS__C0W@h)^N!ZjF6RLumn(YTp+FQvLv3=yfFO7$hj?@Y6{J^>bk4l++fF- zK!4YdEUM9RFZRApDs#9G(QGd--W|WA@{Gl_V6_bVFdIbXc;0wDRN-5`&|u0qKizA- zCL>}hbv%z-$)}pMafXzq|H+xT$-{b+!2I?kWu^f6(ng2I~=< zur(_TrC@6bBG{Nq*sUW{PKK;%syt@xoH7AL^OUOG?GFcX{yS9PER?)kU&dS$GzHKJEay z9aw~(IvwLjPH%U&1npR@emjw$QKJ?x*L7=VSoAm%E_z|$TyF~sEv{%=$)HTbjJLCJ zoBc;t)pfu@vppZV0t=6`)#5`M@Gk-#n$x=-q^yn_`hhqRuNC(;*@^gXfpFDCYKe^H z!>Qt>jJ849-e0ZcrG)pcyIumC%jqw$>2#dY&-5WRPLE~Yd3BB2hnc8rbkS=o0B5l|@rcDbknJRiOD*~L z>;O!|cNGI3xh?{aKp0C`rMI%Az;%Rng8Jq}{OLn|l$l9OWi*%o!01xkfS-Rx`Om za^zSd!{lQ&zJ7oG{`x*1-#^~R>;3xg^?3jBOtG^u=ixfb1pokeEGyEFMXlwGjS<`2xdLuB}#PbUg|A=@xrsxq=9Us5S6*Un{MHwe zl~SbmJ_FfQr3PHyc!au)weV?jcN?@ccc>;7Na6a}tiKT=V9ZSAq3occ;PzRjp&dDU zxY}W&KBOmF0nGyK7>%q(ABW$zW^uE&!_*nqBycx17OUs> zc?xfK>zLT$iSs#Jcg`L$ z*xv0be~jc~qnoPrnOuqw@Qz+TL?p^EdpLcjTC95348r z0M1qFAr)gaT-6^x?3~k{uI4yjfD?J!BuL|B8~tzqk}i1kwfVJ(Y_|eDKF7H!tWSEh z3E|cPVc4)JPbGPGQfJVu#ivM3QQ~XVk8XyG2LPM;Q)w~|#J?WT(J03K&aSwQzA*68 z?8s5F$cTlXA}3w87!!8}_O92?6MxK16|waTjihpk>~t+{V4Lm{yD4~&{KXgh|6 zdYu^}$5{o6goIupEoU<8E<`-~i1`Tm60+HDC#@QW{WqDTCd;�U?S7mN^}?n%*c;G zN4?@5+fhqbkTz(Wm?!3{&roBZDPZ%13%zJ+Km!oHc}UUv+HKjI-mxrfFd=j8$v@{v z3$gsRKWZ^ytaHw*SxD=s8jW^k{E&p-8n;xzApHROU9axaWU8%x35EmonwBgoB-; zgR%CRDOz1mD)P*5D)q;>9Mrxq^xVj`%9CYJ;tXjB)RJcLnFkp!9a z;5exwxPt(*Oc2ZY9lR-@)L`tJjG)y+P-!w((HQAvq6^F1gXZQIoxF1*)F(g#%KKlo z%~$3h1`)ks=Eh2Ys_7P~Y@9LjF^}zwoBYxrE!$6#tx-j~BJJ}~j_51pFT5zr-PJQyf^Hk3{5ip| zCSZ|6*^cwWM=rn1U!>^o$YF(1TJ}~78F0*W>Qd|nFNBRiFaQ3>q(r!OUXt_UuPWi4 z8&+gh3;Z>`1FkanJ_Io=rRQng7BD@?-}k1G8*~Y z*t#u4Y7+2l%iS`)F)8Q$V;=xC7&FO;LA-pL;+x{IUdYAnGh;GRksH6-KIdxdGB3MZ zxb$ueas)km@eW&+yr}IN08AO{X{43 zpUVN|30Rda&u^{$&iT1<^XmyJ#PLMsl9QjyAKw$6*<=IJk-CO9$}AcAWB#uOEADyx zu_t@OW-1*|5|$FPFKDaZQHRhh#wUfNUb5{6l4%V^{*WnMX3+Vv81FL3H|c!K~_}fTb8a{f##}CW!4s}|ESRz zZb%b%hPs{}cKbZE$gk>V;i1m+whOnF+V>(4$g{BF++rL&lmnq@_Bf9B#t71CRX5+O zmlj_d7`%!A-FXB}b3WIblG*LG`i2XdR($5*nj@2ed)$$a) zt&?f4(Q_KndjV0qN3P)PNyUlGn54svR3$^e+ebJ{CR8yEq0d~G6Q=QnlrfX>A>0w4 z6x_k)_yvZ(?dQwzK(E-@CE3j{aoG0bJh6O=XxFGKb66)W*64+7`2(C0zG#VQqp1H4 z*+aZ+<+5bU@*!o7INXxo8GFDFv-!B`u=&@nG=R2vWA#t2yrx60ZB++^#6qi(P#OKC z!J?IAu98tX|8eY=oL)+;*?!}cm()f3t#6I2p7EjPkAJLyt8b08;V==GD9_)Pd~YMC zgrBX;{jC0B@Wv!s^Gvyk!*3LPCL~0LQ80+2Q10l#r-lG)m54#Jy^J4)7Z07+Ql@Jd zx7l>v<(vY;L((6**^|>YjP}u}2ZicERepGX#NikM?Je-~`X56nDVXJJ35D#7M#t>E zUz8FZ;0YY}=}fIljHRNaRYF5X1~A}evR}Kw`RkJe#I_?)`M-h)#ocR+`?W8R(xooc0?|AmEt& YrbNS{vD!`E6I=vXn%S5(8ha%C2UXT92mk;8 literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/12.Return-value-03.png b/assets/chapter-10-images/12.Return-value-03.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0ecfa34bd6c2b71bd84c456946befba9f42eb9 GIT binary patch literal 2271 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 literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/14.Number-power-01.png b/assets/chapter-10-images/14.Number-power-01.png new file mode 100644 index 0000000000000000000000000000000000000000..ce43e787b1d16494e903b80dcd3c6032f8d5773b GIT binary patch literal 7506 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 Pe|wOLp*g%3<`DBgV5+bM literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/15.Return-multiple-values-03.png b/assets/chapter-10-images/15.Return-multiple-values-03.png new file mode 100644 index 0000000000000000000000000000000000000000..d8da954b98831afdf4137c044b2b86e87a53bfce GIT binary patch literal 5358 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 RbniQNqzTah7pvO%{~to_2k!s? literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/15.Return-multiple-values-04.png b/assets/chapter-10-images/15.Return-multiple-values-04.png new file mode 100644 index 0000000000000000000000000000000000000000..007877de7122c9282974e34ca884bf17c4a22913 GIT binary patch literal 12878 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 Yp|w?Bu{C11aU?Oo+QQDf7KMrZ7s4)!&;S4c literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/19.Local-functions-01.png b/assets/chapter-10-images/19.Local-functions-01.png new file mode 100644 index 0000000000000000000000000000000000000000..77c4910d7956fe433ac75230a652fc0fa66dc8e9 GIT binary patch literal 6766 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 literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/19.Local-functions-02.png b/assets/chapter-10-images/19.Local-functions-02.png new file mode 100644 index 0000000000000000000000000000000000000000..ee2d12cccdac8f3ab0f3f79e1175121f654f254f GIT binary patch literal 9569 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 literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/20.Good-practice-01.png b/assets/chapter-10-images/20.Good-practice-01.png new file mode 100644 index 0000000000000000000000000000000000000000..0664778899cea3a9276d4c51417746dfe3ddbee5 GIT binary patch literal 4068 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 Z5mupstfITBeEu^B+<_b3Duy{k{|5*jrP%-g literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/20.Good-practice-02.png b/assets/chapter-10-images/20.Good-practice-02.png new file mode 100644 index 0000000000000000000000000000000000000000..8da9c6d0fd13405f0eeb945f1cbee1c43c6669d7 GIT binary patch literal 2899 zcmZ`*XIPWj68>VP2qw}6ge1xW3u2I>pn{kPfe@6Ypok&@(z`T65#*C

~)9C|wo^ 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 YpGrrejY(XNU=Rkd7(Dv5$<4U`04X(H6951J literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/20.Good-practice-03.png b/assets/chapter-10-images/20.Good-practice-03.png new file mode 100644 index 0000000000000000000000000000000000000000..9fcb027d4693eb49a01fcb7429bc7ec38f9f0dd3 GIT binary patch literal 3339 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 literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/20.Good-practice-04.png b/assets/chapter-10-images/20.Good-practice-04.png new file mode 100644 index 0000000000000000000000000000000000000000..9878004165f21e12709af1b7063cdd726ba0e31f GIT binary patch literal 4857 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 literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/21.Repeated-string-01.png b/assets/chapter-10-images/21.Repeated-string-01.png new file mode 100644 index 0000000000000000000000000000000000000000..ca8434ad5ec3e6d236d2ef131b2825ab4d22901a GIT binary patch literal 8359 zcmc(EXIPWVx^@r|ML`K25d=aFWl@BH2ukk=A|*7X*8l;fNOg%261pUGq$3C{AV832 z3C+-vCQU+Z&REP!oK(SH z#VGpp=23x~|2hFMg#bX99hVlF(W6 z(iFCDW9dbCwh`dk`BN`gi(|E`c%#@dcHX%)FXFns&vlw&HV&`Xyc1#m#_hA$uKCWr z!F%|CCu?4FpU1duTK^1Yb@D#-41SUbDIJs`8GIJsvQ3uOCr)G(k8Tqyl|VBOy%B!i z&i8mdATHUt$mAoL#;e&twy(@Pqv9Gg)76jL*LG-<*L0+MrwE=eZLA`YkBv?qtIM6uf&_TV{upkkap_W4lzWZ}CBOyHS@E$fW8lTeQ! zt+gnl%9oi+6&itspSVPG^^uDMV(z89A#g;$vy3-;!51$bGZcA1)t9t&z&C^RL z|3;i^5Y!1=oyP&HjI82ZJ~=0*u7G{3;~Exf1kAQ`MF>f+s$NO6f)5M3>=2^EsBz3K zPd4irED+N<=OBr+dcY%=L8@m6So#rpQrM8$JfzqcGxaQcS)*p*64afvVYV>g z^x8X%_NNtbXMDFB6;06PfgOzDba}=0Yu+lA7-VFuIf%Mq=66N0tB5H5x zF1Og=M$EXD8wktnA4hBz?26TpQyILDV)gzh3a=BKtduL_f#yYtP^%m)I@*JmkZQ0Q zqV}O)dc$>bVxfoc=ZC}gUc-@?$QqP|IocOr@x1TEa5dNCH6hN7_;cRpQO=IS<<;+pI^Oa@ z&$;^KiZV^Uo+xNb=hWhg*H#Vm>eZD*S50hd{+^&&x7cK`r?rM+L=q>3rb?o$|$!N>BIQhkkc5x_8~e zWmb?%Z#4p@n0^uVJOeEdV{b%9Q;RIZr`2aSjxyW@X7+*@--?X>D-O@{_r25GYKz@q z-HJ=v)hrdiPa!|gd|n@Fu|3c1E*)xNC0GJy3xa75P-TaS%D^ql4^1FjTRTity@2gT z-qph9??FYp(_&qiZ=;^9QAWsp(r73s%&i(A6d>+)E*32yl5lPL`;8nLB=X&-3d?THpMkJvpML0?U?0kwYKk`_Mq{tpNw zh&x%HJ*m9o##$Tr7h#rzNixNl?=7&VXKlHJWjtqd$4A_;ai^eQcZvzQJ%D{V|5Uy< zUqHfYZRE5UciXCO_El1#Zwn*SR{K+s1T1JObGFm0v6|muGAlty$9n39XQsv{w4s;! z_jHxa&R-cxlWrhet`csh2Fp#2#+8&ASg`5O{7mi*&VGd|VVT%i`k^#5Uru*Gmi<$u z<FE4{@$4if`(cg}xBMg=q_x)#>MB#!hTqN0l8ZY6*yxPqe^2F+i%ac`-nr9>ZyYm0 zrC@^WhfVjPJBJ!u8#fRH56D93i`*uz?5`CcYwt+xasXA{R+$vw)6=X5;LNm=_RO7T z*gnf(4P`p2gCt@+P2YpC%By4&9_}xNLy5cdTO6#Ito#sP#0q7#A_``1Z(n59@5Cgw zu6UK$74>Qvl@5xuo0MG+(okp?f~F|XMwX?@6a@yc2bqX1ItWemip}(E@u_2<4RRxd zkqY4il_e2TH;JX4bK1VN)2QR*O2ZX%Kln+3pL@y?sXEpv-0%TNVnJ%I|HhRfV*&W( z$EGRjnrj@hD1W<;()%8FcdL|@w39DFn%PObXtnd40U+Cht0F!54KEZw@i;xLtiw@l zX;qcpG7gGi~mcZ6JvJ#ym3W0#?QdN?={f|L3bMY~tXOcq-@ zX6syuwMrW`wr*x0G`@I!P%P+=V0?GrlPp$EPD6$Mq zyizEzkxj|FV)J{!EGIh|K4yk$2&hy(*nZh)JF{F7BxE7~COL;S5l8iq$mS!W1sS#>KwkNYL%cd?gi8xjcRguEe!TVyQDuNj~Qt8dk^i6oJ-b(lx|FH_0 zPDwte7|(>RHP7g_Rhn&f1@6#x*tftGNX3u!BL&oG;c_oBHAgV~j~=8n z?yVQ8M%c(q5NH+ZdSd!%^EX7tx4v;gWJP+3!%Fm7=N!WZD=dzaEHo#}ag(y_F*+cI zA@p*g;HQD4Hai2g>UU}q(`2hxOSq*D<377-&vk`W%k?6ch-DuE({Yl&m#g&G zhtI3-9omRpx`g%z$R8dOP4H1}JJS(SOg+BHktP8>|&`udw*8^NB~XCOd`Z zK5)Trxgr9Vyb;B_qA+%^+G-&^Ov1O$$KVC7IJ92fHPYnVB@ymBRxQ^`7a5ygB_0hg zck3wS>;}Vv%wxsOH3yF?jdDU+5I0>+!-9)LN?Ve3M3?xLGMsgLE?l;jcX|YdUVES z3glHJxFYOBKwK3c=?X6$JaStuqX+_PH860jd1~I{SQTF|p;go*`R(rfckDBJ1r6f# zia6}X)82*+nUd$4rxYZd-ij=i{k_xBT2U|1XVc(UqCx$O_j%ks2S+_??T}(yf1fR& zUC_>1y=|kR^ho;p)3t^dq9@js^=+cP&-{Y*n(w!8RFs7D)#)?Y9Mp#-YCj(fW@z9e z4HSIodb+C;+bCGVY}V%Udr9+~$gh>%1(3w+2K(Yr3JjFJwZ^zXM%D|2vXdEWqbB(} zrex=FK;2ILgZ7@qUdklEa#_k|eOM{2c}Miog>^C zXsEH; ze4JyUX@q09?(4GPGPXGzmdP5dqiJ~4>}*iaQnb;LVQa;uhHd$WGJhDW1i>W>$_m*yUWVKJ4c6Vi*EB#x&#n z@K2MR7^N(CmsJc&Ur+YLeY zZEpoiKO`pH0G)Tm%w>ue){fygzq+MHn{nz0&Y#sU`gpI2TtP+vfZ>jJNu5H7OBpEL zJW)nLIx~0c#t$*9fh2(n()6`~OaHNg{lmicf1Pa?hmwob+J!u+q5>FU?r02)L?MF7 zG3;QHr=IK!gr_pKo|r>YMS>PE*zrDv+=F~(;2df<_4Cj9 zkvzs_W|7eXaUq-*)H?+wzBG>64WXaDuYed&*5gB+2O&zmKxf@74TV}n^W*cABfKAc ze84MU@lMIU2_l*)pRCz}i?B*Ml9a!Gyo+Hv?wPcE--PiVEYF>CSbU4GD_o11>Rx@s z$>ywcdbqbWd*X5YL?ScyV#fQ&C&j6g9Qy79iQcw1=t_-ECFOF@3=v<}bk_;nFD~ZK zIxD=8T&(~vYc(QOuAk3sp-`!nW3S`&NxOor)76_h`>)H?RxZcRF5eJ56l;De9{!%dpNnM$pShxm`KA5%*c{E=f-Z zEn6dqUByMI5}nTfv~4-Pbhh{@%PsspPwOGganJ1OaBssqCYZ4z1>C>;N8J{sP{(~0 zT*-0&;`XGs-@NMSh4)^K9#LP3C;5f(O(UJt9^|ukcra=4rwQ8Xdz^h+3}#ZjvVX#~ z?|GjXOo?!RHrUX=bJ9mLp*Sh{;&Sq0skwk_Dx`#eTX!WJ=!Lx9q+7n3Wz-_lMMvQ2 z!R%h|Z4cSWP?m(w<(7`=AJ-<1RpV#FFkv4@7YmsUXhTAeG=t27HE2Zo(lN-**Bs^+ z7|+R~pb%JUuWJ*XD{)(a#jPwgSJoCz?wv0{hjuOo7>l+A^;ZRRlRv46)dk)ecHZ2e2Bm4Htq#>_~iw{%fc*0%^#LGD=N2H=3hVphj zum-h8S8-!#HZ*!HelZ|@EY;;94h0Qs8xHh>&xLbDmq}snGhC-K>+PB;4|XB)@m&eZfNCM&>>{ zqP=c=aqqb4BGpPnBK3$W{h(InkG!q`92c26dm6Bu`7m+Ip{`BOyqg$7sOnraw>k6d zTznKF_;|6Q4KEI33?z8j#=nWNT-p!xuRKU`C~T!Y5D0q|3M^dX zppW)bJOq~s3HffW0GG8`Bu=03e&)kKYNPOt>t@e*as#Vhu;?14;2jLXvv>{Q&A&kE z$E!o1Xb^TZ0;H{r(|e(A=NiXDhhgbR&B`jh)8H&g(z{WjrhO1*F+C<1ss?K>AJf{V zCp6$rN9DRkt;4*Yh8ZOuee}xAil#52l$LumYgc~Cj9?pEzHEAPF}`W0yaF0<8o$EzH-N*nMm(L4tppwgmS@Z7zVDt4vC|5Y_*5i;65=OaoYQhBlGn2|Z0SA> z7^&->+8lof4)UrT0jk_*o=M*d9*j+vSin@NJR(+1E~N31q#Fmkg|pz#Lw{;K!Qu%Y zmGTEE#K+YYVW$>@>A*K0_J|Aa=l^Myc=YtE$SSf|<>chTxXLf=xFP&eZs=Bld(}d$ zwV>~pC@Io(tdfU1vcqgFo>0}k*zgilipB4a2Jb7?W7!`Oy(;#1<0s?=xf6R+k4}eG z^_wppS~Mn8sDc;zq}AQW*+!4Z$1UCL=ucNNJco@*3&b?zP(wat6P+Kd$KkjuO*|nL z()d5lx|{YI8`|`@x{axvO!cR@ZB9ML2?9BO=f9bGpJjT=zuz|um#`PBt3V(oXP!d} zxaj93ET;7tWtQoD!+H-%t*r{Yh?dLYFXL%>6c@;X*JJf zl0&TbKrV~QLC`+^abNhkZHu|axwK*7e%AG3VtgmT2?z<#I*K3Ny%x8*t_F1%p96`; z*>XUv!^}r^GTX7+JA>eZY`tM0J;vGheaX1rHe!Mce-$G4xLo{H^Drfc&3ZoL0ZxsE zG|h@C=k@FYMV77PPw;F|KE|;jw0|&qS(tQNEnfI9>$1bwUs4kv(6Wwp&vHe2BsGNf zAMI@F6ogd=k*Xq6@%?+WpfG`qoa{>y0!4M~XqQ*=q`&f9bUqb-p38I`1?++}aJCN-p zNnVxd0sFb3hcKDD%OhEGxn+j{fIKDidq8L_)@}5l_QX+V6FH&bN4l1`#;wX69-#j6 z)?=wdAN0qro1Qz$re0wpq@k3PFwDSlC}y3FJL;lnG?X*xg6{&QPvm*>^G!4TR>1E4 zMjF7c4oXk8clvR*jws*P;$m=Px7}gKT|tC@%I`)piihRdf@^x;2~@y1Um)~$aw5+v zPA$9mLPz-&u`>e1CC8+b%g!%pe~DZ|*hQg6XKUPk2r6<&^4J{Vpe^{}F=fk7w`0SQE<7F-77f zHQ(?mwhl0pc95+DVy=m}tBBuUMW)oYV{aM$iD%+#a{L)=ePi@YW7?aYd|kL1};sOsQTu@knE#;679f zwikmrED>4AyL<{ayuJ9-ziGh?_ia*CU<{NK%J~H6(An9%qXpVr0cC(j^_F1-$^jaQ-F!XgfkC?7Pe1DuV-%B9%GM6{Y^zk#AxNyus;MZ znmm4<8Mjn*g)t88E#8@c-;Wj~uy{#naz$j)0NVgkdz+Bc$HiLB6meYw090X9*nFkE ziw3>uBv1ix^1gu%1WpKKH5 zfdx-xYjMqT_21&Vb#<=$2X=${#-uTTaadSy#`{}dO?Q-#hXMoaa)f@Ya^_WvtCWSG}8TRVa4^=f_lM*i&NsH+$!x@48(q2HNR_ zV1}wai>X@emL<+xy%ssGk5yCa(Sejh6sV@y?>gzP$qgKRyBF6HNH4y9l$b>|Gx&y|(q0!MZ^RQYME(PLUPBo~l z8&YR|@;O&QTdF8fEc*D@UgS?iwAucjg1s(oa z(~t6AdV;nIW7=k86c|w#Rvh93Df@SEkeOla3?|V2w~lwRQ{KDTk%N(v2Os^bZCYU` zH6la((C8_jBPodXQy74j~EW;HsNo&2h+ zRRcc`adU}7^EK(l%#Sl;r(VROJ@37m#82?I@XdI|xmxPze^ai#;S_*m!2JcY)RSR4pGC z1l!lqFDJ^1mC!LCiwC+y12>jeOf{wc{YWRt7**+!A20}$I`YYHS&ZezuDb%46}B&w z^S)|Yk(Xg|V8Y(_?e>poBd?Pl9aY$z6-n4C&*{93!4s@PK=ZgCyI)VlJKl1aEW3KvMMT|~XI~8tw z=DxZYZH8^VHzC-^y<&itEvtiyAiKPKX*HLgwk!{zSyRtxlOSy`x!|3vCvPIvQplQ2 zHB|3aj0}nEwD7>&j7(K8M-%2g>3tJ1x8MJSx{(k^c9N1b7^{BJfwRfp*R6gd4l4c@HU@$3;wAZ=flXaTO868Qxr-WtFK%q zNnGv<+5&9f=N?FvflA{)--;PzI!O|0Hvw9+4(A8v%5?0rVHqe&icE9W2P;m5@kBAW z1$Ekdb#mN)*-&H(R)j)^B<8&za@lBNG)yV4C*Uf zqY2`df);K0n^BN%6FCgZsdRmf{@dtA%)bfN|8jr;b|!=Z0Kd?`C4EoVxd8xJye)86 z1>nIs#7g~y^1&G*o^^@xEROi!oyMc0eqT_n8ubyR0=D=l4FKq97^+vQK70ND0Keu-lZnLdAsfYQdQwr=@9eU%?`e;yr%rETNMeUe=G@Z_V2o?y>h>Gi@fvi z>vk`s@a?TzJQnIo^7=mJTX3$F{pXb7XMn^$?FSqj9Eoag-#(OOr;bv3keI0UkUEMv zN@*hCTgsQlDq+E&@RBTdHyh$yz2=D-jWI!Le0fTIc^~!%pnnxy|9yc)@8`JJhfkI_zO7y_7-+t+)@wRYy=UHh9@s797f3EAKwtq$S(U4Lm zY{pVqJzC({sJgpZWiC5+8$I8!eQm9u_JX9?B2m6Bz5fsEBiH8xof+aknno?f^Iz>J z82*Y<8t^AW;qHhhEpq=JO>qw?e8oB#!L9`M@Rc0(f{(W1(~;BZ0)Ih13)e!YMt(rQ z*98>duD<2F)H`v(d4kk=_u?C}^S2wxzYtLYWZx0NMM<9$NoBTRFN^ zGGHX3z+PLu1UCU)M_<~<@)BL$C+PM+#r}cda9e8M-pY6HMLS#?y@n?0W(@<`+v9Y# ze2)QLVf02^jF|c0_yn;ii#suL)#|?@!pDd7l_OV}>Z*eBME5Qu=>hY(CNW5#tXA<$ zH^o=-o$iHpE=-?ivOdq`yS;2}DUkXExH{+*$nH3o>M;lCadfD|wG!C> z?t5Hbhp0n<^01{~GFFkCEXyiWtPmeqPxE(}ItffZj-))79#zfKOCzD(=kyeCcD zFiHX0e+DdfrY0|P^u+U><~ir;acdXSLv%cpQNOMvj1w>LBPAkY4>z{qLyZ$Go}qLn zfdyuXFg?DjM~}7Cz*jC=rS>rLXNvc+LRzcFJt*|C!>;HY^~pTs;*m4&Gl@UtE}qIy zIRge1#X8=LLD0$dP;%6x4vZv;PuQK(Ex29-<|C`Ktl4xYL=LgFgtU?NU2*+}XUZ*M zKBMD=u^5_3tQ2>SAzSG|xjmH@#gMJUX=$bHcaAO@BNTm*OTtLdv!v*XhA!jV?(%_U zFU*IycsBqE)0HI*Tk9Mp;$7mlkFo)s_tGYvH&yp+h#{y z>FYtH+k0R$H!+B-*_x)QOmCXV15k^wYxZJn9GGoBuZy6c(Rrbq&Zs%O6IjvA7RwOY zO*J1!6)uhc$G!}?aPjczA7P$;yu|5+7OtTg0hTvALUwXGx-p5R`P_%<3J1TkO4lnT ze?8*1@fE0*dJQ3goy0c_Z^GL#F%2r>i7nBco$;F8uo1fFT<@hDkuDZ_*N(;0qHZ>9i>4&%xB0IDxivb|oLj)h*`wY$bucfdykJOs>Fd!R_8WtJb%P z*pqkj@l6X*#hR!uTJxbKwl!(bBb-z_DZpKmuw1ix#6dD6k} zFUd9pnRMB$DEq||drj)X7P!)pho`43>6s+9cIaF+2_s7!a zqi+;ECd7~2%_&0N()O+$i7hQoTMC?d!0-LcoQrDdJ|09KNX$V|i2AKj!UFx8u%!O( zST}@g&*woxvCr0_V)t=@(<67_RYf*u!5be5#?C*zdZKi@PJHNTm+}+h@zr-F*L{Z% z#(X0zDMp`y2)7T!u+yO#L4#kKb-{K6WawpL&S{Hp24AzC!+{Od#4#)|jY(53*pBBY zxNK;qzks`xRm4FOPGO3=P}5z5hs#e1u!BIRVvT#bUc%$`G9vML@1ymW#b1QOEkjhy z@e&Q%_Da1xTF7c5_10#hNkRAQb#*MMKf)7S+NcN_`vg`cio{K9D;N;`l9;(O5jGa9 z%`NHz2%5`*b37}$3c&8jDX#PS;y_KZ{*x{sz?w$XEmJ;|M}qlJ&miR28(>BO>EfWj z4p?dY>*G0*ZOGydQ$l<;3v?W7`&_;L#Lr+Vwy^+jJvK!ZYrBAOcbf9han@JRtVvLw z641+kst4DN+XgRPzb>1}x|>ZtyDXLs0#Wj<>nDehb+Y6cf$z-`dF6Z;S>fD@>rP`C z;UMJXCF2C1f2cJ2G>~ZTok*+yx!y(Yj4_nvbeHf*EEV-Mt2%7W{I=SPR%FlXrEU>uDf+Rv{| ziygn`#q_s`-zhfHxjQn=8~_XlZ0~sAV@gNna3vA?ec9i_cf{U7l@{l;M#ib6If}0> zfZf%M_1uz;!M;+k~8rb}1~UNLl7Z2;rtocB`&&FV%O!+_!Y z52+1gAEnp}tTAzW`0MlW4<`$cxV7wb!u7Q&5-!5X3H)YC zd2YiG4fZyIKDT(v0EBA)Qu|gPL0}lfqf=VGuEe#i=A0G&SuD1bqQUU5FHcQ@OFDox~qF7 zc@X0`V(g~cX?jBI_0WaLWbkb5DUV#k1{cP%tO3F&aZFpejBCWZxrtJd?|3)-2L&1=67Jl=i-!E3L!cr0+vcd zlcTJwU~$yOr?WQgQMDQ@OLhlamE9{ivGVxm2j80={7O08vV&2&UESV z^1^uT$#7$ss_qaO*(d37o%+^we-kjD=%i!#3>CTTD_!56Zwo3(t&T=!->{xwM;KLc zg{PDHm9=!|F+~F#$FC6~0RdGN^F$qBL}2S!E?DHakV7r?qDxP}GP41_+EaHHzr}Tj zU*J=VL$b9JSjg;|v>8_VGNjYAF7SwExK@A$u54+7lTQwO>O2DH?f7 ztpq0SFv_36e^%&Jz%3^jKv!Ys{O)9%=K;>@&QOM1Fy`VSbbdGl@y@3DiKBz9)aH26 z1+g!4+00H)?2rM%GVwv#_0`M2-y)h*Wfio_m4;ZrUObY%NVlc}aO~2)7}g&vD>zUZ z9!cWTlPmmw24`7bRK~bBCT4@PX@hVg41BC~ zCL5p`(n{b2omnu3A$-6T`XIf~_Jgu>S9m%#z-~b+1&EV2njb#+=ujr;5z$PrsX2b~ zqm}u1I?jj1gWERwXuHT+nZR#jwP>TH>FB7w-h6I;O64s6Ug3w^)8?2|yA8{rhXbAs53dcYNqZ`G z`uaNjcUT(Q>t^^D%ccwtYc0l(JMuccNt!Gt`_y==r@53g`&8I zemt{gCh67a=aoX%My$EU@%4mD_A4oSTA5(e+0GK3q+^L$3EDACK5>*%D*7f z%fM70Ne3w0sSfTm1RpVydv_g&@Yzt(tNM$o+&`u)L^b0=c9OpDqJ`EelpNk)6o^4) za__?s!FuoWxl|hB`+q#XJ7@%}I#`0QQjTU4^JBqWyx6L`9}$>4jxBU>;>{|ZU;&~?Dc-TkFN zjBetAzLLWAeux+6ibm(}8z827!L>JPlWZJ- z4h#H$*dL0HEQNosA~C;PkAu+$UtThf1BmX?WrtE9?rVub;4KZj%u}P} zGkC-F%cfB=cqPk!gd(%v?EFN1D>v(%9g`T1NpILEG%4_rd&o>;a!-P%<+nn_9cg>c zEvvDVd3F9_x2ofJK&UzqWK^!HSGUuh1SW(5anvKZR zwmsQhaZRqejTGZ1Uvz7yx#@98!_mFUWd+Kf;2CDy7vQ#((Pu^j)X1$IzxTtz?kX9= zYu{gec}R>vEH36M;W^!vjAvhO&;j4_%+3-9eB;~-V4Pho4}1w0>fFMnlg`DUc6EGJ zW}NN)w*DZkqlOu9Ic2(*c~Gqk*LwK~n)j0xiktlmJR$|?KkwAUb$*aurO&^EJOqJe z#0R4ncXb*`X0%OXR+Q?BUd`~+>ZDxwYP`yxBWt=f?!Ap#i}BCg5SDoJS?T5!n>1_3 zbVZR~HKz|1&Z}%eec1-l`MA6lM*8k2dK%wySVbkAQ=ThLI*um+^Bv9Gl8)E;PB03K zw%9}J8@lLhbB=$1e2XqL<133!lDF%`s(;Rj+NyL%aA#4zjBxoIFIhom^LO+T@q_@5{v6anCbNGYNG(b`U z7-D;L6@ok8^m#2h$(tc)%+I`S|;vJE@99I40jnK5yXg*Cm_sPjS9jx-<Bn|2bU6TOq`y5KNwu}lLf-Ua=;0z8qn`>XI9ph!gSQ}bXcIB*K5mQABjg5H-C<3r?9t0kDi+&%Bpj55`d zvR685wix@j4aO2?Jrw+AGxIcx&Vm#foTAa^WQ74L^wnoSAiq57fg}7=TA$si03CI|x0Gg< zo!kCAex1COAo1Bdnp9;cPA{Nutx9iY@WQPyxxKJy;pnE3?bwb!2TJIw8HwFLz(yPd z#l&ReQeT08`)*GTG$Pk|a6zp%O^he+6Rvd#Pi!_0kF1Ez|B=+o50AL$A|~$2-aH?V zS@qjki)jGU1+31bQ=HEbsw%R`J@abhDfwVSWX#EKXIHn4$}g;(hG`)yCpTJEqS)+7 zkP0(~tk<*lG%cfyjQ!@CNnFKT!n`o>-|szffnb!=ULrgo4w>qpH8nI$39uVTymc8N z91WKq>*Juk#jItp=&vrcGS8{>4R|u@U)uZHEP}(X#|bLf*XZ)vtj}6I`5J|Ocxu{4 zUzc*r>ns2&@*gI4`ij?-lzl-6d|6L3ZNS`xUH^Uqp<#Trc?4TUBl;=NM zM(rI%-lVVSH}rIY1s%#%G+}M!k_hdgJ*`z%YGaCn=G;H!bAP-wRsVcIC{3L9UX=!m z@|vc_wR}hn$WYQ;x{binF*FOUl_ivqakNOvYAs>cQ;5*?Cq5JASy$>kjPRmE;WKj! z-9UG^DiZDBy|-nM5xn%+%rD%Jf)iHroV zqy`Zc?t4NKDF>eoA3HaAt}PZ`B&$joFzoZ^-m?#y;;{r=MbJ1rOMh;$+xkgU?8mfA z`9vs9D4pewBi|C*NkLQ_T}|d9gpuK^byhr6JTENw>lfR}G))yIC~nEk^@dmv{ES0L zzi2+}|LLqf_3WU)_5yooCd#w{%`ATNf#^hV>qCnO#j<<6(T5bOEyd2b4ck~}#Y}ra zeKc4`18m%*0{S2e}W_gKEw0r0=-TeQ_zC*9eO4aHD zmL>T}hi62?RE>ISb@?MMB$r;$Cl@f#*=3%3{iWQhkaV*W&a$-H6x}%0^p~HFzKGT; zQQQtuIHCNG99h#Fx0BM~5s-qmn|Te@hp-@LgAi0B(hr3EcDc_qfgQv0kPgxR<5N$ z6*hG3k#CH}AX1#*W_bo^1z-teNmC7_DPBSAmd}PzK28-RQulym#ezm@(-jPn<9Q5*e zRS0>1j^vob=w}84mjMyDpKtymcP{Nv#{?db^9zC}lVbAQ7&^^F-fVwe>Fvcx9xA77 zEkXX*QfeZ_7sq&sdUV)|{enoZZy1u8;C8knHDQsFlEe<*Cc9sEcU!;$lg`wLVft{= zu}bbr_ZS%@Z7!R?L4LNH;9jBoME#TC5#WQmW>cAfvY2H*PYnJ2Uph18p7NP2^$U(* zuAl1@Ty1)2rOAQ9o;SB=GT++69iD>5FDD4-x^)fsK8f_C4$#NRadg~!K3GT2`Iv(8 zgF~#SPK{!U$6fB)=YV-GzcXUorm+3upCJzJn>O#lj4{ih(jL+OqEJ`Cc(*I^M{VL&C%iP-qrUQJtoN>2ZbCly~s;ltlQ{T#b0R0A1i+f3g5<){D2ueQ-{5QhIbt9*62YNo)`Xm%VF=>Zp`xa?+2cYb;dA*e4%6!-L;u) z^!k;WWUY2e;|O_x5Hy;L!r@84)IFk^#a}puDGa|-3K=Z064Xq*BjeJPd7VF&awgmV zxQ;Y{129ymRNc(lom|v%fjpDEc?9WgO}*g!qs6bZY0y4gA?cr9$Sr zYbkhKB+sNEo(!UHP}wm?5&s{31WJ(Js2zcMagMpB;d_5Cz8kGw5A0_m^qsi-jpDc2 z-xaISuqAgDkpDQzVkVs*lbQwAaK)(`ms^?Dv2~JNxIUmNSyyTLUajv>vU%jqFYb1q8hN1z^-CysG0^fm+xULMD+{wrq6n2;t z{5m_7P2@7t4)t7%8Bhdv^|KmXK(wEQOpWbP_ao2Bl8g-TcXOhr-qsSNz#`7VQ zYD{8GqFa#!nc6%bGvJY2Lq5}XpRz>+wtcJ0eFrfkXljIk+e--uKLj%)!9h9X?KgPr zvp|?>ZMHCA_xYRkU2uF6X2E?S^G&93Ofo(;v_neiMtfVWY=-Ng!~Rozzbl7CR-D+o z=69Z}LxUgZgOF&dp^6Rjn+9V>`EOUS+~6DL{ppYO236Dp<2wn4fy!LMDnD2`AetI?3&vXF2y&qT(;cb2|jtr_!4`X zX=A*{hDz_s&GAQxo25MS!vuYP8#!aAb%>j@l>;k%h4gWL(wsZ^?Hv)@b#xc@%Y<;U zZR16jcC*Xb*5V>ABwxQ!Sp25h5e~^8KKz_UNpBtnPZwC(Mo;_F{?dYkIfBM&{fqVo zIQp4GN)s3)I7m-0+O@U~gLe^?S(Zrn(dlz&J6FZ~DwPa{AF_GW=n2>Las>Ott86xX zfdkqIiSz9rC#D$)v7e*(?}O6k2_s-nYkA=t2di&idg`}}bWKY}+h=BAdA0`)YmDyW z7`uu-_4x&k!kL=3+&!J2hI(2%IaNf!Sl{f}F~2EIt4sA;L&$ zKis!Z`a6e{&>b)*Xe9R`{rBUVY{)nRlt_hGK=X#MkW z-;(U_t5U*P=>SU##50xON1eX?Kgc&&MK0r7GQ$0<(W|5J6XD0MoqJ<0c1zc9&BkWQ zH~A=sUNcfG&e^Jg`4ZP={7+t4(>!{w3bOf;xor1ku3V~}-?~hhXL@NTGptz~n_>Y& zE^X4`Lh5sKPqN-BDDKDvj2hXT>*(ou>5s{DV|(VL?DG)?KMxId@nicr1I#B|7 zTmtnU#!|^&j>oFUtn1E&gSZ`p&+5?6k#YF$+N!8W3+E0v7D+4#WY4~&=8>li*FE?; z02dwq7NG)T8HoLT35$tD-d`!jXz*t=+XaR1#GBBRe}P+w*$*3S;|g%XyXm z$3+u$An?>dvIQNvOR$^4h1Mr1v!Tbwx<^t2P6S6Ky1S7kK%-RH9_dgLUhW3nlSdCj>}_B`5yUTdHTT@~cI$SHsNjaV#L4<=BBH-(c5(gna_6~H1FwL@#>rK5_&?dF#b?j^JS!x^H^Twrv;a#f1U{VJ7*#wum}WNTzWN2O7s)4Zeas#bS5 z`Jn<#0ed!TGb5=NX|)?K5K;BolOK8~VJBl>c`+?KTYF!cZO#$%Q@b`+{|bx5`pO@D zEf7%58bW(`1iF2DY9j7y#?qmg$Ks*f?jf4DE-@PNY%(}&KJ+@t`?C;_=_I{A3DR{7FT9>7l`x^BRng%g}n{&eicG*hs{LgyK_oTw}l zBnhay_$^ihBZD=PO)lzpmro4*VZ|P8!}-L6zce)+lb6S$cUr)&s;MW{Tq;SZFX~-eNqs_;{Bi&3;7TGU z=^O*h5-n7j$npm2%TCj~%r-=L?_AU~aHCPY2$!q`@S?cOWU7$+^eh`w;#=ITZOqDV zR-?mGbaJtM=wE+Ld;qr|Gna;Awb>WSMM7>^tt*~+?{f=bcpkMgTYWepkI4spQOUHct(`obi+sUT%H5k6$= z$clu$`28Lo;40~ifNO%WzMoPocs8M0#q3ieDVFz6ojCb4S{@p#_3~eE+#4A~CnKum z9h&g>hMFY3Y)XvDVOM$&7uI8W{SwS<38_PGCV-npsS?Mev4K9P=}dpvQgvDCXbi+p zh9WqC=J~kI7vj}oWcATBp`$cCQriFt+L%Cu^=g&T6ke`tHR?edjogBl@y#lNtL_G& z-vo=&jAYGnN1*7933f=g70jHKmRj{HX1g;Y$$CDAcV|OqB#$cpUD*7y6Lef?{DoJ} zFRA?5@0P2j2%j;GHa(!2{7`?hJ(2Y3Y<3at?SB*6;M!BrU!h%+|Buj)hfX|uNgaw> z3nj=YUV zGF3NiRFEBO(%a(~)oM2j|MLfox6M2GoHYCJtnH*9gW4{e z!U~AFbP67O+Ra+lb#Z7txrf}}T$k^2ViQ+c96hW?8rctB7TU1mW-H7a-?jgHlYJ&0s{EHOo3y~yiro&A zG9KGWHyGA#E-3xZ@k~9e*cQ9YL_N&9?B!SdvxGeBF}BmbFpg)?+krdpm}x%B5k$xA z4S8E#We2Md%-kHk(zlrRM;Kla4N3Q4dI_w%yQZY1T_sL;fIgCKKYlI?c{}Mgd+bEP zxnN{A+_{qaESw9AfLpd986-7#E_eC+$V@Q|s%|dKS~x0Yix@08jg$sUvuX);!MZPA6IJ zE*T$(1U9ehqCyTMjxriu<x0kTB~b0;!8`GuN_n<17-jFAo4${<^M-m`TyfH>`K?SUl`lAa%2ZV RZt~Z+)RncAN)=v*{0Ez_`=0;+ literal 0 HcmV?d00001 diff --git a/assets/chapter-10-images/23.Notifications-02.png b/assets/chapter-10-images/23.Notifications-02.png new file mode 100644 index 0000000000000000000000000000000000000000..cc6f24b16d8925a5dc51c852e8e6cb5039a1766f GIT binary patch literal 3674 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 d;zl?;F&q)UIВ програмирането не може да има два пъти оператор return един след друг, защото изпълнението на първия няма да позволи да се изпълни вторият. Понякога програмистите се шегуват с фразата “пиши return; return; и да си ходим”, за да обяснят, че логиката на програмата е объркана. -### Употреба на връщаната от функцията стойност +### Употреба на върнатата от функцията стойност След като дадена функция е изпълнена и върне стойност, то тази стойност може да се използва по **няколко** начина. Първият е да **присвоим резултата като стойност на променлива**: -![](assets/old-images/chapter-10-images/12.Return-value-01.png) +![](assets/chapter-10-images/12.Return-value-01.png) Вторият е резултатът да бъде използван **в израз**: -![](assets/old-images/chapter-10-images/12.Return-value-02.png) +![](assets/chapter-10-images/12.Return-value-02.png) Третият е да **подадем** резултата от работата на функцията към **друга функция**: -![](assets/old-images/chapter-10-images/12.Return-value-03.png) +![](assets/chapter-10-images/12.Return-value-03.png) ### Пример: пресмятане на лицето на триъгълник -Да се напише функция, който изчислява лицето на триъгълник по дадени основа и височина и връща стойността му. +Да се напише функция, която изчислява лицето на триъгълник по дадени основа и височина и връща стойността му. #### Примерен вход и изход @@ -329,15 +329,15 @@ JavaScript не е **strongly typed** език (силно типизиран). **Създаваме** функция, с коректно име. -![](assets/old-images/chapter-10-images/13.Calculate-triangle-area-01.png) +![](assets/chapter-10-images/13.Calculate-triangle-area-01.png) Следващата ни стъпка е да **извикаме новата** функция и да **запишем върнатата стойност в подходяща променлива**. -![](assets/old-images/chapter-10-images/13.Calculate-triangle-area-02.png) +![](assets/chapter-10-images/13.Calculate-triangle-area-02.png) #### Тестване в Judge системата -Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/594#4](https://judge.softuni.bg/Contests/Practice/Index/594#4). +Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/943#4](https://judge.softuni.bg/Contests/Practice/Index/943#4). ### Пример: степен на число @@ -354,44 +354,45 @@ JavaScript не е **strongly typed** език (силно типизиран). Първата ни стъпка отново ще е да създадем функция, която ще приема два параметъра (числото и степента) и ще връща като резултат числото повдигнато на съответната степен. -![](assets/old-images/chapter-10-images/14.Number-power-01.png) +![](assets/chapter-10-images/14.Number-power-01.png) След като сме направили нужните изчисления, ни остава да извикаме декларираната функция. #### Тестване в Judge системата -Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/594#5](https://judge.softuni.bg/Contests/Practice/Index/594#5). +Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/943#5](https://judge.softuni.bg/Contests/Practice/Index/943#5). ### Функции, връщащи няколко стойности -В практиката се срещат случаи, в които се нуждаем даден метод да върне повече от един елемент като резултат. В езикът **JavaScript** има 2 начина по които може да бъде постигнато това - чрез деструкция и чрез връщане на обект. +В практиката се срещат случаи, в които се нуждаем дадена функция да върне повече от един елемент като резултат. В езикът **JavaScript** има 2 начина по които може да бъде постигнато това - чрез **деструкция** и чрез **връщане на обект**. #### Деструкция Когато желаем функция да върне **повече от една стойност**, използваме ключовата думичка **`return`**, след което изброяваме всички стойности, които желаем да върнем, като ги ограждаме в квадратни скоби - **`[`**, **`]`**: ------- +![](assets/chapter-10-images/15.Return-multiple-values-01.png) След това за да получим върнатите стойности, отново на помощ идват квадратните скоби. Изброяваме параметри, които да получат тези стойности, като присвояването ще стане по реда, по който стойностите са върнати: ------- +![](assets/chapter-10-images/15.Return-multiple-values-02.png) -В горният пример.... +В горният пример променливата `name` ще получи стойността "John Doe", която е първата върната стойност от функцията `getNames`, а `fullName` ще получи "John Silver Doe", която е втората върната стойност. #### Обекти -Този подход е много подобен на предния, като разликата е, че не просто **изброяваме** стойностите, които искаме да върнем, но и им даваме **имена**. **Обектите** са изключително важна и основна част от езика **JavaScript**. За сега е достатъчно да знаете, че се декларират с фигурните скоби **`{`** **`}`**, като между тях изброяваме **името** на стойността (нарича **ключ**), последвано от знака две точки - **`:`** и самата стойност: +Този подход е много подобен на предния, като разликата е, че не просто **изброяваме** стойностите, които искаме да върнем, но и им даваме **имена**. **Обектите** са изключително важна и основна част от езика **JavaScript**. За сега е достатъчно да знаете, че се декларират с фигурните скоби **`{`** **`}`**, като между тях изброяваме **името** на стойността (нарича се **ключ**), последвано от знака две точки - **`:`** и самата стойност. Разделяме отделните двойки **ключ-стойност** със символа `,`. ------- +![](assets/chapter-10-images/15.Return-multiple-values-03.png) -В този пример връщаме.... +В този пример връщаме обект, който държи 2 стойности - `name` и `fullName`. -След това, за да получим върнатите стойности, трябва да използваме имената, с които те са върнати: +![](assets/chapter-10-images/15.Return-multiple-values-04.png) ------ -В горният пример .... +Тук променливата `personNames` ще получи всички върнати стойности. Като `name` и `fullName` са част от тези стойности и могат да бъдат достъпени със символа `.`. + +![](assets/chapter-10-images/15.Return-multiple-values-05.png) ## Варианти на функции @@ -403,11 +404,11 @@ JavaScript не е **strongly typed** език (силно типизиран). Нека разгледаме следния пример: -![](assets/old-images/chapter-10-images/19.Local-functions-01.png) +![](assets/chapter-10-images/19.Local-functions-01.png) ### Какво е локална функция? -Виждаме, че в този код, в нашата функция **`main()`** има **другa** декларирана функция **`result()`**. Такъвa **вложенa** функция се нарича **локална** функция. Локалните функции могат да се декларират във всяка една друга функция. +Виждаме, че в този код, в нашата функция **`solve()`** има **другa** декларирана функция **`sum()`**. Такъвa **вложенa** функция се нарича **локална** функция. Локалните функции могат да се декларират във всяка една друга функция. ### Защо да използваме локални функции? @@ -417,13 +418,13 @@ JavaScript не е **strongly typed** език (силно типизиран). Нека отново разгледаме примера от по-горе. -![](assets/old-images/chapter-10-images/19.Local-functions-01.png) +![](assets/chapter-10-images/19.Local-functions-01.png) -В този пример, функцията **`result()`** е локална функция, тъй като е вложена във функцията **`main()`**, т.е. **`result()`** е локална за **`main()`**. Това означава, че функцията **`result()`** може да бъде използван **само** във функцията **`main()`**, тъй като е декларирана в него. +В този пример, функцията **`sum()`** е локална функция, тъй като е вложена във функцията **`solve()`**, т.е. **`sum()`** е локална за **`solve()`**. Това означава, че функцията **`sum()`** може да бъде използван **само** във функцията **`solve()`**, тъй като е **декларирана в нея**. -Локалните функции имат достъп до променливи, които се използват в съдържащата ги функция. Следващият пример демонстрира как се случва това. +Локалните функции имат достъп до променливи, които са декларирани на същото или по - горно ниво като тях. Следващият пример демонстрира как се случва това. -![](assets/old-images/chapter-10-images/19.Local-functions-02.png) +![](assets/chapter-10-images/19.Local-functions-02.png) Тази особеност на вложените функции ги прави много удобни помощници при решаването на дадена задача. Те спестяват време и код, които иначе бихме вложили, за да предаваме на вложените функции параметри и променливи, които се използват във функциите, в които са вложени. @@ -454,13 +455,13 @@ JavaScript не е **strongly typed** език (силно типизиран). * **`FindStudent`** * **`LoadReport`** -Ако не можем да измислим подходящо име, то най-вероятно функцията решава повече от една задача или няма ясно дефинирана цел и тогава трябва да помислим как да го разделим на няколко отделни функции. +Ако не можем да измислим подходящо име, то най-вероятно функцията решава повече от една задача или няма ясно дефинирана цел и тогава трябва да помислим как да я разделим на няколко отделни функции. ### Именуване на параметрите на функциите При именуването на **параметрите** на функцията важат почти същите правила, както и при самите функции. Разликите тук са, че за имената на параметрите е добре да използваме съществително име или двойка от прилагателно и съществително име. Трябва да отбележим, че е добра практика името на параметъра да **указва** каква е **мерната единица**, която се използва при работа с него. -Няколко примера за **коректно** именуване на параметри на методи: +Няколко примера за **коректно** именуване на параметри на функции: * **`firstName`** * **`report`** * **`speedKmH`** @@ -480,7 +481,7 @@ JavaScript не е **strongly typed** език (силно типизиран). Нека отново припомним, че едина функция трябва да изпълнява **само една** точно определена **задача**. Ако това не може да бъде постигнато, тогава трябва да помислим как да **разделим** функцията на няколко отделни такива. Както казахме, името на функцията трябва точно и ясно да описва неговата цел. Друга добра практика в програмирането е да **избягваме** функции, по-дълги от екрана ни (приблизително). Ако все пак кода стане много обемен, то е препоръчително функцията да се **раздели** на няколко по-кратки, както в примера по-долу. -![](assets/old-images/chapter-10-images/20.Good-practice-01.png) +![](assets/chapter-10-images/20.Good-practice-01.png) ### Структура и форматиране на кода @@ -488,15 +489,15 @@ JavaScript не е **strongly typed** език (силно типизиран). Пример за **правилно** форматиран JavaScript код: -![](assets/old-images/chapter-10-images/20.Good-practice-02.png) +![](assets/chapter-10-images/20.Good-practice-02.png) Пример за **некоректно** форматиран JavaScript код: -![](assets/old-images/chapter-10-images/20.Good-practice-03.png) +![](assets/chapter-10-images/20.Good-practice-03.png) Когато заглавният ред на функцията е **твърде дълъг**, се препоръчва той да се раздели на няколко реда, като всеки ред след първия се отмества с две табулации надясно (за по-добра четимост): -![](assets/old-images/chapter-10-images/13.Calculate-triangle-area-01.png) +![](assets/chapter-10-images/20.Good-practice-04.png) Друга добра практика при писане на код е да **оставяме празен ред** между функциите, след циклите и условните конструкции. Също така, опитвайте да **избягвате** да пишете **дълги редове и сложни изрази**. С времето ще установите, че това подобрява четимостта на кода и спестява време. @@ -514,12 +515,12 @@ JavaScript не е **strongly typed** език (силно типизиран). ## Упражнения -За да затвърдим работата с функции, ще решим няколко задачи. В тях се изисква да напишете функция с определена функционалност и след това да го извикате като му подадете данни, точно както е показано в примерния вход и изход. +За да затвърдим работата с функции, ще решим няколко задачи. В тях се изисква да напишете функция с определена функционалност и след това да я извикате като ѝ подадете данни, точно както е показано в примерния вход и изход. ### Задача: "Hello, Име!" -Да се напише функция, който получава като параметър име и принтира на конзолата "*Hello, \!*". +Да се напише функция, която получава като параметър име и принтира на конзолата "*Hello, \!*". #### Примерен вход и изход @@ -529,16 +530,16 @@ JavaScript не е **strongly typed** език (силно типизиран). #### Насоки и подсказки -Дефинирайте функция **`printName(name)`** и го имплементирайте, след което в главната програма прочетете от конзолата име на човек и извикайте метода като му подадете прочетеното име. +Дефинирайте функция **`printName(name)`** и го имплементирайте. Да се напише функция **`solve`**, която получава като входни данни име на човек и извиква `printName` функцията като подава прочетеното име. #### Тестване в Judge системата -Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/594#7](https://judge.softuni.bg/Contests/Practice/Index/594#7). +Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/943#7](https://judge.softuni.bg/Contests/Practice/Index/943#7). ### Задача: по-малко число -Да се създаде метод **`GetMin(int a, int b)`**, който връща по-малкото от две числа. Да се напише програма, която чете като входни данни от конзолата три числа и печата най-малкото от тях. Да се използва метода **`GetMin(…)`**, който е вече създаден. +Да се създаде функция **`getMin(a, b)`**, която връща по-малкото от две числа. Да се напише функция **`solve`**, която получава като входни данни три числа и печата най-малкото от тях. Да се използва функцията **`getMin(…)`**, която е вече създадена. #### Примерен вход и изход @@ -548,20 +549,22 @@ JavaScript не е **strongly typed** език (силно типизиран). #### Насоки и подсказки -Дефинирайте метод **`GetMin(int a, int b)`** и го имплементирайте, след което го извикайте от главната програма както е показано по-долу. За да намерите минимума на три числа, намерете първо минимума на първите две от тях и след това минимума на резултата и третото число: +Дефинирайте функция **`getMin(int a, int b)`** и я имплементирайте, след което я извикайте от функцията **`solve`** както е показано по-долу. За да намерите минимума на три числа, намерете първо минимума на първите две от тях и след това минимума на резултата и третото число: ```javascript -var min = GetMin(GetMin(num1, num2), num3); +function solve([num1, num2, num3]) { + let min = getMin(getMin(num1, num2), num3); +} ``` #### Тестване в Judge системата -Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/594#8](https://judge.softuni.bg/Contests/Practice/Index/594#8). +Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/943#8](https://judge.softuni.bg/Contests/Practice/Index/943#8). ### Задача: повтаряне на низ -Да се напише метод **`RepeatString(str, count)`**, който получава като параметри променлива от тип **`string`** и цяло число **`n`** и връща низа, повторен **`n`** пъти. След това резултатът да се отпечата на конзолата. +Да се напише функция **`repeatString(str, count)`**, която получава като параметри стрингова променлива **`str`** и цяло число **`n`** и връща низа, повторен **`n`** пъти. След това резултатът да се отпечата на конзолата. #### Примерен вход и изход @@ -571,22 +574,18 @@ var min = GetMin(GetMin(num1, num2), num3); #### Насоки и подсказки -Допишете метода по-долу като добавите съединяването входния низ към резултата в цикъла: +Допишете функцията по-долу като добавите входния низ към резултата в цикъла: -![](assets/old-images/chapter-10-images/21.Repeated-string-01.png) - -[TODO: да се редактира и адаптира за JS] - -Имайте предвид, че в езика JavaScript съединяването на низове в цикъл води до лоша производителност и не се препоръчва. Потърсете и пробвайте по-ефективни решения тук: https://stackoverflow.com/questions/411752. +![](assets/chapter-10-images/21.Repeated-string-01.png) #### Тестване в Judge системата -Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/594#9](https://judge.softuni.bg/Contests/Practice/Index/594#9). +Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/943#9](https://judge.softuni.bg/Contests/Practice/Index/943#9). ### Задача: n-та цифра -Да се напише метод **`FindNthDigit(number, index)`**, който получава число и индекс N като параметри и печата N-тата цифра на числото (като се брои от дясно на ляво, започвайки от 1). След това, резултатът да се отпечата на конзолата. +Да се напише функция **`findNthDigit(number, index)`**, която получава число и индекс N като параметри и печата N-тата цифра на числото (като се брои от дясно на ляво, започвайки от 1). След това, резултатът да се отпечата на конзолата. #### Примерен вход и изход @@ -600,12 +599,12 @@ var min = GetMin(GetMin(num1, num2), num3); #### Тестване в Judge системата -Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/594#10](https://judge.softuni.bg/Contests/Practice/Index/594#10). +Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/943#10](https://judge.softuni.bg/Contests/Practice/Index/943#10). ### Задача: число към бройна система -Да се напише метод **`IntegerToBase(number, toBase)`**, който получава като параметри цяло число и основа на бройна система и връща входното число, конвертирано към посочената бройна система. След това, резултатът да се отпечата на конзолата. Входното число винаги ще е в бройна система 10, а параметърът за основа ще е между 2 и 10. +Да се напише функция **`integerToBase(number, toBase)`**, която получава като параметри цяло число и основа на бройна система и връща входното число, конвертирано към посочената бройна система. След това, резултатът да се отпечата на конзолата. Входното число винаги ще е в бройна система 10, а параметърът за основа ще е между 2 и 10. #### Примерен вход и изход @@ -621,13 +620,13 @@ var min = GetMin(GetMin(num1, num2), num3); * **Разделяме** числото на основата. * **Повтаряме** алгоритъма, докато входното число не стане 0. -Допишете липсващата логика в метода по-долу: +Допишете липсващата логика във функцията по-долу: ```javascript -static string IntegerToBase(int number, int toBase) { +function integerToBase(number, toBase) { string result = ""; - while (number != 0) { - // Implement the missing conversion logic + while (number !== 0) { + // implement the missing conversion logic } return result; } @@ -635,21 +634,21 @@ static string IntegerToBase(int number, int toBase) { #### Тестване в Judge системата -Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/594#11](https://judge.softuni.bg/Contests/Practice/Index/594#11). +Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/943#11](https://judge.softuni.bg/Contests/Practice/Index/943#11). ### Задача: известия -Да се напише програма, която прочита цяло число **`n`** и на следващите редове въвежда **`n`** **съобщения** (като за всяко съобщение се прочитат по няколко реда). Всяко съобщение започва с **`messageType`**: **`success`**, **`warning`** или **`error`**: - - Когато **`messageType`** е **`success`** да се четат **`operation`** + **`message`** (всяко на отделен ред). - - Когато **`messageType`** е **`warning`** да се чете само **`message`**. - - Когато **`messageType`** е **`error`** да се четат **`operation`** + **`message`** + **`errorCode`** (всяко на отделен ред). +Да се напише функцията **`solve`** която приема като първи параметър цяло число **`n`** - брой на съобщения и допълнителен брой параметри, които са самите части на **съобщенията**. За всяко съобщение може да се получи различен брой параметри. Първият параметър за всяко съобщение е **`messageType`**, който може да бъде **`success`**, **`warning`** или **`error`**: + - Когато **`messageType`** е **`success`**, следващите 2 получени параметъра са **`operation`** и **`message`** + - Когато **`messageType`** е **`warning`** следващият параметър е **`message`**. + - Когато **`messageType`** е **`error`** следващите 3 получени параметъра са **`operation`** + **`message`** + **`errorCode`** (всяко е отделен параметър). На конзолата да се отпечата **всяко прочетено съобщение**, форматирано в зависимост от неговия **`messageType`**. Като след заглавния ред за всяко съобщение да се отпечатат толкова на брой символа **`=`**, **колкото е дълъг** съответният **заглавен ред** и да се сложи по един **празен ред** след всяко съобщение (за по-детайлно разбиране погледнете примерите). -Задачата да се реши с дефиниране на четири метода: **`ShowSuccessMessage()`**, **`ShowWarningMessage()`**, **`ShowErrorMessage()`** и **`ReadAndProcessMessage()`**, като само последният метод да се извиква от главния **`Main()`** метод: +Задачата да се реши с дефиниране на четири функции: **`showSuccessMessage()`**, **`showWarningMessage()`**, **`showErrorMessage()`** и **`processMessage()`**, като само последната функция да се извиква от главната **`solve()`** функция: -![](assets/old-images/chapter-10-images/23.Notifications-01.png) +![](assets/chapter-10-images/23.Notifications-01.png) #### Примерен вход и изход @@ -659,18 +658,20 @@ static string IntegerToBase(int number, int toBase) { #### Насоки и подсказки -Дефинирайте и имплементирайте посочените четири метода. +Дефинирайте и имплементирайте четирите функции. След това извикайте **`processMessage()`** от главната **`solve()`** функция. + +![](assets/chapter-10-images/23.Notifications-02.png) -В **`ReadAndProcessMessage()`** прочетете типа съобщение от конзолата и според прочетения тип прочетете останалите данни (още един два или три реда). След това извикайте съответния метод за печатане на съответния тип съобщение. +В **`processMessage()`** извадете първо броят на съобщенията и след това ги обработете едно по едно спрямо техният тип и извикайте съответната функция за печатане. #### Тестване в Judge системата -Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/594#12](https://judge.softuni.bg/Contests/Practice/Index/594#12). +Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/943#12](https://judge.softuni.bg/Contests/Practice/Index/943#12). ### Задача: числа към думи -Да се напише метод **`Letterize(number)`**, който прочита цяло число и го разпечатва с думи на английски език според условията по-долу: +Да се напише функция **`letterize(number)`**, която получава цяло число и го разпечатва с думи на английски език според условията по-долу: * Да се отпечатат с думи стотиците, десетиците и единиците (и евентуални минус) според правилата на английския език. * Ако числото е по-голямо от **999**, трябва да се принтира "**too large**". * Ако числото е по-малко от **-999**, трябва да се принтира "**too small**". @@ -699,18 +700,18 @@ static string IntegerToBase(int number, int toBase) { #### Тестване в Judge системата -Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/594#13](https://judge.softuni.bg/Contests/Practice/Index/594#13). +Тествайте решението си тук: [https://judge.softuni.bg/Contests/Practice/Index/943#13](https://judge.softuni.bg/Contests/Practice/Index/943#13). ### Задача: криптиране на низ -Да се напише метод **`Encrypt(char letter)`**, който криптира дадена буква по следния начин: +Да се напише функция **`еncrypt(char letter)`**, която криптира дадена буква по следния начин: * Вземат се първата и последна цифра от ASCII кода на буквата и се залепят една за друга в низ, който ще представя резултата. * Към началото на стойността на низа, който представя резултата, се залепя символа, който отговаря на следното условие: * ASCII кода на буквата + последната цифра от ASCII кода на буквата. * След това към края на стойността на низа, който представя резултата, се залепя символа, който отговаря на следното условие: * ASCII кода на буквата - първата цифра от ASCII кода на буквата. -* Методът трябва да върне като резултат криптирания низ. +* Функцията трябва да върне като резултат криптирания низ. Пример: * j → **p16i** @@ -719,9 +720,9 @@ static string IntegerToBase(int number, int toBase) { * Към **началото** на стойността на низа, който представя резултата, залепяме символа, който се получава от сбора на ASCII кода + последната цифра → 106 + 6 → 112 → **p**. * Към **края** на стойността на низа, който представя резултата, залепяме символа, който се получава от разликата на ASCII кода - първата цифра → 106 - 1 → 105 → **i**. -Използвайки метода, описан по-горе, да се напише програма, която чете **поредица от символи**, **криптира ги** и отпечатва резултата на един ред. +Използвайки метода, описан по-горе, да се дефинира функцията **`solve()`**, която получава **поредица от символи**, **криптира ги** и отпечатва резултата на един ред. -Приемаме, че входните данни винаги ще бъдат валидни. Главният метод трябва да прочита входните данни, подадени от потребителя – цяло число **`n`**, следвани от по един символ на всеки от следващите **`n`** реда. +Приемаме, че входните данни винаги ще бъдат валидни. **`solve()`** функцията трябва да получава входните данни, подадени от потребителя – цяло число **`n`**, последвано от по един символ за всеки следващ **`n`** елемент. Да се криптират символите и да се добавят към криптирания низ. Накрая като резултат трябва да се отпечата **криптиран низ от символи** като в следващия пример. @@ -739,10 +740,10 @@ static string IntegerToBase(int number, int toBase) { |7
B
i
r
a
H
a
x| H66