Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Необходимость одноразовых функций в программе

#функции #любой_язык


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


Ответы

Ответ 1



Разделение ответственности. Функция имеет некое предназначение и оно отделяется от того, что с ним не связано. Например, даже если строку надо привести в верхнему регистру всего один раз, то логично сделать отдельную функцию, которая именно это и делает, а не смешивать её с вводом и выводом этой строки. В момент, когда эта функция понадобится снова, её не придётся копипастить или выносить - она уже будет. Чистые функции позволяют запоминать результат вызова в случае, если аргументы не меняются. Да и в другой проект их перенести куда проще. Поэтому может иметь смысл отделять функцию-преобразование от побочных эффектов. Лямбда-функции передаются в другие функции как аргументы, например a.sort((x,y) => x-y). Сама лямбда-функция и так является функцией, но некоторые языки их не поддерживают и приходится писать самостоятельные функции. Упрощение потока кода. Когда из функции выносятся некие участки кода, и её становится проце читать. Например, var height = isFlexible ? calcFlexibleHeight() : calcHeight();, а каждая из вычисляющих функций по 100 строк - получится гораздо удобнее, чем огромный if-else с переменной перед ним. Но тут главное не перестараться - при разбивании на совсем маленькие участки код действительно можно читать как книгу, но вот отлаживать его - это ад. Изолировать область видимости. В некоторых языках скоупом для переменных является функция. Если нужно создать область видимости, то придётся создавать и функцию. Функция main, которая вызывается автоматически при запуске программы. Реализации членов интерфейса - тут уж никуда не деться, если по какой-то причине есть интерфейс и его нельзя менять, то придётся реализовывать.

Ответ 2



Для начала надо разобраться что такое функция. Давайте обратимся к источнику "знаний": Функция в программировании — фрагмент программного кода (подпрограмма), к которому можно обратиться из другого места программы. Теперь будет чисто отсебятина, ключевое в этом тексте(лично для меня) - что функция это подпрограмма, т.е. часть программы выполняющая осмысленное законченное действие. Если судить исходя из этого - есть смысл выделять в функции все участки кода которые сами по себе выполняют некое конечное действие. Допустим даже если нам нужно подсчитать сумму двух векторов в программе всего один раз - будет хорошим тоном выделить это в отдельную функцию. Далее выделение частей кода в осмысленные функции - улучшает читаемость кода, даже если функция вызывается один раз. Это не полный набор плюсов, но минусов(при правильной реализации) очень мало в современных реалиях. Дабы совсем о них не умолчать приведу два известных мне: Небольшой оверхед на перескок(call) Накладные расходы на сохранение\восстановление стека. p.s. Небольшое дополнение - многие современные ЯП умеют определять "оптимальность" выноса кода в функцию и в итоге в скомпилированном виде - вызов функции заменяется на вставку этого кода в место вызова. т.е. в исходниках у вас функция, а в бинарнике - функции как бы и нету.

Комментариев нет:

Отправить комментарий