powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Этика программирования: Что может являться основанием для создания функции/процедуры?
25 сообщений из 40, страница 1 из 2
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38221544
TJ001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расскажите, на каком основании вы принимаете решение поместить какой-то код в функцию/процедуру?

Помещаете ли вы код в функцию/процедуру при каких-то обстоятельствах, не смотря на то, что он вызывается только один раз? Если да, то в каких случаях?
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38221579
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логически обособленный блок.
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38221607
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основание - если несколько раз вызывается. Если один раз - не помещаю
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38221667
Фотография AlexandrPlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а таки - объектно-ориентированный стиль требует по-возможно всё заворачивать
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38221728
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TJ001Расскажите, на каком основании вы принимаете решение поместить какой-то код в функцию/процедуру?

Помещаете ли вы код в функцию/процедуру при каких-то обстоятельствах, не смотря на то, что он вызывается только один раз? Если да, то в каких случаях?
В детстве, в одной старой книге я читал исключительно удачное описание процесса проектирования. Оно звучало примерно так: допустим, нам нужно написать некую программу, назовём её ДЕНЬГИ. Давайте представим себе, что у нас уже есть компьютер или компилятор, в систему команд которого входит команда ДЕНЬГИ. Тогда ситуация просто великолепна - мы можем написать одну строку и программа готова. Но, к сожалению, такой машины у нас нет, поэтому мы должны подумать, что наша программа должна делать, например: ввести данные, посчитать и выдать результат. Поэтому мы пишем:

ВВЕСТИ_ДЕНЬГИ;
ПОСЧИТАТЬ_ДЕНЬГИ;
РАСПЕЧАТАТЬ_ДЕНЬГИ;

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

Так вот, важно понимать следующее: программируя, мы формулируем решение задачи на некотором языке. Определяя подпрограмму - мы определяем новое слово (понятие, термин) на этом языке. Это и есть ответ на Ваш вопрос: подпрограмма выделяется тогда, когда удобно и разумно определить некий термин. Он может переиспользоваться (ну скажем, как в математике понятие интеграла - позволяет не повторять прорву слов каждый раз), но в принципе не обязан (как в той же математике - чтобы доказать эту теорему, давайте докажем парочку лемм). Важно то, что решение задачи удобно сформулировать с использованием этого нового термина.
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38221741
TJ001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вот примитивный пример:
при нажатии на кнопку проведения документа выполняется ряд проверок:
1.наличие прав (10 строк)
2.правильность заполнения документа (100 строк)
3.еще что-то, что сложно объединить по какой-то тематике(50 строк)

или при нажатии на кнопку "проверить что-то там..." выполняется:
1.проверка настроек(3 строки)
2.проверка прав (5 строк)
3.еще что-то проверяется (10 строк)
4.выводится сообщение о результатах проверки (вариантов сообщений много, все зависит от результатов проверок)

в 1м случае можнно сделать 3 функции для каждого из пунктов
Проверить права
Проверить правильность
Дополнительные проверки

а во 2м случае можно:
1.оставить весь код внутри кнопки
2.создать функцию которая все проверит и что-то вернет, результат будет проверен в кнопке и выведено сообщение
3.создать функцию которая все проверит и что-то вернет, создать функцию которая получит результат проверки, сформирует и выведет строку сообщения

и еще множество вариаций может быть...

какие варианты нравятся и почему?
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38221742
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaЛогически обособленный блок.
Та же фигня.
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38221760
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawОснование - если несколько раз вызывается. Если один раз - не помещаюэто проходит, со временем. правильный ответ: логически обособленный блок, обоснование: блестяще представлено softwarer
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38221761
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawОснование - если несколько раз вызывается. Если один раз - не помещаю
Если блок требует отдельного набора переменных, которые не нужны ни выше, ни ниже по тексту, то тоже претендент на выделение в подпрограмму, даже если этот блок вызывается лишь однажды.
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38221964
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychkmawОснование - если несколько раз вызывается. Если один раз - не помещаюэто проходит, со временем. правильный ответ: логически обособленный блок, обоснование: блестяще представлено softwarer

