article.title

Что такое функции в программировании, простыми словами

Похоже что вы не нашли ответа на свой вопрос на крупных тематических сайтах о программировании, ничего страшного, надеюсь у меня получится понятнее ответить на него. Как пишут многие авторы, функция это фрагмент кода. Да, это так, но это лишь её представление с помощью средств того или иного языка, но что это по сути ?


Я бы сказал что функция это какое то действие.


  • Фраза: Кошка двигает головой и языком чтобы вылизывать шкурку.
  • Действие: двигает головой
  • Результат: Кошка получает чистую шёрстку.


  • Фраза: Печкин крутит педали велосипеда.
  • Действие: крутит педали
  • Результат: Он перемещается в пространстве


  • Фраза: Лампочка преобразует электрическую энергию в световую.
  • Действие: преобразует энергию
  • Результат: Лампочка излучает свет


Для того чтобы выразить человеческим языком действие, мы используем глагол, поэтому можно сказать что имя функции это аналог глагола,

 “Тело функции” это описание самого процесса действия. а результат это то что она “возвращает”.


Не лишним будет отметить что отличие виртуальных объектов от реальных заключается в том что физические законы на них не действуют, поэтому кошка может вылизывать себя бесконечно, не опасаясь что язык или шерсть сотрутся, или она устанет. (если конечно мы это не “запрограммируем” специально)


Чегоооо ?

Надеюсь такого вопроса у вас не возникло, поэтому продолжаем!


Пример на Javascript:

Создание (или объявление, декларирование функции) - мы описываем то действие которые придумали, и присваиваем действию имя, но пока ещё НЕ ИСПОЛЬЗУЕМ. Мы просто даём знать что оно существует и имеет определённое имя, по которому мы можем её использовать, а заодно то, какие параметры функция принимает в себя и её тело.


function ИмяФункции(список параметров){
Тело функции…
}


Запомните все элементы создания функции:

  1. имя
  2. параметры
  3. тело функции


Синтаксис может быть различным в разных языках программирования, но эти 3 элемента в большинстве случаев останутся на своих местах.

Имя функции обычно является просто словом или фразой (без пробелов).


В круглых скобках перечисляются параметры. Мы говорим что в момент когда эта функция будет использоваться, в неё мы сможем передавать некоторые значения (числа, текст и тд.), которые она сможет использовать в своём теле (на примере лампочки, мы можем передавать например электрический ток).

Параметры необязательны, между скобок можно ничего и не писать вовсе ИмяФункции(){...}.

Тело функции это всё что находится между фигурных скобок {...} , в теле мы можем делать всё что угодно, любой код. Можем создавать новые переменные, создавать и вызывать другие функции, выводить что нибудь в консоль и тд.


Пример из жизни.


Попробуйте представить себе функцию как процесс варки: мы кидаем ингредиенты и ждём какого то блюда на выходе. 

Овощи, вода специи и тд.. это параметры.

Суп это на языке программистов - результат который она возвращает.


Пример



function RideOnBicycle(){
    console.log(“I'm pedaling”)
    console.log(“That's enough!”)
}

Всё что мы тут объявили, это всего лишь что существует функция RideOnBycycle() которая выводит в консоль пару сообщений. При этом в эту “коробку” мы ничего не засовываем, и ничего не вынимаем. Что то происходит внутри неё.

Мы ещё не используем её.


Теперь мы можем её запустить (вызвать):

RideOnBycycle()

Однажды объявив функцию, её можно будет использовать (вызывать) бесконечное количество раз.

В вышестоящем примере, наша коробка ничего не принимала как параметры, и ничего не отдавала (возвращала). То есть мы никак не можем повлиять на ход её выполнения (с помощью параметров), и никакого ответа так же не ждём. Толку от такой функции не много, она совершенно не универсальна.


function RideOnBicycle(rotations){
    let radius = 0.6
    let result = rotation*2*radius* 3.14
    return result
}

Можете заметить, что между круглых скобок появился параметр. Он означает что наша функция примет к сведению те данные которые мы передадим ей в качестве этого одного параметра, и сможет использовать их внутри себя.


В этом случае, мы должны запустить функцию (обратиться к ней, вызвать) уже с каким то значением. А заодно сохранить результат выполнения функции в переменной position.


Например: 

RideOnBicycle(20)
//Можно запустить функцию и так: 
let blabla = 20
let position = RideOnBicycle(blabla)



Внутри фигурных скобок {...}, то есть в теле функции, описываются те действия которые функция должна совершить до того как отдаст какой то результат (или просто закончит свою работу)


В данном случае, сначала создаётся переменная radius - радиус колеса велосипеда и в неё кладётся (присваивается) значение 0.6. 

Она потребуется для расчета расстояния.

Результат (расстояние) получим путём перемножения количества вращения педалей (rotation) и периметра колеса (2*radius* 3.14).

Результат выполнения функции передаётся обратно туда где функция была вызвана (запущена) чтобы впоследствии это значение записать в переменную position.


Важно отметить что хоть внутри функции параметр и имеет имя “rotation” , при запуске функции мы можем использовать напрямую значение (20), или сначала сохранить 20 в какой либо переменной, а потом использовать. Это не имеет значения.

Переменная rotation внутри функции это её локальная переменная, в которую складывается значение пришедшее извне, если бы даже мы вызывали бы функцию и передавали в неё переменную rotation как параметр, то rotation внутри функции и rotation внешний это разные переменные, хотя и они будут хранить одно значение.

То же верно и для пары result - position.


Комментариев пока что ниту, может ты чирканёшь первый, мне будет очень приятно!=)