|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||||||
Холивар темы: Может ли быть спагетти-код не на основе goto?05.05.2025, 08:43. Показов 6166. Ответов 149
Метки нет (Все метки)
2автор: для начала нужно определиться, пишешь для себя или для некоего коллектива. Если для коллектива, то без вариантов нужно писать так как принято в профессиональных сообществах как бы вам там что-то не нравилось. А если пишете для себя, то пишите так как нравится лично вам, не издевайтесь над собой. Например совет про разбивку метода на несколько подметодов не имеет особого смысла если это не что-то повторяемое, как раньше говорили - функция. На читаемость это абсолютно никак не влияет, скорее наоборот, потому что вы или читаете последовательно действия или прыгаете от метода к методу. Ограничение метода какими-то строками или экранами это вообще ересь. Метод должен быть ровно такой какой он и должен быть, лично вы вообще на это никак не повлияете, то что вы его расфигачите на 100500 подметодов абсолютно никак не повлияет ни на скорость ни на его читаемость. Лично сам я люблю сокращать текст кода, писать его по возможности плотнее, но не для читаемости (читаемость как раз ухудшается). Просто я люблю плотный код и делаю я это только тогда, когда работа над методом закончена и что-то исправлять я не планирую. Как бы всё красиво не звучало, но вы нигде не найдёте единого мнения о том как же именно лучше всего оформлять код. Я иногда вставляю код с этого форума от "великих знатоков ООП" на других ресурсах и этот код обсирают ровно так же, как мой код здесь. Так что угодить всем-всем-всем вы всё равно не сможете. Но можно конечно выбрать для себя например оформление MSDN и работать строго в этом векторе, хотя вам часто так же будут говорить про индусский код, о котором вы и пишете в этой теме. goto - это не оператор говна, это такой же инструмент как if или for, главное тут уместность его применения. У меня изредка он бывает, в основном для выхода из вложенных циклов или когда сильно проще просто воткнуть goto на время разработки, не вижу как именно goto повлияет на читаемость, ведь вызов любой функции это точно такой же goto (если возвращаться к Бейсику, то это GOSUB), и вам тут же в этой теме совершенно нормально пишут что читаемость кода с кучей методов вдруг становится лучше, непонятно почему вызов метода это хорошо а переход по goto - это уже плохо. И в любом случае в ассемблере все ветвления так или иначе сделаны через goto, которых заметно больше, так как там скорее конструкции (IF условие GOTO). Любая итерация цикла это goto, просто не явный. И какую бы книжку вы не читали всегда есть вероятность что её или не читали другие или они не разделяют те же принципы что там описаны.
0
|
|||||||
| 05.05.2025, 08:43 | |
|
Ответы с готовыми решениями:
149
Спагетти код ??? С# vs vb.net Холивар или нехватка знаний? |
| 05.05.2025, 09:10 | |
|
0
|
|
|
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,018
|
||
| 05.05.2025, 13:37 | ||
|
0
|
||
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
|
||
| 05.05.2025, 14:26 | ||
|
Для выхода из вложенных циклов есть разные тулы: в Rust можно давать циклу label, и делать break указывая label. В bash вроде можно указывать break-у число уровней вложенности из которых хочется выпрыгнуть. Внутрення кухня state машин - это да, там goto оправдан.
0
|
||
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
|
||
| 05.05.2025, 15:39 | ||
Чукча там вроде не читатель.. Абзацы, группировка текста, параграфы - это все не для нас...
3
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||||||||||
| 05.05.2025, 15:56 [ТС] | ||||||||||||||||
0
|
||||||||||||||||
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
|
||
| 05.05.2025, 16:06 | ||
|
Видимо, вам не приходилось с такими сталкиваться.
0
|
||
|
14090 / 9308 / 1348
Регистрация: 21.01.2016
Сообщений: 34,962
|
||
| 05.05.2025, 16:10 | ||
|
Не все приложения бывают на три строчки, чтобы всю их логику сидеть читать за чашечкой чая.
0
|
||
|
|
||
| 05.05.2025, 16:25 | ||
|
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||||
| 05.05.2025, 16:30 [ТС] | |||||
|
0
|
|||||
|
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,018
|
||
| 05.05.2025, 16:31 | ||
|
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|
| 05.05.2025, 16:32 [ТС] | |
|
0
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 05.05.2025, 16:35 [ТС] | ||
|
0
|
||
|
|
|||||
| 05.05.2025, 16:36 | |||||
|
0
|
|||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||
| 05.05.2025, 17:06 [ТС] | |||
|
a=1; b=1; c=1; Хотят делать SetA(1); SetB(1); SetC(1); И вот то что выше - это ОДИН метод, разбитый на части, а не вся программа.
0
|
|||
|
|
||
| 05.05.2025, 17:28 | ||
goto, которые как раз ни к чему не привязаны, просто метки, с чего и начался весь топик. Вот по ним реально замаешься прыгать и понимать логику этих прыжков. А на метод поставил курсор, нажал F12 и ты в теле метода, любая IDE позволяет это сделать. Он не цитировал ваши измышления.
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||
| 05.05.2025, 17:38 [ТС] | |||
|
0
|
|||
|
|
|||||||||||||||||
| 05.05.2025, 17:57 | |||||||||||||||||
|
В своей практике на первой работе имел опыт разгребания одного единственного метода на много строк. Он был "сложным", к нему имелась неочевидная документация и я потратил кажись неделю на то чтобы понять что он делает и как мне поправить логику на необходимую по ТЗ. Да, я был тем ещё нубом, но тот факт что метод был сплошным полотном очень сильно бил по восприятию. И такое дело -- желающих помочь почему-то не находилось.
------------------------------------------------------ Окей, возьмём что-то практическое и относительно распространённое: инициализация и старт хоста. Данное действие подразумевает три этапа: - вычитка и задание конфигов - указание зависимостей - непосредственно build & run Всё это можно запихнуть в метод Main, при этом первые два этапа можно делать в разнобой и в любом порядке. Дальше есть все шансы получить такой результат: - чела, что руководил кодовой базой, похищают инопланетяне (уходит в другую контору, переводиться на другой проект и ещё 100500 причин, по которым он становиться недоступен) - новый сотрудник начинает копать код. Видит простыню, где сначала задается конфиг БД, потом пачка привязок случайных классов/сервисов, потом задание конфигурации временных файлов, опять привязки, опять рандомные конфиги для сервиса рассылки отчетности, опять привязки.... - разбирает модуль рассылки отчетности. Конфиги в целом найти будет не сложно (если их хотя бы позаботились объединить в одну модель). Но вот глянуть зависимости... Вместо того чтобы в отдельном окне открыть один(!) метод, в котором будет выполняться, он будет прыгать по коду, чтобы понять какие вещи за какую реализацию отвечают и в каком порядке. Потому как может быть один интерфейс плана IMessageFactory и 100500 его реализаций. - бонусом меняя логику для модуля, мы меняем код одного общего метода, что выливается в АДСКИЙ МЕРЖ. (Кстати -- это хороший аргумент и для обычной разработки. Меняя логику в одном месте, если она упакована в метод/класс, то сразу вылезет внешняя зависимость, что предотвращает непонимание "а чего поменял в одном месте, а упало в другом"). Для конкретного примера не актуально, но при написании тестов, проще захаркодить и проверить десяток простых методов, чем один сложный. А теперь вопрос, насколько сложнее записать так?
Ладно, пример с хостом сложный для понимания, если этот хост никогда не писал. Допустим мы пишем кастомный List<T>, которому мы хотим указать что нужно выполнять бинарный поиск по указанному свойству объекта. И у нас примитивная реализация через отсортированный массив. Конструктор такого класса может выглядеть так:
Добавлено через 6 минут Когда есть отдельный метод, то ориентируешься по входным параметрам и всем переменным в нём, что очень сильно разгружает необходимость держать в голове весь остальной код выше.
2
|
|||||||||||||||||
| 05.05.2025, 17:57 | |
|
Помогаю со студенческими работами здесь
20
Какие альтернативы goto можете предложить? Чем можно заменить конструкцию On Error GoTo c# и goto goto есть ли такое и как им пользоваться Чрезмерное употребление оператора goto Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|