я думаю, для этого достаточно
Код: c#
1.
2.
3.
#region логически обособленный блок N
...
#endregion
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222019
TJ001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawя думаю, для этого достаточно
Код: c#
1.
2.
3.
#region логически обособленный блок N
...
#endregion


на мой взгляд - не всегда
если подходить с точки зрения современных сред разработки, то регион - удобная штука, но:
не все среды поддерживают свернуть/развернуть регионы и блоки

есть масса сред в наше время, которые поддерживают максимум подсветку синтаксиса и никакой навигации через Ctrl+Click и тому подобных удобств

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

если функцию кто-то назвал незамысловато - Checking(), то хочется отбить ему руки... чекинг чего или кого?
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222055
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TJ001ну вот примитивный пример:
при нажатии на кнопку проведения документа выполняется ряд проверок:
1.наличие прав (10 строк)
2.правильность заполнения документа (100 строк)
3.еще что-то, что сложно объединить по какой-то тематике(50 строк)

или при нажатии на кнопку "проверить что-то там..." выполняется:
1.проверка настроек(3 строки)
2.проверка прав (5 строк)
3.еще что-то проверяется (10 строк)
4.выводится сообщение о результатах проверки (вариантов сообщений много, все зависит от результатов проверок)

в 1м случае можнно сделать 3 функции для каждого из пунктов
Проверить права
Проверить правильность
Дополнительные проверки

а во 2м случае можно:
1.оставить весь код внутри кнопки
2.создать функцию которая все проверит и что-то вернет, результат будет проверен в кнопке и выведено сообщение
3.создать функцию которая все проверит и что-то вернет, создать функцию которая получит результат проверки, сформирует и выведет строку сообщения

и еще множество вариаций может быть...

какие варианты нравятся и почему?

при нажатии на кнопку запускается функция ОбработкаНажатияНаКнопку
тело функции - преимущественно вызов другой функции МодульN_ПроверкаЧегоТоТам (этот МодульN содержит еще много функций)
А вот тело последней - или простыня, или набор вызовов более мелких функций, если есть надобность их вызывать еще где-то.

Искусство структурирования состоит в том, чтобы свести "уникальные" простыни кода к более "абстрактным" функциям. Если все функции "уникальны" (вызываются один раз) - то это те же яйца что и простыня, только в профиль
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222286
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расскажите, на каком основании вы принимаете решение поместить какой-то код в функцию/процедуру?

На основании собственного решения.

Помещаете ли вы код в функцию/процедуру при каких-то обстоятельствах, не смотря на то, что он вызывается только один раз?

Да.

Если да, то в каких случаях?

Если принял такое решение. :-)


На самом деле вопрос о том, когда надо выделять функцию, а когда не надо, очень сложен.
Я бы сказал, что умение правильно делать это является одним из краеугольных навыков хорошего программиста.
И тут далеко не всё сводится к каким-то формальным показателям.
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222333
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щас вот-вот сюда заглянет настоящий ТруЪ-функциональщик. Он всех
смешает с навозом.
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222413
TJ001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
шутки-шутками, но вопрос действительно сложный, и самое сложное в нем - субъективность. именно по этой причине я его и задал
вот кагбэ и хочется услышать мнения и предпочтения

мне периодически приходится спорить с человеком, который очень любит функции - делает функцию1, которая вызывает функцию2 из функции3 и вся разница между вызовами в том, что функция2 выводит единственное сообщение на основании результатов функции1 и в качестве своего результата транслирует результат функции1 в вызывавшую ее функцию3

итого имеем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
функия1()
 чего-то там
конец

функция2()
 результат = функция1()

 если результат = 1 тогда
  сообщение()
конец

функция3()
 если функция2() = 1
  выход

 ...
конец



