что делают с функциями
Значение слова «функция»
1. Явление, зависящее от другого и изменяющееся по мере изменения другого явления. Литература в целом мире признается как одна из функций общественного бытия. Салтыков-Щедрин, Признаки времени.
2. Мат. Переменная величина, меняющаяся в зависимости от изменения другой величины (аргумента). Тригонометрические функции. □ [Володя], бойко постукивая мелом о черную доску, толкует о функциях, синусах, координатах и т. п. Л. Толстой, Отрочество.
3. Биол. Работа, производимая органом, организмом, как проявление его жизнедеятельности. Вот вам азбука биологии: если какой-нибудь орган продолжительное время не упражнять, то он утрачивает способность отправлять свои функции. Федин, Города и годы. [Котельников:] Проблема сводится к восстановлению жизненных функций организма, пораженного тем или иным ядом. Лавренев, Мы будем жить!
4. перен. Обязанность, круг деятельности. — [Развалихин] утром сказал, что пойдет в школу проводить обществоведение вместо тебя. «Это, говорит, моя прямая функция, а не Корчагина». Н. Островский, Как закалялась сталь.
5. Значение, назначение, роль. Функция творительного падежа. Функции денег.
[От лат. functio — исполнение]
Источник (печатная версия): Словарь русского языка: В 4-х т. / РАН, Ин-т лингвистич. исследований; Под ред. А. П. Евгеньевой. — 4-е изд., стер. — М.: Рус. яз.; Полиграфресурсы, 1999; (электронная версия): Фундаментальная электронная библиотека
Функция (философия) — обязанность, круг деятельности.
Функция (работа) — работа, производимая органом, организмом, прибором; роль, значение чего-либо; назначение чего-либо.
Функция (литературоведение) — назначение персонажа в литературном произведении.
Социальная функция — использование того или иного механизма социальных взаимодействий для достижения определённой цели или реализации определённых ценностей.
Функция (математика) — закон зависимости одной величины от другой.
Функция (программирование) — вид подпрограммы в информатике.
Функциональная зависимость (программирование) — в теории реляционных баз данных.
ФУ’НКЦИЯ, и, ж. [латин. functio — выполнение работы]. 1. Явление, зависящее от другого и изменяющееся по мере изменения этого другого явления (книжн.). 2. Переменная величина, меняющаяся в зависимости от изменения другой величины (мат.). Величина давления газа есть функция величины его объема. 3. Работа, производимая органом, организмом (биол., физиол.). Отделение слюны является основной функцией слюнной железы. 4. перен. Обязанность, круг деятельности чего-н., подлежащая исполнению работа (книжн.). Служебные функции. Исполнять свою функцию в обществе. Функции государственного управления. 5. Значение, назначение, роль (книжн.). Ф. математического знака. Ф. родительного падежа.
Источник: «Толковый словарь русского языка» под редакцией Д. Н. Ушакова (1935-1940); (электронная версия): Фундаментальная электронная библиотека
фу́нкция
1. перен. книжн. обязанность, круг деятельности чего-либо, подлежащая исполнению работа ◆ Служебные функции. ◆ Исполнять свою функцию в обществе. ◆ Функции государственного управления.
2. книжн. значение, назначение, роль ◆ Функция математического знака. ◆ Функция родительного падежа.
3. матем. переменная величина, меняющаяся в зависимости от изменения другой величины, а также закон, определяющий свойства такого изменения ◆ Величина давления газа есть функция величины его объёма.
4. книжн. явление, зависящее от другого и изменяющееся по мере изменения этого другого явления
5. биол. физиол. работа, производимая органом, организмом. ◆ Выделение слюны является основной функцией слюнной железы.
7. комп. в программировании — фрагмент программного кода (подпрограмма), к которому можно обратиться из другого места программы.
Что такое Функция?
7 класс, 11 класс, ЕГЭ/ОГЭ
Понятие функции
Определение функции можно сформулировать по-разному. Рассмотрим несколько вариантов, чтобы усвоить наверняка.
1. Функция — это взаимосвязь между величинами, то есть зависимость одной переменной величины от другой.
Знакомое обозначение y = f (x) как раз и выражает идею такой зависимости одной величины от другой. Величина у зависит от величины х по определенному закону, или правилу, которое обозначается f.
Вывод: меняя х (независимую переменную, или аргумент) — меняем значение у.
2. Функция — это определенное действие над переменной.
Значит, можно взять величину х, как-то над ней поколдовать — и получить соответствующую величину у.
В технической литературе можно встретить такие определения функции для устройств, в которых на вход подается х — на выходе получается у. Схематично это выглядит так:
В этом значении слово «функция» используют и в далеких от математики областях. Например, так говорят о функциях ноутбука, костей в организме или даже о функциях менеджера в компании. В каждом перечисленном случае речь идет именно о неких действиях.
3. Функция — это соответствие между двумя множествами, причем каждому элементу первого множества соответствует один элемент второго множества. Это самое популярное определение в учебниках по математике.
Например, в функции у = 2х каждому действительному числу х ставит в соответствие число в два раза большее, чем х.
Область определения — множество х, то есть область допустимых значений выражения, которое записано в формуле.
Например, для функции вида
область определения выглядит так:
И записать это можно так: D (y): х ≠ 0.
Область значений — множество у, то есть это значения, которые может принимать функция.
Например, естественная область значений функции y = x2 — это все числа больше либо равные нулю. Можно записать вот так: Е (у): у ≥ 0.
Для примера рассмотрим соответствие между двумя множествами — человек-владелец странички в инстаграм и сама страничка, у которой есть владелец. Такое соответствие можно назвать взаимно-однозначным — у человека есть страничка, и это можно проверить. И наоборот — по аккаунту в инстаграм можно проверить, кто им владеет.
В математике тоже есть такие взаимно-однозначные функции. Например, линейная функция у = 3х +2. Каждому значению х соответствует одно и только одно значение у. И наоборот — зная у, можно сразу найти х.
Функции. Зачем они нужны и как их писать, чтобы вас уважали программисты
Сложная важная статья для тех, кто хочет стать крутым программистом.
Хороший программист старается делать свои функции чистыми. Если знать, что это такое, можно сойти за своего, а заодно написать читаемый код.
Если вы не совсем понимаете, что такое функция и зачем она нужна — добро пожаловать в наш кат:
Что такое функция
Функция — это мини-программа внутри вашей основной программы, которая делает какую-то одну понятную вещь. Вы однажды описываете, что это за вещь, а потом ссылаетесь на это описание.
Например, вы пишете игру. Каждый раз, когда игрок попадает в цель, убивает врага, делает комбо, заканчивает уровень или падает в лаву, вам нужно добавить или убавить ему очков. Это делается двумя действиями: к старым очкам добавляются новые, на экран выводится новая сумма очков. Допустим, эти действия занимают 8 строк кода.
Допустим, в игре есть 100 ситуаций, когда нужно добавить или убавить очки — для каждого типа врага, преграды, уровня и т. д. Чтобы в каждой из ста ситуаций не писать одни и те же восемь строк кода, вы упаковываете эти восемь строк в функцию. И теперь в ста местах вы пишете одну строку: например, changeScore(10) — число очков повысится на 10.
Если теперь изменить, что происходит в функции changeScore(), то изменения отразятся как бы во всех ста местах, где эта функция вызывается.
Зачем нужны функции
Функции нужны, чтобы заметно упрощать и сокращать код, адаптировать его для разных платформ, делать более отказоустойчивым, легко отлаживать. И вообще порядок в функциях — порядок в голове.
Возьмём тот же пример с подсчётом очков. Что если при добавлении очков нужно не только выводить их на экран, но и записывать в файл? Просто добавляете в определении функции дополнительные команды, связанные с файлами, и они теперь будут исполняться каждый раз, когда функцию снова вызовут в основной программе. Не нужно ползать по всему коду, искать места с добавлением очков и дописывать там про файлы. Меньше ручного труда, меньше опечаток, меньше незакрытых скобок.
А что если нужно не только писать очки в файл, но и следить за рекордом? Пишем новую функцию getHighScore(), которая достаёт откуда-то рекорд по игре, и две другие — setHighScore() и celebrateHighScore() — одна будет перезаписывать рекорд, если мы его побили, а вторая — как-то поздравлять пользователя с рекордом.
Теперь при каждом срабатывании changeScore() будет вызывать все остальные функции. И сколько бы раз мы ни вызвали в коде changeScore(), она потянет за собой всё хозяйство автоматически.
Сила ещё в том, что при разборе этой функции нам неважно, как реализованы getHighScore(), setHighScore() и celebrateHighScore(). Они задаются где-то в другом месте кода и в данный момент нас не волнуют. Они могут брать данные с жёсткого диска, писать их в базу данных, издавать звуки и взламывать Пентагон — это будет расписано внутри самих функций в других местах текста.
А без функции пришлось бы писать огромную программу-валидатор прямо внутри кнопки. Это исполнимо, но код выглядел бы страшно громоздким. Что если у вас на странице три формы, и каждую нужно валидировать?
Хорошо написанные функции резко повышают читаемость кода. Мы можем читать чужую программу, увидеть там функцию getExamScore(username) и знать, что последняя каким-то образом выясняет результаты экзамена по такому-то юзернейму. Как она там устроена внутри, куда обращается и что использует — вам неважно. Для нас это как бы одна простая понятная команда.
Можно написать кучу вспомогательных функций, держать их в отдельном файле и подключать к проекту как библиотеку. Например, вы написали один раз все функции для обработки физики игры и потом подключаете эти функции во все свои игры. В одной — роботы, в другой — пираты, но в обеих одна и та же физика.
Функции — это бесконечная радость. На этом наш экскурс в функции закончен, переходим к чистоте.
Что такое чистые функции
Есть понятие чистых функций. Это значит, что если функции два раза дать на обработку одно и то же значение, она всегда выдаст один и тот же результат и в программе не изменит ничего, что не относится непосредственно к этой функции. То есть у чистой функции предсказуемый результат и нет побочных эффектов.
Один и тот же результат
Допустим, мы придумали функцию, которая считает площадь круга по его радиусу: getCircleArea(). Для наших целей мы берём число пи, равное 3,1415, и вписываем в функцию:
Теперь этой функции надо скормить число, и она выдаст площадь круга:
Разработчик может быть уверен, что эта функция всегда выдаст нужную для его задачи площадь круга и не будет зависеть от каких-либо других вещей в его программе. Эта функция с предсказуемым результатом.
Другой пример. Мы пишем программу-таймер, которая должна издать звук, например, за 10 секунд до конца отведённого ей времени. Чтобы узнать, сколько осталось секунд, нам нужна функция: она выясняет количество секунд между двумя отметками времени. Мы даём ей два времени в каком-то формате, а функция сама неким образом высчитывает, сколько между ними секунд. Как именно она это считает, сейчас неважно. Важно, что она это делает одинаково. Это тоже функция с предсказуемым результатом:
А теперь пример похожей функции: она определяет время от текущего до какого-то другого времени. При исполнении эта функция запрашивает текущее время в компьютере, сравнивает с целевым и делает нужные вычисления. При запуске одной и той же функции с разницей в несколько секунд она даст разные результаты:
Это функция с непредсказуемым результатом. У неё есть непредсказуемая зависимость, которая может повлиять на работу программы — зависимость от текущего времени на компьютере. Что если во время исполнения у пользователя обнулились часы? Или он сменил часовой пояс? Или при запросе текущего времени происходит ошибка? Или его компьютер не поддерживает отдачу времени?
С точки зрения чистых функций, правильнее будет сначала отдельными функциями получить все внешние зависимости, проверить их и убедиться, что они подходят для нашей работы. И потом уже вызвать функцию с подсчётом интервалов. Что-то вроде такого:
Тогда в функции getCurrentTime() можно будет прописать всё хозяйство, связанное с получением нужного времени и его проверкой, а в getInterval() оставить только алгоритм, который считает разницу во времени.
Побочные эффекты
Современные языки программирования позволяют функциям работать не только внутри себя, но и влиять на окружение. Например, функция может вывести что-то на экран, записать на диск, изменить какую-то глобальную переменную. Взломать Пентагон, опять же. Всё это называется побочными эффектами. Хорошие программисты смотрят на них крайне настороженно.
Мы пишем таск-менеджер. В памяти программы хранятся задачи, у каждой из которых есть приоритет: высокий, средний и низкий. Все задачи свалены в кучу в памяти, а нам надо вывести только те, что с высоким приоритетом.
Можно написать функцию, которая считывает все задачи из памяти, находит нужные и возвращает. При этом на задачи в памяти это не влияет: они как были свалены в кучу, так и остались. Это функция без побочных эффектов.
А можно написать функцию, которая считывает задачи, находит нужные, стирает их из исходного места и записывает в какое-то новое — например, в отдельный массив приоритетных задач. Получается, будто она физически вытянула нужные задачи из исходного массива. Побочный эффект этой функции — изменение исходного массива задач в памяти.
Программисты настороженно относятся к мутациям, потому что за ними сложно следить. Что если из-за какой-то ошибки функции выполнятся в неправильном порядке и уничтожат важные для программы данные? Или функция выполнится непредсказуемо много раз? Или она застрянет в цикле и из-за мутаций разорвёт память? Или мутация произойдёт не с тем куском программы, который мы изначально хотели?
Вот типичная ошибка, связанная с мутацией. Мы пишем игру, нужно поменять сумму игровых очков. За это отвечает функция changeScore(), которая записывает результат в глобальную переменную playerScore — то есть мутирует эту переменную. Мы случайно, по невнимательности, вызвали эту функцию в двух местах вместо одного, и баллы увеличиваются вдвое. Это баг.
Другая типичная ошибка. Программист написал функцию, которая удаляет из таблицы последнюю строку, потому что был почему-то уверен: строка будет пустой и никому не нужной. Случайно эта функция вызывается в бесконечном цикле и стирает все строки, от последней к первой. Данные уничтожаются. А вот если бы функция не удаляла строку из таблицы, а делала новую таблицу без последней строки, данные бы не пострадали.
Без мутирующих функций, конечно, мы не обойдёмся — нужно и выводить на экран, и писать в файл, и работать с глобальными переменными. Сложно представить программу, в которой вообще не будет мутирующих функций. Но программисты предпочитают выделять такие функции отдельно, тестировать их особо тщательно, и внимательно следить за тем, как они работают. Грубо говоря, если функция вносит изменения в большой важный файл, она должна как минимум проверить корректность входящих данных и сохранить резервную копию этого файла.
Как этим пользоваться
Когда будете писать свою следующую функцию, задайтесь вопросами:
И если логика программы позволяет, постарайтесь сделать так, чтобы функция ни от чего не зависела и ни на что за своими пределами не влияла. Тогда код будет более читаемым, а коллеги-программисты сразу увидят, что перед ними вдумчивый разработчик.
ФУНКЦИЯ
Смотреть что такое «ФУНКЦИЯ» в других словарях:
ФУНКЦИЯ — (лат. functio – исполнение) обязанность, круг деятельности. «Функция – это существование, мыслимое нами в действии» (Гёте). Наука о функциях органов живых существ – физиология; специальная наука о функциях нервной системы – физиология органов… … Философская энциклопедия
функция — Команда или группа людей, а также инструментарий или другие ресурсы, которые они используют для выполнения одного или нескольких процессов или деятельности. Например, служба поддержки пользователей. Этот термин также имеет другое значение:… … Справочник технического переводчика
функция — См … Словарь синонимов
ФУНКЦИЯ — (лат. functio). В физиологии: отправление каким либо органом ему одному свойственных действий, как напр., дыхание, пищеварение. 2) в математике: величина, зависящая от другой переменной величины. Словарь иностранных слов, вошедших в состав… … Словарь иностранных слов русского языка
Функция — [function] 1. Зависимая переменная величина; 2. Соответствие y=f(x) между переменными величинами, в силу которого каждому рассматриваемому значению некоторой величины x (аргумента или независимой переменной) соответствует определенное значение… … Экономико-математический словарь
Функция — (от латинского functio исполнение, осуществление), 1) деятельность, обязанность, работа; внешнее проявление свойств какого–либо объекта в данной системе отношений (например, функция органов чувств, функция денег). 2) Функция в социологии роль,… … Иллюстрированный энциклопедический словарь
ФУНКЦИЯ — (от лат. functio исполнение осуществление). 1) деятельность, обязанность, работа; внешнее проявление свойств какого либо объекта в данной системе отношений (напр., функция органов чувств, функция денег)2)] Функция в социологии роль, которую… … Большой Энциклопедический словарь
ФУНКЦИЯ — ФУНКЦИЯ, в математике одно из основных понятий, выражение, определяющее регулярную зависимость между двумя множествами переменных величин, заключающуюся в том, что каждому элементу одного множества соответствует определенная, единственная… … Научно-технический энциклопедический словарь
ФУНКЦИЯ — (function) Взаимосвязь между двумя и более переменными. Если у является функцией от х и записывается в виде y=f(x), то, если значение аргумента х известно, функция позволяет показывает, как найти значение у. Если у – однозначная функция от х, то… … Экономический словарь
ФУНКЦИЯ — (от лат. исполняю, совершаю) центр, понятие в методологии функционального и структурно функционального анализа об в. Понятие “Ф.” стало активно использоваться в социальных науках со вт. пол. 19 в. в связи с проникновением сначала… … Энциклопедия культурологии
Изучаем C++. Часть 5. Функции и процедуры
Разбираемся, как функции помогают сократить код и сделать программу полезнее.
Это пятая часть из серии статей «Глубокое погружение в C++». В прошлый раз мы узнали, как правильно использовать ввод данных и обрабатывать исключения. Сегодня займёмся функциями и процедурами.
Если код нужно использовать несколько раз, то лучше всего его вывести в подпрограмму — функцию или процедуру. Это позволит значительно сократить объём кода. Давайте рассмотрим вот такую программу:
Программа по очереди приветствует шесть человек. Это относительно небольшой код, но что, если понадобится заменить фразу «Hello, %name%!» на «Hello, %name%! How are you?»? Тогда придётся поменять код в шести местах. А такие сообщения могут выводиться сто или даже тысячу раз.
Подпрограммы как раз и нужны, чтобы избежать таких проблем.
Пишет о программировании, в свободное время создает игры. Мечтает открыть свою студию и выпускать ламповые RPG.
Как создать функцию в C++
Для удобства любые подпрограммы, в том числе и процедуры, называют функциями.
Одну функцию мы с вами уже создавали — main (). Она работает как точка входа в каждую программу. Другие функции создаются аналогичным образом:
Вот так это выглядит в коде:
Функции могут принимать или не принимать аргументы. Но если вы указали, что аргументы всё же нужны, то попытка вызвать функцию без них приведёт к ошибке.
Если вы указываете какой-либо тип возвращаемых данных, то обязательно должен присутствовать оператор return. Если возвращать значение не нужно, создайте процедуру — укажите тип void.
Вот что выведет такая программа:
Функция main () автоматически возвращает значение, поэтому отдельно прописывать return не обязательно. Программа вернёт 0, если она выполнилась успешно, или другое число в зависимости от ошибки.
Области видимости в C++
Всё, что происходит в функции, в ней же и остаётся. То есть функции могут работать только с теми значениями, которые в них передали:
Если переменная создаётся внутри какого-либо блока <>, то она будет доступна только в этом и во всех вложенных блоках; такие переменные называются локальными.
Если вы хотите, чтобы какая-нибудь переменная была доступна везде, то её нужно объявить за пределами каких-либо блоков; такие переменные называются глобальными:
Однако использовать глобальные переменные не рекомендуется, потому что вам будет сложно отслеживать изменения и влиять на результат работы программы. Единственное исключение — это константы, которые нужно делать глобальными, потому что они не меняются.
Как работают аргументы
Рассмотрим, что происходит, когда вы передаёте аргумент в функцию. Допустим, есть вот такой код:
Можно подумать, что в результате программы мы увидим число 505, но это неверно. Дело в том, что функции в качестве аргументов принимают не сами переменные, а их значения. То есть в sum () попала не ячейка памяти, а число 5, которое находилось в этой ячейке. Учитывайте это, когда пишете программы.
Это касается только примитивных типов данных. Ссылочные типы ведут себя иначе.
Рекурсия C++
Рекурсия — это ситуация, когда объект является частью самого себя (не путать с фракталом). В программировании это проявляется в одной интересной особенности функций — они могут вызывать сами себя.
Чтобы понять, что такое рекурсия, нужно понять, что такое рекурсия
Чаще всего рекурсия объясняется на примере факториалов (не путать с фракталами):
Вот факториалы чисел от 1 до 10:
Важно! Прописывайте условия выхода из рекурсии, иначе программа попадёт в бесконечный цикл и сильно нагрузит компьютер.
На практике применение этой особенности можно увидеть при рекурсивном удалении папок. Функция удаления должна работать так:
Рекомендации по созданию функций
Разрабатывая программы, вы постоянно будете работать с функциями, поэтому важно научиться делать их максимально полезными. Вот несколько рекомендаций:
И старайтесь как можно больше практиковаться, чтобы закрепить новые знания. В этой серии статей описываются базовые возможности программирования, которые пригодятся вам на протяжении всей карьеры. В следующем материале мы разберёмся, как упростить повторяющийся код с помощью циклов.
Ну а если вы хотите углубить свои знания, набраться опыта на реальных проектах и получать обратную связь по своему коду от опытных разработчиков, то записывайтесь на наш курс по программированию на C++.