Самый простой способ обмена данными с функциями — использование возвращаемого значения. Функции, в которых применяются возвращаемые значения, точно так же обладают численным значением, как и любые переменные, используемые при вычислении выражений. Аналогично переменным возвращаемые значения обладают типом.
Например, можно описать функцию с именем getString(), возвращаемое значение которой будет иметь тип string, и использовать ее в своей программе:
string = myString;
myString = getString();
С другой стороны, можно описать функцию с именем getVal(), которая будет возвращать значение типа double, и использовать ее в математическом выражении:
double myVal;
double multiplier = 5.3;
myVal = getVal()* multiplier;
Если функция должна обладать возвращаемым значением, то необходимо внести два изменения:
• В описании функции вместо ключевого слова void указать тип возвращаемого значения.
• По завершении всех вычислений в функции использовать ключевое слово return и передать возвращаемое значение вызывающему коду.
Синтаксис кода для рассматриваемого типа функций консольного приложения будет выглядеть следующим образом:
static <возвращаемыйТип> <имяФункции>()
{
return <возвращаемоеЗначение>;
}
Единственным ограничением в данном случае является требование, гласящее, что<возвращаемоеЗначение> должно иметьтип<возвращаемыйТип> или же должна существовать возможность его неявного преобразования в этот тип. Вообще говоря, <возвращаемыйТип> может быть любым, включая самые сложные типы из числа рассмотренных ранее.
В простейшем случае это может выглядеть следующим образом:
static double getVal()
{
return 3.2;
}
Однако в реальной жизни возвращаемые значения обычно являются продуктом выполняемых функцией некоторых вычислений, поскольку того же результата можно достигнуть простым использованием переменной типа const. Когда при выполнении программы достигается оператор return, управление немедленно передается обратно в вызывающий код. Никакие строки кода после этого оператора выполняться не будут. Отсюда, однако, совершенно не следует, что в теле функции оператор return обязательно должен быть последним. Он может быть использован и раньше, например, при ветвлении по какому-либо условию. Включение оператора return в цикл for, в блок if или в какую-нибудь другую структуру приведет к немедленному окончанию выполнения как этой структуры, так и всей функции в целом. Например:
В данном случае будет возвращено одно из двух значений — в зависимости от значения переменной checkVal. Имеется единственное ограничение: оператор return должен выполняться до того, как будет достигнута закрывающая фигурная скобка } данной функции. Следующий код не является допустимым: