|
|
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
Расскажите, на каком основании вы принимаете решение поместить какой-то код в функцию/процедуру? Помещаете ли вы код в функцию/процедуру при каких-то обстоятельствах, не смотря на то, что он вызывается только один раз? Если да, то в каких случаях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 12:02 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
Логически обособленный блок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 12:17 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
Основание - если несколько раз вызывается. Если один раз - не помещаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 12:27 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
а таки - объектно-ориентированный стиль требует по-возможно всё заворачивать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 12:58 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
TJ001Расскажите, на каком основании вы принимаете решение поместить какой-то код в функцию/процедуру? Помещаете ли вы код в функцию/процедуру при каких-то обстоятельствах, не смотря на то, что он вызывается только один раз? Если да, то в каких случаях? В детстве, в одной старой книге я читал исключительно удачное описание процесса проектирования. Оно звучало примерно так: допустим, нам нужно написать некую программу, назовём её ДЕНЬГИ. Давайте представим себе, что у нас уже есть компьютер или компилятор, в систему команд которого входит команда ДЕНЬГИ. Тогда ситуация просто великолепна - мы можем написать одну строку и программа готова. Но, к сожалению, такой машины у нас нет, поэтому мы должны подумать, что наша программа должна делать, например: ввести данные, посчитать и выдать результат. Поэтому мы пишем: ВВЕСТИ_ДЕНЬГИ; ПОСЧИТАТЬ_ДЕНЬГИ; РАСПЕЧАТАТЬ_ДЕНЬГИ; К сожалению, таких команд у нас тоже пока нет в распоряжении, поэтому мы должны повторить этот процесс ещё и ещё раз, пока наконец не спустимся на уровень тех задач, которые можем решить имеющимся в распоряжении инструментом. Так вот, важно понимать следующее: программируя, мы формулируем решение задачи на некотором языке. Определяя подпрограмму - мы определяем новое слово (понятие, термин) на этом языке. Это и есть ответ на Ваш вопрос: подпрограмма выделяется тогда, когда удобно и разумно определить некий термин. Он может переиспользоваться (ну скажем, как в математике понятие интеграла - позволяет не повторять прорву слов каждый раз), но в принципе не обязан (как в той же математике - чтобы доказать эту теорему, давайте докажем парочку лемм). Важно то, что решение задачи удобно сформулировать с использованием этого нового термина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 13:27 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
ну вот примитивный пример: при нажатии на кнопку проведения документа выполняется ряд проверок: 1.наличие прав (10 строк) 2.правильность заполнения документа (100 строк) 3.еще что-то, что сложно объединить по какой-то тематике(50 строк) или при нажатии на кнопку "проверить что-то там..." выполняется: 1.проверка настроек(3 строки) 2.проверка прав (5 строк) 3.еще что-то проверяется (10 строк) 4.выводится сообщение о результатах проверки (вариантов сообщений много, все зависит от результатов проверок) в 1м случае можнно сделать 3 функции для каждого из пунктов Проверить права Проверить правильность Дополнительные проверки а во 2м случае можно: 1.оставить весь код внутри кнопки 2.создать функцию которая все проверит и что-то вернет, результат будет проверен в кнопке и выведено сообщение 3.создать функцию которая все проверит и что-то вернет, создать функцию которая получит результат проверки, сформирует и выведет строку сообщения и еще множество вариаций может быть... какие варианты нравятся и почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 13:35 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
AkinaЛогически обособленный блок. Та же фигня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 13:35 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
kmawОснование - если несколько раз вызывается. Если один раз - не помещаюэто проходит, со временем. правильный ответ: логически обособленный блок, обоснование: блестяще представлено softwarer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 13:53 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
kmawОснование - если несколько раз вызывается. Если один раз - не помещаю Если блок требует отдельного набора переменных, которые не нужны ни выше, ни ниже по тексту, то тоже претендент на выделение в подпрограмму, даже если этот блок вызывается лишь однажды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 13:53 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
egorychkmawОснование - если несколько раз вызывается. Если один раз - не помещаюэто проходит, со временем. правильный ответ: логически обособленный блок, обоснование: блестяще представлено softwarer я думаю, для этого достаточно Код: c# 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 15:19 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
kmawя думаю, для этого достаточно Код: c# 1. 2. 3. на мой взгляд - не всегда если подходить с точки зрения современных сред разработки, то регион - удобная штука, но: не все среды поддерживают свернуть/развернуть регионы и блоки есть масса сред в наше время, которые поддерживают максимум подсветку синтаксиса и никакой навигации через Ctrl+Click и тому подобных удобств и если логический блок не умещается на экран целиком, то есть смысл его вынести в функцию, тогда код читать легче, но нужно не забывать что имя этой функции должно в двух словах полностью отражать то что она делает если функцию кто-то назвал незамысловато - Checking(), то хочется отбить ему руки... чекинг чего или кого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 15:31 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
TJ001ну вот примитивный пример: при нажатии на кнопку проведения документа выполняется ряд проверок: 1.наличие прав (10 строк) 2.правильность заполнения документа (100 строк) 3.еще что-то, что сложно объединить по какой-то тематике(50 строк) или при нажатии на кнопку "проверить что-то там..." выполняется: 1.проверка настроек(3 строки) 2.проверка прав (5 строк) 3.еще что-то проверяется (10 строк) 4.выводится сообщение о результатах проверки (вариантов сообщений много, все зависит от результатов проверок) в 1м случае можнно сделать 3 функции для каждого из пунктов Проверить права Проверить правильность Дополнительные проверки а во 2м случае можно: 1.оставить весь код внутри кнопки 2.создать функцию которая все проверит и что-то вернет, результат будет проверен в кнопке и выведено сообщение 3.создать функцию которая все проверит и что-то вернет, создать функцию которая получит результат проверки, сформирует и выведет строку сообщения и еще множество вариаций может быть... какие варианты нравятся и почему? при нажатии на кнопку запускается функция ОбработкаНажатияНаКнопку тело функции - преимущественно вызов другой функции МодульN_ПроверкаЧегоТоТам (этот МодульN содержит еще много функций) А вот тело последней - или простыня, или набор вызовов более мелких функций, если есть надобность их вызывать еще где-то. Искусство структурирования состоит в том, чтобы свести "уникальные" простыни кода к более "абстрактным" функциям. Если все функции "уникальны" (вызываются один раз) - то это те же яйца что и простыня, только в профиль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 15:43 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
Расскажите, на каком основании вы принимаете решение поместить какой-то код в функцию/процедуру? На основании собственного решения. Помещаете ли вы код в функцию/процедуру при каких-то обстоятельствах, не смотря на то, что он вызывается только один раз? Да. Если да, то в каких случаях? Если принял такое решение. :-) На самом деле вопрос о том, когда надо выделять функцию, а когда не надо, очень сложен. Я бы сказал, что умение правильно делать это является одним из краеугольных навыков хорошего программиста. И тут далеко не всё сводится к каким-то формальным показателям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 16:55 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
Щас вот-вот сюда заглянет настоящий ТруЪ-функциональщик. Он всех смешает с навозом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 17:08 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
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() из функции3(), там же вывел сообщение и на этом все вообще программирование по большому счету субъективно... если стоит задача заменить лампочку, один программер сделает это встав на стул, другой на стол, третий возьмет стремянку, а четвертый позовет соседа 2х метрового роста и тот вкрутит ламбу без всяких вспомогательных средств задача выполнена успешно - лампочка снова горит. кто из них прав? дальше уже начинается религия: один считает, что лампочку нужно менять исключительно с использованием стремянки, потому что это специальный инструмент, предназначенный для того чтобы достать "недоставаемое" а другой будет утверждать что стремянку надо покупать и не у каждого она есть, а стул есть везде третий скажет что со стула можешь и не достать, а со стола наверняка! четвертый пошлет всех нафиг и будет продолжать пользоваться услугами соседей вот как-то так :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 17:33 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
Даже если мы возьмем конкретный кейс то у двух разрабов будут разные взгляды как реализовать вызовы функций но не потому что один из них прав а другой не прав а просто один решает "текущую задачу" а другой "смотрит в перспективу" проекта. Второй видит дальше. Вот и попробуйте формализовать оба подхода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 17:40 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
TJ001хочется услышать мнения и предпочтения А чем они Вам помогут? Cоберёте статистику типа 38% за, 62% против, и что с ней будете делать? TJ001мне периодически приходится спорить с человеком, который очень любит Хм. Есть такой неформальный, но очень удобный критерий - отдельным объектом (функцией) стоит делать то, чему легко дать осмысленное имя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 17:54 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
softwarerчто с ней будете делать? возможно придти к выводу что я ошибаюсь и исправиться или наоборот, укрепить свое убеждение :) softwarerЕсть такой неформальный, но очень удобный критерий - отдельным объектом (функцией) стоит делать то, чему легко дать осмысленное имя. безусловно! :) но бывает так, что из куска кода нужно сделать функцию ибо он будет вызываться из надцати мест, но никак не можешь дать ему адекватное имя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 18:05 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
TJ001но бывает так, что из куска кода нужно сделать функцию ибо он будет вызываться из надцати мест, но никак не можешь дать ему адекватное имя Не уверен. Имхо такие случаи означают "надо сдизайнить код по-другому, получше". Возможно, из этого куска кода надо сделать две-три функции, или, например, включить его в базовый класс, кастомизируемый в наследниках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 18:07 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
У меня чаще возникали обратны задачи. Детектировать антипаттерн дублирующийся код в месиве функций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 18:08 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
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() из функции3(), там же вывел сообщение и на этом все :) ну и что - а если это заготовки и потом функция2 и функция3 будут дописываться много и разно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 18:09 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
kmawОснование - если несколько раз вызывается. Если один раз - не помещаю если есть вероятность повторного использования, логически обособленного. но тут допустим - позже выяснилось, что во втором варианте использования чуть изменились условия, и нужно - почти такое же. Вносить это в логику, или клонировать процедуру? Вот этический вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 18:25 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
ну и да - если приходится делать клон процедурки, она пилится на логические куски, и два клона собираются из отдельных кубичков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 18:26 |
|
||
|
Этика программирования: Что может являться основанием для создания функции/процедуры?
|
|||
|---|---|---|---|
|
#18+
устранишь бывает все дубли. А система хрупкой получится. При внесении изменений в низкоуровневую процедурку неизвестно сколько высокоуровневых пострадают. Иногда "все свое ношу с собой" - тоже хорошо. дублирование кода - не абсолютное, а относительное зло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 18:30 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38222466&tid=1341851]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
198ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 513ms |

| 0 / 0 |
