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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

если функцию кто-то назвал незамысловато - Checking(), то хочется отбить ему руки... чекинг чего или кого?
...
Рейтинг: 0 / 0
11.04.2013, 15:43
    #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
11.04.2013, 16:55
    #38222286
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этика программирования: Что может являться основанием для создания функции/процедуры?
Расскажите, на каком основании вы принимаете решение поместить какой-то код в функцию/процедуру?

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

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

Да.

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

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


На самом деле вопрос о том, когда надо выделять функцию, а когда не надо, очень сложен.
Я бы сказал, что умение правильно делать это является одним из краеугольных навыков хорошего программиста.
И тут далеко не всё сводится к каким-то формальным показателям.
...
Рейтинг: 0 / 0
11.04.2013, 17:08
    #38222333
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этика программирования: Что может являться основанием для создания функции/процедуры?
Щас вот-вот сюда заглянет настоящий ТруЪ-функциональщик. Он всех
смешает с навозом.
...
Рейтинг: 0 / 0
11.04.2013, 17:33
    #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
11.04.2013, 17:40
    #38222431
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этика программирования: Что может являться основанием для создания функции/процедуры?
Даже если мы возьмем конкретный кейс то у двух разрабов
будут разные взгляды как реализовать вызовы функций но
не потому что один из них прав а другой не прав а просто
один решает "текущую задачу" а другой "смотрит в перспективу"
проекта. Второй видит дальше.

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

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

softwarerЕсть такой неформальный, но очень удобный критерий - отдельным объектом (функцией) стоит делать то, чему легко дать осмысленное имя.
безусловно! :)
но бывает так, что из куска кода нужно сделать функцию ибо он будет вызываться из надцати мест, но никак не можешь дать ему адекватное имя
...
Рейтинг: 0 / 0
11.04.2013, 18:07
    #38222493
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этика программирования: Что может являться основанием для создания функции/процедуры?
TJ001но бывает так, что из куска кода нужно сделать функцию ибо он будет вызываться из надцати мест, но никак не можешь дать ему адекватное имя
Не уверен. Имхо такие случаи означают "надо сдизайнить код по-другому, получше". Возможно, из этого куска кода надо сделать две-три функции, или, например, включить его в базовый класс, кастомизируемый в наследниках.
...
Рейтинг: 0 / 0
11.04.2013, 18:08
    #38222495
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этика программирования: Что может являться основанием для создания функции/процедуры?
У меня чаще возникали обратны задачи. Детектировать антипаттерн дублирующийся код
в месиве функций.
...
Рейтинг: 0 / 0
11.04.2013, 18:09
    #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
11.04.2013, 18:25
    #38222529
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этика программирования: Что может являться основанием для создания функции/процедуры?
kmawОснование - если несколько раз вызывается. Если один раз - не помещаю
если есть вероятность повторного использования, логически обособленного.
но тут допустим - позже выяснилось, что во втором варианте использования чуть изменились условия, и нужно - почти такое же. Вносить это в логику, или клонировать процедуру?
Вот этический вопрос.
...
Рейтинг: 0 / 0
11.04.2013, 18:26
    #38222532
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этика программирования: Что может являться основанием для создания функции/процедуры?
ну и да - если приходится делать клон процедурки, она пилится на логические куски, и два клона собираются из отдельных кубичков.
...
Рейтинг: 0 / 0
11.04.2013, 18:30
    #38222542
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этика программирования: Что может являться основанием для создания функции/процедуры?
устранишь бывает все дубли. А система хрупкой получится. При внесении изменений в низкоуровневую процедурку неизвестно сколько высокоуровневых пострадают. Иногда "все свое ношу с собой" - тоже хорошо. дублирование кода - не абсолютное, а относительное зло.
...
Рейтинг: 0 / 0
11.04.2013, 18:33
    #38222551
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этика программирования: Что может являться основанием для создания функции/процедуры?
Для ассемблера развертывание цикла (по сути дублирование тела)
это даже благо. В некоторых условиях.

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


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