[Autumn Series] Функции

Отговори
Потребителски аватар

Автор на темата
Autumn Shade EA\DICE
Developer
Developer
Мнения: 204
Регистриран: 14 мар 2019, 13:20
Се отблагодари: 38 пъти
Получена благодарност: 120 пъти

[Autumn Series] Функции

Мнение от Autumn Shade EA\DICE » 08 окт 2019, 12:18

Съдържание:
  • Какво е функция?
  • Предназначение
  • Упражнение
  • Какво следва?

Какво е Функция?

Функцията представлява набор от действия, които заедно изпълняват дадена задача. Те могат да бъдат преизползвани многократно и обиквено с такава цел се създават. Съдържат в себе си входове, наричани параметри, както и изход, който е следствие на тези параметри. Разбира се, не е задължително една функция да съдържа входове или изход някакъв, но това ще го погледнем следмалко.
Предназначение

Предназначението е да се раздели една програма на подпрограми за по-лесно редактиране за в бъдеще, по-лесно разбиране и по-лесно откриване на проблеми. Нека видим как изглежда една функция и как можем да направим такава

Код: Избери всички

<тип данни> <име на функцията ни> (<параметри/входове>) { 
	<тяло на функцията/набора от действия>
}
Нека видим всяко какво значение има в целият синтаксис:
  • <тип данни> - Типът на данни, който ще бъде изведен от функцията като изход.
  • <име на функцията ни> - Име, което се определя по наше желание. Ще го използваме, когато ни трябва функцията. Трябва да можем да я използваме все пак и да знаем как се казва.
  • <параметри/входове> - Входни данни, които функцията ни ще използва. Един параметър трябва да съдържа тип данни и име. Ако искаме да имаме повече от един параметър, отделяме ги един от друг чрез ,.
  • <тяло на функцията/набора от действия> - Код, който изпълнява определена задача.

Нека дадем пример за една функция. Ще направим функцията събиране и ще видим как може да се изпълни, така че да няма входове и изход:
  • Примерна функция за събиране с входове и изход:

    Код: Избери всички

    #include <iostream>
    
    using namespace std;
    
    int add(int a, int b) {
    	return a + b;
    }
    
    int main() {
    	
    	cout << add(3, 5); // 8
    	
    	return 0;
    }
    
  • Примерна функция за събиране без входове и изход:

    Код: Избери всички

    #include <iostream>
    
    using namespace std;
    
    void add() {
    	cout << (3 + 5); // 8
    }
    
    int main() {
    	add();
    	return 0;
    }
    
Нека направим един анализ и на двете програми. В първата програма, ние създаваме функция с два параметъра от тип int(цяло число), която връща тип данни int(цяло число), което като резултат(изход) е сумата на двата параметъра, които сме подали на функцията ни в int main(). Във втората програма, ние си създаваме отново същата функция, но с друг тип данни, който е void. Този тип данни не се нуждае от резултат или по-скоро той не връща такъв. Това му е предназначението. Също така не приема никакви параметри(входове), защото всичко се случва в самата функция. Там се извършва събирането, там се извършва и извеждането на резултата и по този начин остава само да се извика функцията в int main().

Сега, предполагам, идва въпросът:
Кое е по-добро за използване?

Честно казано, няма по-добро за използване. Какво ще означава това - едното се използва при едни ситуации, другото при други. Нека дам и пример:

Единият пример е този по-горе. Ако имаме някакво изчисление, най-често искаме да върнем резултата от него, а не просто да го изведем в самата функция.

Другият пример е, ако имаме функция, която да трябва да изпечатва само информация от някаква структурна единица, то тогава не е нужно да връщаме някакъв резултат. Ние реално вършим изпечатване, нищо повече, нека не си усложняваме живота, нека функциите правят това, което им е предназначено - нито повече, нито по-малко.

Другото, което може да дойде като въпрос е:
Защо функциите седят извън int main?

Разгледано така, int main() e функция сама по себе си. По принцип функциите седят извън int main(). Има и функции, които могат да бъдат вътре в други функции, но те са за по-напред. За любопитните, наричат се lambda функции.

Упражнение
Направете си калкулатор с функции. Да има основни операции(+, -, *, /).

Какво следва?
В следващият пост ще преминем към указатели.

Отговори

Върни се в “Системно Програмиране”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост