Что значит возвращает в программировании
Что значит возвращает в программировании
Новости из жизни Microsoft: разработан
женский Windows 98. К кнопкам «да» и «нет»
добавлена третья — «может быть».
В детстве, когда я только начал изучать программирование, самой первой непонятной вещью для меня были «Return Values» — значения, возвращаемые вызванной функцией.
Сейчас попробую Вам рассказать так, чтобы было понятно. Есть функция — например, «синус». Мы вызываем эту функцию, написав, обычно, в программе
Надеюсь, вы догадываетесь, что в тексте программы такая строка означает не уравнение, которое нужно решить. Если не догадываетесь, объясняю: мы вызываем функцию «синус», подсунув ей какое-то число «х». Функция вычисляется и результат вычисления синуса присваивается переменной «у». Так вот это вычисленное функцией значение и называется «возвращаемым значением». Любая функция всегда возвращает какое-либо значение в то «место», откуда она была вызвана. Причем, мы можем написать в программе просто
При этом функция «синус» вычислит значение синуса «х», и обязательно вернет это значение. Вот только в этом случае оно ничему не присвоится и пропадет.
А теперь вернемся в главу 2 — где мы создавали сообщения с помощью команды MessageBox. MessageBox — это тоже функция. Мы ее вызываем, подсовывая (передавая) ей некоторые значения (тексты) и параметры-флаги. Эта функция рисует на экране окно сообщения. Когда мы нажимаем на кнопку в этом сообщении — именно в этот момент функция считается полностью выполненной — и ВОЗВРАЩАЕТ вызвавшей ее программе какое-то значение. Что она может возвращать? Вспомним,что мы рассматривали возможные варианты сообщений — с тремя кнопками. Так вот, значение, которое вернет функция MessageBox, будет зависеть от того, на какую кнопку мы (пользователь программы) нажмем.
Давайте научим нашу программу понимать, на какую кнопку в сообщении мы нажали. Заодно и познакомимся с оператором «если» — «if». Введем в наше обычное место в файле «2000dlgc.cpp» следующие строки:
Обратите внимание, что в нашем первом сообщении мы указали флаг MB_YESNO вместо MB_ОК — в результате мы получим окно сообщения с двумя кнопками — «ДА» и «НЕТ». Далее — в принципе, мы могли бы добавить в программу новую переменную, потом присваивать ей значение, возвращаемое функцией MessageBox — точно так же, как мы действуем с функцией «синус»; а потом мы сравнили бы эту переменную с IDYES и т.д. Но зачем нам лишние переменные? Мы сразу сравниваем функцию MessageBox (а точнее — значение, ею возвращаемое) с интересующим нас значением, а именно IDYES. Вот в этой части —
и происходит сравнение. Знак «==» — это логический оператор «равно». Я сам до сих пор, когда пишу программы, путаю его с оператором присвоения — одиночным знаком «=». Ошибка страшная — поскольку с точки зрения языка это все допустимо — и компилляция не выдает ошибки — а программа работает не так, как задумано.
Но вернемся к нашей программе. Уточним теперь синтаксис оператора «если»:
Второй части может и не быть, т.е. оператор может выглядеть следующим образом:
Это пишется в случае, когда мы делаем что-то лишь в случае истинности условия, а в случае невыполнения условия мы не делаем никаких действий.
В нашем примере программа будет работать следующим образом: Дойдя до строки с оператором «если», она полезет внутрь — к условию сравнения. Там она выяснит, что в одной из частей, подлежащих сравнению, должно стоять значение, возвращаемое функцией MessageBox. Программе «придется» вызвать эту функцию, в результате чего мы увидим на экране наше сообщение с двумя кнопками — см.рис.4.1.
Рисунок 4.1. Сообщение с двумя кнопками.
Затем программа будет ждать, пока мы не нажмем одну из кнопок. Как только мы это сделаем, функция MessageBox вернет программе одно из двух значений — IDYES, если мы нажали кнопку YES, или IDNO, если мы нажали кнопку NO. Программа возьмет это значение и проверит, не равно ли оно второй части условия — а там мы записали IDYES. Если равно — значит, условие истинно — и программа выполнит то, что написано в первых фигурных скобках — т.е. снова вызовет функцию MessageBox, но уже с другими параметрами — и появится сообщение о том, что мы нажали кнопку ДА. Если же условие окажется ложным, то программа выполнит то, что написано в фигурных скобках после слова «иначе» («else») — и появится сообщение о нажатии нами кнопки НЕТ.
§5 Функции возвращающие значение. Перегрузка функций. Шаблоны
Функции возвращающие значение
Функции возвращающие значение имеют тип, который соответствует типу возвращаемого значения. Эти функции возвращают значение в точку возврата операцией обращения. Соответственно функция должна выступать как операнд в выражениях с присваиванием или выводом. Это отличает синтаксис функций возвращающих и не возвращающих значение. В определении функции должна быть инструкция return , которая принимает выражение для определения возвращаемого значения. Ниже приводится схема размещения в программе функции возвращающей значение.
Функция в программе
Объявление функции. Прототип
Вызов функции
Определение функции
Инструкция return
Инструкция return завершает выполнение функции и возвращает её значение. Инструкция return возвращает только одно значение (переменной или выражения). В некоторых случаях оператор return может применяться и в функциях не возвращающих значение (программа 13.1 стр. 23). Но в этих функциях пустая инструкция return применяется для выхода из функции и возврата управления в вызывающую программу.
Приведем пример программы с функцией возвращающей значение.
Составим программу с функцией возвращающей случайное значение на отрезке [a, b] . Назовем ее myRand() . Эта функция двух аргументов может применяться, например, для заполнения массива.
В теле функции может быть несколько инструкций return . В таком случае только одна инструкция return вернет значение. Это можно запрограммировать с помощью условной инструкции. Приведем пример такой программы. Дано двузначное целое число n. Если это число четное получить произведение его цифр, иначе получить сумму его цифр.
Данную функцию можно было определить и более лаконично, если вместо условной инструкции применить тернарную операцию:
Использование тернарной операции в сочетании с инструкцией return находит довольно частое применение.
Если требуется возвращать функцией более одного значения, то необходимо прибегать к передаче параметров по ссылке или указателю. Рассмотрим пример. Разработать программу в которой используется функция возвращающая разряды двузначного числа.
Перегрузка функций
Перегрузка функций позволяет использовать несколько функций с одним и тем же именем, но различными параметрами. Каждая такая функция должна иметь свой прототип и свое определение. Вызов той или иной перегруженной функции будет определять набор аргументов (сигнатура). Сигнатуры перегруженных функций должны различаться либо по типу, либо по количеству, либо и по тому, и по другому. Рассмотрим простой пример. Требуется составить программу которая выводит половину произведения аргументов, если в сигнатуре два аргумента и среднее арифметическое аргументов, если в сигнатуре три аргумента.
Перегрузка функций, так называемый полиморфизм функций, применяется в том случае, если в большой программе существует набор некоторых функций, которые решают однотипные задачи (один класс задач), но реализация каждой из них требует некоторых изменений (например, использование иных типов данных или иного представления результата). Это позволяет разработчику сократить количество используемых имен функций в своей программе.
Заметим так же, что перегруженные функции могут возвращать разный тип данных, при условии, что сигнатуры этих функций будут различаться.
Шаблоны функций
Шаблоны функций (function template) предоставляют инструменты для проектирования функции. Шаблон позволяет отвлечься от конкретного типа данных, с которыми функция будет работать. Шаблон — является руководством для создания реального объекта. Это значит, что шаблон не создает функцию, а указывает компилятору как создать определение функции для соответствующего типа данных, который будут иметь, в определенный момент работы программы, аргументы создаваемой функции. Шаблоны применяются в тех случаях, когда для разных типов данных должен использоваться один и тот же алгоритм.
Определение шаблона:
где T1 , T2 — произвольные имена параметров типа шаблона. Каждому параметру типа должно предшествовать ключевое слово typename . Эти параметры применяются для указания типов различных объектов в заголовке и в теле функции. Компилятор свяжет эти параметры с соответствующим типом аргументов для определения типа параметров функции.
Приведем пример задачи. Составить программу в которой необходимо сравнивать два объекта одного типа. Продемонстрировать использование созданной шаблонной функции для сравнения объектов разного типа.
ВОЗВРАЩЕНИЕ ЗНАЧЕНИЯ ФУНКЦИЕЙ: ОПЕРАТОР return
ВОЗВРАЩЕНИЕ ЗНАЧЕНИЯ ФУНКЦИЕЙ: ОПЕРАТОР return
Создадим функцию, вычисляющую абсолютную величину числа. Абсолютная величина числа — это его значение (если отбросить знак). Следовательно, абсолютная величина 5 равна 5, а абсолютная величина -3 равна 3. Мы назовем эту функцию abs( ). Входом для abs() может быть любое число, для которого мы хотим найти абсолютную величину. Выходом функции будет соответствующее неотрицательное число. Входная величина может обрабатываться благодаря наличию аргумента; выходная величина возвращается (т. е. выдается), как вы увидите ниже, при помощи ключевого слова языка Си — return. Поскольку функция abs( ) должна быть вызвана другой функцией, мы создадим простую программу main( ), основной целью которой будет проверка, работает ли функция abs( ). Программа, спроектированная для того, чтобы проверять работу функции именно таким образом, называется «драйвером». Драйвер подвергает функцию последовательным проверкам. Если результаты оказываются удовлетворительными, то ее можно поместить в программу, заслуживающую большего внимания. (Термин «драйвер» обычно относится к программам, управляющим работой устройств.) Приведем далее наш драйвер и функцию, вычисляющую абсолютную величину числа:
int а = 10, b = 0, с = -22;
printf(» °%d %d %d » , d, e, f);
/* функция, вычисляющая величину числа */
Похожие главы из других книг:
return — Выходит из функции или возвращает ее значение
return — Выходит из функции или возвращает ее значение returnВыходит из функции или возвращает ее значениеСинтаксис:return; return expression;Аргументы:Описание:При вызове функции можно передавать ей одно или более значений (параметров или аргументов), участвующих в выполнении.
6.5.11. Действие RETURN
6.5.11. Действие RETURN Действие RETURN прекращает движение пакета по текущей цепочке правил и производит возврат в вызывающую цепочку, если текущая цепочка была вложенной, или, если текущая цепочка лежит на самом верхнем уровне (например INPUT), то к пакету будет применена политика
Проблема “return void”
Проблема “return void” Посмотрим внимательнее на реализацию функции operator() в нашем адаптере. Что будет, если мы захотим в качестве типа возвращаемого значения функции использовать void? Наша функция запишется так: void operator()
R.6.6.3 Оператор return
R.6.6.3 Оператор return Возврат из функции в обратившуюся к ней функцию происходит с помощью оператора return.Оператор return без выражения можно использовать только в функциях, которые не возвращают значение, т.е. в функциях, возвращающих значение типа void, или в конструкторах (§R.12.1)
Работа с функцией Format
Работа с функцией Format Функция Format, имеющаяся в VBA 5 и VBA 6,- невероятно гибкая. Она применима практически к любым типам данных и имеет настраиваемый вывод- если ни один из встроенных форматов не подойдет, вы можете создать свой, какой пожелаете.В упрощенной форме синтаксис
Правило 52: Если вы написали оператор new с размещением, напишите и соответствующий оператор delete
Правило 52: Если вы написали оператор new с размещением, напишите и соответствующий оператор delete Операторы new и delete с размещением встречаются в C++ не слишком часто, поэтому в том, что вы с ними не знакомы, нет ничего страшного. Вспомните (правила 16 и 17), что когда вы пишете такое
КЛЮЧЕВОЕ СЛОВО return
КЛЮЧЕВОЕ СЛОВО return Принципы программирования на языке Си основаны на понятии функции. В представленных ранее примерах программирования мы уже воспользовались несколькими функциями: printf( ), scanf( ), getchar( ), putchar( ) и strlen( ). Эти функции являются системными, однако мы
1. Пустые значения (Empty-значения)
1. Пустые значения (Empty-значения) Пустое значение – это просто одно из множества возможных значений какого-то вполне определенного типа данных.Перечислим наиболее «естественные», непосредственные пустые значения (т. е. пустые значения, которые мы могли бы выделить
2. Неопределенные значения ( Null-значения)
2. Неопределенные значения (Null-значения) Слово Null используется для обозначения неопределенных значений в базах данных.Чтобы лучше понять, какие значения понимаются под неопределенными, рассмотрим таблицу, являющуюся фрагментом базы данных: Итак, неопределенное
1. Оператор Select – базовый оператор языка структурированных запросов
1. Оператор Select – базовый оператор языка структурированных запросов Центральное место в языке структурированных запросов SQL занимает оператор Select, с помощью которого реализуется самая востребованная операция при работе с базами данных – запросы.Оператор Select
Оператор возврата return
Оператор возврата return Синтаксис:return [ ];Действие:Оператор возврата return заканчивает выполнение функции, в которой он содержится, и возвращает управление в вызывающую функцию. Управление передается в точку вызывающей функции, непосредственно следующую за
7.2.1. Тип возвращаемого функцией значения
7.2.1. Тип возвращаемого функцией значения Тип возвращаемого функцией значения бывает встроенным, как int или double, составным, как int или double*, или определенным пользователем – перечислением или классом. Можно также использовать специальное ключевое слово void, которое
9.10 Оператор Return
9.10 Оператор Return Возврат из функции в вызывающеую программу осуществляеся с помощью оператора return, имеющего один из двух видов:return ; return выражение ;Первый может использоваться только в функциях, не возвращающих значения, т.е. в функциях с типом возвращаемого значения void.
19.5. Проверка значений, возвращаемых функцией
19.5. Проверка значений, возвращаемых функцией Для проверки значения, возвращаемого вызванной функцией, можно воспользоваться кодом завершения последней команды, размешенной непосредственно после функции, которая вызывается из сценария. Например:check it ls_a directory $FILENAME #
Что значит возвращает в программировании
При описании многих функций говорится: «функция возвращает. » и далее варианты, типа «. исходную строку. «, «. текущую длину строки. «, «. объем в байтах. «, «. возвращает True. » и т.д. Объясните, пожалуйста, что ВООБЩЕ означает это загадочное словосочетание «функция возвращает»? Для чего возвращает, куда, зачем, когда это нужно.
← →
Palladin © ( 2007-01-17 05:24 ) [1]
иди книжки читай про паскаль (или Си), предпочтительно для тех, кто написал не более 10 строк программы за всю жизнь, для самых самых начинающих. особенно тот раздел где рассказывается чем функция от процедуры отличается.
← →
ors_archangel © ( 2007-01-17 06:31 ) [2]
«Функция возвращает значение F(x)» означает, что она производит отображение X —> Y, где x принадлежит множеству X, а y = F(x) принадлежит множеству Y. Само слово «возвращает» восходит к механизму вызова подпрограмм, а именно: существует момент, когда некоторая функция вызыется (происходит переход на её код) и когда происходит возврат из этой функции (всегда в вызывающую), значение функции становится известно в вызывающей функции только когда произойдёт, собственно, возврат из неё, поэтому и говорят «возвращаемое значение», «функция возвращает».
← →
Virgo_Style © ( 2007-01-17 06:36 ) [3]
Palladin © (17.01.07 5:24) [1]
иди книжки читай про паскаль (или Си),
или про математику даже
← →
Евгенич © ( 2007-01-17 14:37 ) [4]
Благодарю Вас, ors_archangel за ответ! Следует отметить — за единственный содержательный, а также подробный и корректный ответ. Спасибо!
← →
Джо © ( 2007-01-17 14:58 ) [5]
function SomeFunc: Integer;
begin
Result := 1
end;
Так вот, функция SomeFunc вовзращает значение 1 вызывающему ее коду.
← →
$Pl@Sh © ( 2007-01-17 15:08 ) [6]
Как что значит? если чё-то берет, то обязательно возвращает! а книжки все-таки надо читать
← →
Array © ( 2007-01-17 15:12 ) [7]
> $Pl@Sh © (17.01.07 15:08) [6]
а вот процедуры жадные, они не возвращают (((
а книжки да нужны
← →
novill © ( 2007-01-17 15:26 ) [8]
> [4] Евгенич © (17.01.07 14:37)
а математка все равно рулит!
← →
Евгенич © ( 2007-01-18 04:55 ) [9]
Остальным тоже поклон, за участие.
Про книги — это же понятно. Я и читаю, как же без них, родимых. Начал изучать дельфи только несколько дней назад. Ничем подобным никогда не занимался и вот заинтересовался. Ведь программирование — это своего рода волшебство, не так ли? Пусть оно будет добрым. Если вы потратили время на ответ, пусть он будет достаточно информативным. Если вы раскрываете некоторое понятие, то в его объяснении лучше не использовать это самое понятие, в противном случае зачем объяснение?
Буду изучать, буду спрашивать, разрешите надеяться на ваши ответы.
← →
brother © ( 2007-01-18 06:00 ) [10]
Возвращаемые значения
Все функции, кроме функций типа void, возвращают значения. Данное значение определяется в операторе return. Если функция не определена как void и если не указано возвращаемое значение, то возвращается мусор. Если функция не объявлена как void, она может использоваться в качестве операнда в любом корректном выражении. Следовательно, каждое из следующих выражений корректно:
if (max (х, у) > 100) printf («greater»);
for (ch=getchar(); isdigit(ch); ) . ;
Тем не менее функция не может стоять с левой стороны оператора присваивания. Оператор типа
swap (х, у) = 100; /* некорректный оператор */
неправилен. Компилятор выдаст ошибку.
Если функция объявляется как void, она не может использоваться в выражениях. Например, предположим, что f() объявлена как void. Следующие операторы не будут компилироваться:
int t;
t = f(); /* нет значения для присваивания t */
f() + f(); /* нет значений для сложения */
Хотя все функции не типа void имеют значения возврата, при написании программ обычно используется три типа функций. Первый тип — это вычислительные функции. Он предназначен для выполнения операций с аргументами и возвращает значение, основываясь на этих операциях. Примером таких функций являются sqr() и sin() — стандартные библиотечные функции.
Следующий тип функций обрабатывает информацию и возвращает значение, показывающее, была ли работа успешной или привела к ошибке. Примером является fwrite() — функция, используемая для записи информации в файл. Если запись проведена успешно, fwrite() возвращает число удачно записанных элементов. Если возникла ошибка, возвращаемое число не равно числу элементов, которые требовалось записать.
Последний тип функций не имеет определенного возвращаемого значения. Функция является обычной процедурой и не выдает значения. Примером служит srand(), используемая для инициализации генератора случайных чисел функции rand(). Иногда функции, не выдающие осмысленного результата, что-то все-таки выдают. Например, printf() возвращает число напечатанных символов. Очень трудно найти программу, которая проверяет это. Следовательно, хотя все функции, кроме функций, объявленных как void, возвращают значения, нет необходимости использовать все эти значения. Типичным вопросом по возвращаемым функциями значениям является: «Не должен ли я присвоить данное значение некоторой переменной, поскольку значение возвращается?» Ответ: «Нет». Если не указано, чему присваивается возвращаемое значение, то оно просто отбрасывается. Рассмотрим следующую программу, использующую mul():
int mul(int a, int b);
int main(void)
<
int x, y, z;
x = 10; у = 20;
z = mul(x, у); /* 1 */
printf («%d», mul(x, y) ); /* 2 */
mul (x, y); /* 3 */
return 0;
>
int mul (int a, int b)
<
return a*b;
>
Строка 1 присваивает возвращаемое функцией mul() значение переменной z. В строке 2 возвращаемое значение напрямую не используется, но оно используется косвенно функцией printf(). Наконец, в строке 3 возвращаемое значение теряется, поскольку не происходит присваивание значения какой-либо переменной и также оно не используется ни в каком из выражений.