Основные функции
-
Объявление и определение функций
- Объявление функции включает указание её возвращаемого типа, имени и списка параметров. Если функция не возвращает значения, используется
void
. Оно сообщает компилятору о существовании функции.
int add(int a, int b); // Объявление функции
- Определение функции включает реализацию её тела.
int add(int a, int b) { return a + b; }
- Объявление функции включает указание её возвращаемого типа, имени и списка параметров. Если функция не возвращает значения, используется
-
Параметры функции — переменные, передаваемые функции. Они могут быть переданы по значению, по ссылке или указателю.
-
Передача по значению:
void foo(int x) { x = 5; // Изменения не затрагивают исходную переменную }
-
Передача по ссылке:
void foo(int &x) { x = 5; // Изменения затрагивают исходную переменную }
-
Передача указателя:
void foo(int *x) { *x = 5; // Изменения затрагивают исходную переменную через указатель }
-
Общие рекомендации по написанию функций
-
Ясность и читаемость
- Давайте функциям осмысленные имена, которые отражают их назначение.
- Используйте комментирование для объяснения сложной логики.
-
Единичная ответственность
- Каждая функция должна выполнять только одну задачу или ответственность. Это облегчает понимание и тестирование функций.
-
Минимизация параметров
- Старайтесь уменьшить количество параметров функции. Если функция принимает много параметров, рассмотрите возможность использования структур или классов для их группировки.
-
Использование
const
там, где это возможно- Используйте ключевое слово
const
для параметров, которые не должны изменяться, а также для методов, которые не изменяют состояние объекта.
void printMessage(const std::string &message) { std::cout << message << std::endl; }
- Используйте ключевое слово
-
Возвращение значений
- Избегайте использования глобальных переменных для передачи данных между функциями. Вместо этого возвращайте значения через параметры или используя возвращаемый тип функции.
-
Обработка ошибок
- Продумывайте и реализуйте механизмы обработки ошибок. Используйте исключения (
exceptions
) или возвращаемые значения для индикации ошибок.
- Продумывайте и реализуйте механизмы обработки ошибок. Используйте исключения (
-
Рекурсивные функции
- Рекурсия может быть мощным инструментом, но используйте её осторожно. Убедитесь, что каждая рекурсивная функция имеет базовый случай для завершения.
-
Оптимизация производительности
- Профилируйте и оптимизируйте функции, которые критичны для производительности, но избегайте преждевременной оптимизации. Сначала пишите ясный и корректный код.
Пример функции
#include <iostream>
#include <vector>
// Функция для вычисления среднего значения элементов вектора
double calculateAverage(const std::vector<int> &numbers) {
if (numbers.empty()) {
return 0.0; // Обработка пустого вектора
}
int sum = 0;
for (int num : numbers) {
sum += num;
}
return static_cast<double>(sum) / numbers.size();
}
int main() {
std::vector<int> myNumbers = {1, 2, 3, 4, 5};
double average = calculateAverage(myNumbers);
std::cout << "Среднее значение: " << average << std::endl;
return 0;
}