Функция — это отдельный блок программы, который выполняет одно конкретное действие. Обычно функции выглядят как маленькие программы внутри основного кода, и их можно запускать в разные моменты времени.
В разговорной речи функцией называют какую-то возможность программного обеспечения, например функция записи звука. Но в программировании значение несколько иное: это часть программного кода со своими особенностями.
В информатике функция считается одним из основных понятий. Возможность создавать и запускать функции есть практически во всех языках программирования, кроме самых примитивных и близких к аппаратной части.
Для чего нужны функции
В программировании часто приходится выполнять одни и те же действия: перебирать массив, создавать набор объектов или получать данные с сервера. Если каждый раз писать команды для этих действий с нуля, программа получится большой, громоздкой и нечитаемой.
Именно в таких ситуациях нужны функции — «программы» в программе. Они позволяют один раз описать, как выполнять какое-то действие, а потом сколько угодно раз запускать это действие одной строчкой кода. Это можно сделать практически в любой момент выполнения, а еще функцию можно вызывать с разными аргументами — и получать разный результат.
Благодаря функциям код становится более чистым, лаконичным и понятным:
- действия разделены по функциям, а не хаотично повторяются в разных местах кода;
- программу легче отлаживать, ведь разработчик сам знает, где «лежит» какое действие;
- код можно использовать повторно и не писать одно и то же снова и снова;
- функции облегчают работу с элементами интерфейса: при нажатии на кнопку можно просто вызывать функцию с нужным действием, а не писать код отдельно.
В языках программирования обычно существуют наборы готовых функций для базовых действий, собранные в библиотеки. Но разработчик может писать свои собственные функции — для любых действий, которые ему понадобятся.
Что можно делать с функциями
Задавать. Разработчик может создать функцию — описать, как она будет называться и что будет делать. Обычно описание начинается с ключевого слова function и имени функции, которое разработчик придумывает сам. Правда, в разных языках синтаксис может отличаться.
Задать функцию можно в любом участке кода. Но правилом хорошего тона считается собирать все функции в одном месте, а не разбрасывать их по документу с кодом хаотично.
Вызывать. Когда программист задает функцию, она не выполняется сразу — это просто описание. Чтобы функция сработала, ее нужно вызвать: написать в нужном участке кода команду вызова. Команда обычно состоит из названия функции и двух скобок. Например, так: myFunction().
Вызывать с аргументами. Иногда, чтобы функция сработала как надо, ей нужно передать какие-то данные. Причем при разных вызовах эти данные могут различаться. В таком случае можно создать функцию с параметрами:
- при создании функции описать, что она будет получать на входе — какие-то переменные с любым удобным разработчику именем;
- при вызове указывать в круглых скобках значения аргументов, фактических значений, которые будут передаваться в функцию. Это могут быть числа, строки, объекты и так далее.
Например, функция multiply умножает заданное число на 2. Чтобы она могла каждый раз получать новое число, при создании функции указывают параметр number: function multiply(number). Это значит, что на вход функция будет получать какой-то number и иметь возможность с ним работать. А при вызове вместо number будут писать в скобках нужное число или переменную. Например, так: multiply(2) или multiply(myMoney). 2 и myMoney — аргументы, которые передаются в параметр.
Получать значения. Функция может возвращать в основную программу какой-то результат, и с ним можно работать: записывать в переменную или использовать в вычислениях. Обычно для возврата используют ключевое слово return, а после него пишут то, что нужно вернуть. Существуют и функции, которые ничего не возвращают, — иногда бывает нужно и такое.
Редактировать. Если изменить описание функции, ее работа поменяется во всех местах, где эту функцию вызывали. Результат тоже изменится.
Как работают функции
Обычно функция работает как бы отдельно от остального кода. Она может пользоваться переменными и объектами, которые есть во внешней части программы, но так делать не рекомендуют: лучше передавать нужную информацию в функцию с помощью параметров.
- Чаще всего при передаче параметра в функцию отправляется копия значения. Это значит, что если внутри функции изменить переданное значение, то во внешнем коде оно останется прежним.
- В некоторых языках программирования разработчик сам может выбрать, что передать в функцию: копию значения или изначальную переменную. Во втором случае, если поменять переданную переменную в функции, она изменится и во внешнем коде.
Внутри самой функции тоже можно создавать переменные и работать с ними. Но эти переменные будут доступны только в функции — получить к ним доступ из внешнего кода нельзя. Можно сказать, что внутреннее содержимое функции «закрыто» от основного кода. Наружу она выдает только то, что указано в return.
Как задают функции
Способы объявить функцию различаются в зависимости от языка программирования. Всего существует несколько основных видов описания:
- декларативное — стандартный вариант, существующий практически во всех языках. Функцию описывают отдельно от других действий, описание начинают со слова function или другого в зависимости от языка. Такая функция не исполняется сразу, а существует как отдельный блок кода и «ждет», пока ее вызовут;
- через выражение — вариант, который распространен в языке JavaScript. Функцию создают прямо внутри какого-то выражения, например a = function… и так далее. Такая функция выполнится сразу после появления, в рамках этого же выражения;
- стрелочное — функцию описывают без ключевого слова function, вместо него используют стрелку =>. У такого описания свой синтаксис, и обычно его применяют для простых функций в одну-две строчки.
Функции-выражения и стрелочные функции могут быть анонимными — то есть для них можно не указывать имя. Анонимные функции нельзя вызвать в коде повторно, но их часто используют, чтобы структурировать программу.
Что такое чистая функция
Существует понятие чистой функции — полностью предсказуемой функции без побочных эффектов. Чистая функция при одинаковых условиях всегда выдает один и тот же результат. На ее работу не влияют внешние условия в коде, и сама она тоже не влияет на внешний код.
Например, если функция просто каждый раз складывает 2+2, ее можно назвать чистой. Правда, практической ценности у такой функции обычно минимум.
На практике часто получается так, что функция взаимодействует с переменными и значениями из внешнего кода. А значит, может их менять. Когда такое происходит, возникают побочные эффекты: разработчик не всегда может отследить, что и где поменяла функция. То есть код становится менее предсказуемым, и его сложнее отлаживать.
Поэтому чистые функции считаются правилом хорошего тона. Чтобы их писать, нужно соблюдать несколько правил:
- стараться, чтобы функция не брала информацию напрямую из внешнего кода;
- передавать нужные функции значения в виде аргументов;
- отслеживать зависимости между данными, чтобы одна информация не могла случайно и непредсказуемо повлиять на другую.
Одними только чистыми функциями обойтись нельзя. Некоторые важные и нужные разработчикам действия просто невозможно реализовать с помощью чистых функций.
- Например, если функция возвращает текущее время или генерирует случайное число, она не сможет постоянно выдавать один и тот же результат — то есть не сможет быть чистой.
- А если функция записывает что-то в файл или читает из него информацию, она общается со внешним окружением — и тоже не является чистой.
Но считается, что, если у разработчика есть возможность написать для какого-то действия чистую функцию — лучше писать чистую. Это упрощает код и облегчает работу с ним в будущем.
Разница между функцией, методом и процедурой
Есть еще два понятия, которые связаны с функциями, — метод и процедура. Это похожие на функции конструкции, но у них есть свои особенности.
Метод. Так называют функцию внутри объекта. Объект — структура данных, которая описывает какую-то сущность: кнопку, предмет в компьютерной игре, запись из базы данных и так далее. У объекта есть свойства и методы.
- Свойства — это переменные, которые описывают объект. Например, вес персонажа, цвет предмета и так далее.
- Методы — это действия, которые объект может выполнять. Скажем, объект «кот» может выполнять действия «бегать», «прыгать», «спать», «есть», «вылизываться» и так далее.
Фактически, методы — это тоже функции. Но они не самостоятельны. Методы привязаны к объекту и выполняются в связке с ним. Даже вызывать их обычно можно, только если обратиться к имени объекта.
Процедура. Это понятие есть не во всех языках программирования. Так называют функцию, которая ничего не возвращает, зато меняет внешнее окружение и переданные ей аргументы. Она по определению не может быть чистой, но в некоторых ситуациях такое поведение тоже бывает нужно — например, процедурой можно оформить ту же запись в файл.
Как начать работать с функциями
Обычно функции изучают в самом начале знакомства с программированием. Это одно из базовых понятий информатики и компьютерных наук. Правила работы с функциями в том или ином языке могут различаться — об этом рассказывают на ранних этапах изучения языка программирования. Просто начните изучать интересный вам язык, и довольно скоро сможете применять функции на практике.
Другие термины на «Ф»
Все термины
0 комментариев