Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.28.197] |
|
Страницы: (32) « Первая ... 8 9 [10] 11 12 ... 31 32 ( Перейти к последнему сообщению ) |
Сообщ.
#136
,
|
|
|
Цитата Славян @ Мешает то, что эти два цикла и так по сути оформлены в функцию. Плюс вагон переменных, кои засылать в функцию равносильно заново написать примерно такую же. Значит стоит пересмотреть архитектуру проекта, и переписать правильно. У тебя функция ничего не принимает, судя по троеточиям - ты часть кода упустил, значит функцию можно разгрузить - вынеся эти циклы в отдельную функцию. Примерно такую же ты не напишешь, т.к. эта функция будет вызывать другу, а значет это будут уже две разные функции по смыслу. Добавлено Можно даже вынести вот этот участок кода в отдельную функцию: if( ... ) terVer[2][5] *= ...; // испытываем воздействие if( count1[15] + (int)pow(terVer[3][4] + terVer[2][5], pokaz) > count1[2] ) // опасное положение! if( superVertical[2]<3 ) // мат нам грядёт goto LBL_matPrideHanaBude;//тут будет return какоето значение. Передавая в нее row и col, а уже внутри нее делать конкретные сравнения что там с чемто. Если у тебя очень много переменных в алгоритме используется, возможно стоит сгруппировать их в структуру или класс. |
Сообщ.
#137
,
|
|
|
Цитата KILLER @ Ну так и получится костыль вида:значит функцию можно разгрузить - вынеся эти циклы в отдельную функцию. int SomeStrangeFunction(...) { ... return p; } ... Добавлено Цитата KILLER @ Ну так это ж тоже костыль: для одной функции городить особый класс.Если у тебя очень много переменных в алгоритме используется, возможно стоит сгруппировать их в структуру или класс. Цитата KILLER @ Ну так мы, фактически, и будем заниматься написанием такой же функции, из которой выносим. Короче, костыль на костыле. Передавая в нее row и col, а уже внутри нее делать конкретные сравнения что там с чемто. |
Сообщ.
#138
,
|
|
|
Цитата Славян @ Ну так это ж тоже костыль: для одной функции городить особый класс. Почему костыль? Кто тебе такое сказал? Цитата Славян @ Ну так и получится костыль вида: Почему это костыль? Цитата Славян @ Ну так мы, фактически, и будем заниматься написанием такой же функции, из которой выносим. Короче, костыль на костыле. Так я же выше писал - проще все писать в функции main, по сути ты занимаешься написанием такой же функции, из которой выносишь, когда разбиваешь код на классы и функции. В итоге по твоей логике - классы/структуры/функции(кроме main) - по сути один большой костыль. Так ведь? Добавлено Цитата Славян @ Но замечание OpenGL'я мне показалось более полезным в возражении вам. Это было не замечание. А всего лишь фантазия, призванная оправдать использование goto. Добавлено Ну это как знаешь пиндосы любят придумывать - "вот смотрите, у меня в руках пробирка с какой то херней, поэтому срочно нужно вводить войска в Ирак". Вот так и тут. Сам придумал проблему, сам привел ее в качестве аргумента. Неужто выход из двойного цикла такая редкая задача? Не думаю, очень часто встречается, и я , другие обходятся както без goto. |
Сообщ.
#139
,
|
|
|
Цитата KILLER @ Потому что получается, что данные надо зачем-то группировать, а группу обзывать, а это лишние обозначения, замусоривающие код. То бишь - костыль. Почему костыль? Кто тебе такое сказал? Цитата KILLER @ Как и выше: лишняя функция, лишнее название.Цитата Славян @ Почему это костыль?Ну так и получится костыль вида: intSomeStrangeFunction(...) Цитата KILLER @ Ну я вот только что глянул исходники винды - и там вагоны goto. И ведь не сказать же, что примитивные программисты написали. Так что это не оправдание, а просто обращение внимания на самые разные случаи. А всего лишь фантазия, призванная оправдать использование goto. |
Сообщ.
#140
,
|
|
|
Цитата Славян @ Потому что получается, что данные надо зачем-то группировать, а группу обзывать, а это лишние обозначения, замусоривающие код. То бишь - костыль. Действительно. Выходит 99% пишут тупой говнокод используя классы и структуры, в том числе разработчики компиляторов. В общем все 3.14дарасы а ты один дартаньян. Я понял твою логику. Цитата Славян @ Как и выше: лишняя функция, лишнее название. Что значит лишняя функция? О чем ты? Цитата Славян @ Ну я вот только что глянул исходники винды - и там вагоны goto. О еще один. Смотри вон у вовы - 100 000 строк кода в функции main, значит в этом ничего плохого нет? Цитата Славян @ И ведь не сказать же, что примитивные программисты написали. Это еще почему? Примитивные и пишут такой код. Возьми тот же MFC - быдло подела, быдлокодеров. Цитата Славян @ Так что это не оправдание, а просто обращение внимания на самые разные случаи. Это оправдание своей лени, либо своего бессилия. Когда ты не можешь придумать ничего лучше, чем впихнуть goto, это прямо говорит о твоем бессилии выдать удобочитаемый качественный код. |
Сообщ.
#141
,
|
|
|
Холивары какие-то идиотские идут... Вроде как активность какая-то, а никакого желания присоединиться не возникает.
|
Сообщ.
#142
,
|
|
|
Цитата KILLER @ Классы (да и функции) нужно делать так, чтобы их появление было естественным, а лучше - частым, дабы оправдывать их название и вынос за main. А вы пытаетесь всё в одну кучу городить. Зачем? Верно D_KEY заметил:Действительно. Выходит 99% пишут тупой говнокод используя классы и структуры, в том числе разработчики компиляторов. В общем все <цензура> а ты один дартаньян. Я понял твою логику. Цитата D_KEY @ Холивары какие-то идиотские идут... |
Сообщ.
#143
,
|
|
|
Цитата Славян @ Классы (да и функции) нужно делать так, чтобы их появление было естественным, а лучше - частым, дабы оправдывать их название и вынос за main. Зачем что то выносить из main, если: Цитата Славян @ лишняя функция, лишнее название. Цитата Славян @ данные надо зачем-то группировать, а группу обзывать, а это лишние обозначения, замусоривающие код. То бишь - костыль. Цитата Славян @ для одной функции городить особый класс. Цитата Славян @ Ну так мы, фактически, и будем заниматься написанием такой же функции, из которой выносим. Короче, костыль на костыле. ??? Цитата Славян @ Верно D_KEY заметил: Он тебя и имел ввиду. Ты еще не понял? Не я же тут чушь несу Добавлено Славян, твои "аргументы" лишены всякого смысла. Добавлено Вот ежели бы ты код показал - вот смотри, вот goto тут рулит, а без него - будет полный оцтой и вообще без него тебе дороже будет, чем с ним. Тогда да. Но такого аргумента не будет по определению, темболее от тебя. Потому что goto - сам по себе является костылем. |
Сообщ.
#144
,
|
|
|
Вот-вот. Прикол в том, что выйти-то можно и без goto, нагородив вагон дополнительных условий и булевых переменных, чем на каждой итерации нагревая бедный ARM на планшете и съедая ему батарейку, а вот попробуй войди без goto. Тоже можно, доказано, но я бы руки в узел автору завязал за такой структурный фанатизм.
|
Сообщ.
#145
,
|
|
|
Цитата Qraizer @ Вот-вот. Прикол в том, что выйти-то можно и без goto, нагородив вагон дополнительных условий и булевых переменных, чем на каждой итерации нагревая бедный ARM на планшете и съедая ему батарейку, а вот попробуй войди без goto. Тоже можно, доказано, но я бы руки в узел автору завязал за такой структурный фанатизм. Так зачем входить во вложенный цикл минуя предыдущие? Добавлено Цитата Qraizer @ Прикол в том, что выйти-то можно и без goto, нагородив вагон дополнительных условий и булевых переменных, чем на каждой итерации нагревая бедный ARM на планшете и съедая ему батарейку Мда, как же сложно то все... |
Сообщ.
#146
,
|
|
|
Цитата KILLER @ Мы выносим f(x), если её описание длинно, а пользоваться ею придётся не раз, скажем. Аналогично с классами (POINT и т.п.). А вот выносить из функции функцию лишь бы не было goto - однократное занятие, потому и искусственное, а значит - неправильное. Зачем что то выносить из main, ... |
Сообщ.
#147
,
|
|
|
Цитата KILLER @ Это не религия, 2 вложеных цикла - еще терпимо и нормально, а три и более - запутывают читающего код, а если там еще и goto, то и вовсе сбивает с толку. Если тебе так нужно запилить три цикла вложеных с возможностью выхода из третьего, оформи их в отдельную функцию/метод и ливай по return из них. Какие проблемы? Я видел функции по 5 тысяч строк кода - это читать не возможно в принципе, там и по три вложеных цикла было и по четыре. Как по мне, лучше сделать несколько мелких функций, чтобы было понятно и прозрачно, чем шаманить трехэтажные циклы. Это свойство ограниченности человеческого разума. Внимательно можно прочесть только половину страницы А4, если текст длиннее, такую служебную записку "не осознают". И это опять точка зрения рефакторинга, когда код имеет свою собственную ценность сам по себе. Это не всегда верно. Но в целом я согласен. Если блок кода {} виден на экране (стандартный текстовый режим в 25 строк), то рефакторится блестяще, два экрана - хорошо, три - нормально, четыре - терпимо, пять... Уже временные затраты на осознание того где именно и что нужно изменить перевешивают время на структурирование и переразбивку на функции. Но это опять же точка зрения рефакторинга. Цитата KILLER @ Вообще писать можно как угодно и что угодно. Ну вот возьмет чел, напишет свою прогу в 100 000 строк тупо в функции Main, и она будет работать. Что он неверно сделал? Да все он верно сделал. Какое вам дело до того как он пишет? Религия чтоль не позволяет 100 000 строк в функции main запилить? Вот так вот и выглядят ваши аргументы со стороны. А на деле, эта религия мне помогает избежать кучи ошибок, и когда я открываю свой код через год - то я сходу понимаю что там написано. В отличии, если бы там были трехэтажные циклы и метки - такой код открываешь через месяц и начинаешь репу чесать и заного изучать что же я там имел ввиду - делая такие нетривиальные телодвижения. Плюс ко всему, есть мнение, что чем больше у тебя будет осознанных слов в проге - тем легче она будет восприниматься и читаться. В случае с трехэтажными циклами - их меньше, и можно легко запутаться, никто не будет называть счетчик больше 5-6 букв, особенно если он часто используется в теле цикла. С функциями эта проблема решаема, т.к. мало кто называет функции в 1-2 буквы. И программа становится более читабельной. Это опять же точка зрения рефакторинга, то есть, повторного использования кода. Я писал проги в 200000 строк за 10 минут с использованием CASE технологий (двухкилобайтный скриптик на PL/SQL создавал многомегабайтный абсолютно безупречный и безошибочный python код, не требующий вообще никакого рефакторинга, поиска багов и тем более каких-либо собственных модификаций, в стиле GW-BASIC - сплошная функция main). Правда, по ходу выяснились ограничения python 2.7.x под Win7 - он не мог осилить такой файл. Это было смешно. Пришлось нарезать кусками строк по 40000, тогда скушал. И тут совершенно непринципиально как называются переменные. Потому что вообще не требуется рефакторинг. Одноразовый код. Так что все условно. И в конкретном частном случае все может быть совсем по-другому... |
Сообщ.
#148
,
|
|
|
Цитата Славян @ Мы выносим f(x), если её описание длинно, а пользоваться ею придётся не раз, скажем. Ну а если у тебя функция длинная предлинная, а выносишь ты то, что будет использованно ровно 1 раз, то и выносить незачем? Цитата Славян @ А вот выносить из функции функцию лишь бы не было goto - однократное занятие, потому и искусственное, а значит - неправильное. Конечно не правильное, если ты будешь выносить из функции функцию лишь бы не было goto. Правильно не использовать goto, а выносить код в отдельную функцию для того - чтобы повысить читабельность кода. Я когда пишу, я не думаю как бы мне вот тут избавится от goto, поэтому по таким причинам код в отдельную функцию никогда и не выношу. А вот вынести код в отдельную функцию чтобы повысить читабельность - не проблема. Пусть даже эта функция в одном месте будет заюзана. Глядишь со временем и в другом месте пригодится. Добавлено Цитата p1qb0d @ Это опять же точка зрения рефакторинга, то есть, повторного использования кода. Я писал проги в 200000 строк за 10 минут с использованием CASE технологий (двухкилобайтный скриптик на PL/SQL создавал многомегабайтный абсолютно безупречный и безошибочный python код, не требующий вообще никакого рефакторинга, поиска багов и тем более каких-либо собственных модификаций, в стиле GW-BASIC - сплошная функция main). Правда, по ходу выяснились ограничения python 2.7.x под Win7 - он не мог осилить такой файл. Это было смешно. Пришлось нарезать кусками строк по 40000, тогда скушал. Не ври, ты написал двухкилобайтный скриптик который что то там создавал, а не прогу в 200000 строк за 10 минут. Я тоже могу сказать что я писал 100500 строк кода за 30 секунд, тупо создал MFC проект - и у меня все сгенерилось. А чо? Не нужно путать мягкое с теплым. |
Сообщ.
#149
,
|
|
|
Цитата KILLER @ Да, незачем. Ну а если у тебя функция длинная предлинная, а выносишь ты то, что будет использованно ровно 1 раз, то и выносить незачем? Цитата KILLER @ Читабельность от разных непонятных функций не растёт, а наоборот - падает. Вот нет никакого смысла в той моей функции:Правильно не использовать goto, а выносить код в отдельную функцию для того - чтобы повысить читабельность кода. Цитата Славян @ А её пришлось городить, так как вы захотели от goto избавиться. int SomeStrangeFunction(...) { ... return p; }... Цитата KILLER @ Ну значит мы с вами просто по-разному смотрим на код. Бывает! Пусть даже эта функция в одном месте будет заюзана. Глядишь со временем и в другом месте пригодится. |
Сообщ.
#150
,
|
|
|
Цитата Славян @ Да, незачем. И пусть у меня функция будет на 5 тысяч строк - верно все? Цитата Славян @ Читабельность от разных непонятных функций не растёт, а наоборот - падает. Если они используются? Если да, то кто тебе такое сказал? Цитата Славян @ от нет никакого смысла в той моей функции: Конкретно вот в этой - вообще никакого смысла нет. Какие то три точки и возвращается непонятная переменная Цитата Славян @ Ну значит мы с вами просто по-разному смотрим на код. Бывает! А вы когда нибудь в своей жизни рефакторили большой код? Ну скажем там проект состоящий из 100 исходных файлов, хотя бы!!! Даже пусть будет не 100, а хотя бы 20цаточка? |