я бы вызвал функцию1() из функции3(), там же вывел сообщение и на этом все

вообще программирование по большому счету субъективно...

если стоит задача заменить лампочку, один программер сделает это встав на стул, другой на стол, третий возьмет стремянку, а четвертый позовет соседа 2х метрового роста и тот вкрутит ламбу без всяких вспомогательных средств
задача выполнена успешно - лампочка снова горит. кто из них прав?

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

вот как-то так :)
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222431
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже если мы возьмем конкретный кейс то у двух разрабов
будут разные взгляды как реализовать вызовы функций но
не потому что один из них прав а другой не прав а просто
один решает "текущую задачу" а другой "смотрит в перспективу"
проекта. Второй видит дальше.

Вот и попробуйте формализовать оба подхода.
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222466
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TJ001хочется услышать мнения и предпочтения
А чем они Вам помогут? Cоберёте статистику типа 38% за, 62% против, и что с ней будете делать?

TJ001мне периодически приходится спорить с человеком, который очень любит
Хм. Есть такой неформальный, но очень удобный критерий - отдельным объектом (функцией) стоит делать то, чему легко дать осмысленное имя.
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222489
TJ001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerчто с ней будете делать?
возможно придти к выводу что я ошибаюсь и исправиться или наоборот, укрепить свое убеждение :)

softwarerЕсть такой неформальный, но очень удобный критерий - отдельным объектом (функцией) стоит делать то, чему легко дать осмысленное имя.
безусловно! :)
но бывает так, что из куска кода нужно сделать функцию ибо он будет вызываться из надцати мест, но никак не можешь дать ему адекватное имя
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222493
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TJ001но бывает так, что из куска кода нужно сделать функцию ибо он будет вызываться из надцати мест, но никак не можешь дать ему адекватное имя
Не уверен. Имхо такие случаи означают "надо сдизайнить код по-другому, получше". Возможно, из этого куска кода надо сделать две-три функции, или, например, включить его в базовый класс, кастомизируемый в наследниках.
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222495
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня чаще возникали обратны задачи. Детектировать антипаттерн дублирующийся код
в месиве функций.
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222497
Фотография AlexandrPlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TJ001мне периодически приходится спорить с человеком, который очень любит функции - делает функцию1, которая вызывает функцию2 из функции3 и вся разница между вызовами в том, что функция2 выводит единственное сообщение на основании результатов функции1 и в качестве своего результата транслирует результат функции1 в вызывавшую ее функцию3

итого имеем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
функия1()
 чего-то там
конец

функция2()
 результат = функция1()

 если результат = 1 тогда
  сообщение()
конец

функция3()
 если функция2() = 1
  выход

 ...
конец




я бы вызвал функцию1() из функции3(), там же вывел сообщение и на этом все

:)

ну и что - а если это заготовки и потом функция2 и функция3 будут дописываться много и разно?
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222529
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawОснование - если несколько раз вызывается. Если один раз - не помещаю
если есть вероятность повторного использования, логически обособленного.
но тут допустим - позже выяснилось, что во втором варианте использования чуть изменились условия, и нужно - почти такое же. Вносить это в логику, или клонировать процедуру?
Вот этический вопрос.
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222532
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и да - если приходится делать клон процедурки, она пилится на логические куски, и два клона собираются из отдельных кубичков.
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222542
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
устранишь бывает все дубли. А система хрупкой получится. При внесении изменений в низкоуровневую процедурку неизвестно сколько высокоуровневых пострадают. Иногда "все свое ношу с собой" - тоже хорошо. дублирование кода - не абсолютное, а относительное зло.
...
Рейтинг: 0 / 0
Этика программирования: Что может являться основанием для создания функции/процедуры?
    #38222551
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для ассемблера развертывание цикла (по сути дублирование тела)
это даже благо. В некоторых условиях.

Инлайнинг функций тоже иногда полезен.
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Этика программирования: Что может являться основанием для создания функции/процедуры?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]