|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.02.2012, 11:27 | #1 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
goto
Сегодня я переписал одну чужую функцию, добавив туда goto, и внезапно понял, что использую этот оператор в среднем раз в 3 месяца. В качестве своего оправдания приведу "до" и "после" :)
Код:
Код:
Код:
Последний раз редактировалось ds.Dante; 28.02.2012 в 14:36. |
28.02.2012, 13:31 | #2 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Я не особо всматривался в Ваш код, но ИМХО есть еще варианты. Вы просматриваете оба случая и когда false и когда _return. Можно попытаться перестроить код так чтобы рассматривать только одну ветвь поиска - например только false. Если false Не выполнится тогда однозначно _return. Но это только взгляд на поверхности (не вдаваясь в суть алгоритма).
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
28.02.2012, 13:43 | #3 |
Дружите с Linq ;)
Форумчанин
Регистрация: 15.10.2008
Сообщений: 822
|
ds.Dante, не вчитываясь в код могу сказать, что использование goto можно заменить retur-ом, не шагать к _return, а сразу делать возврат, можно написать метод, обрабатывающий данные перед возвратом. Лучше такую кракозябру разбить на меньшие функции, с осмысленными названиями... способов море, не всегда все запихнуть в одну функцию-лучгее решение.
Не давай организму поблажки, каждый день тренируй его в шашки..
|
28.02.2012, 14:11 | #4 | ||
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Цитата:
Цитата:
И этому методу придётся передавать все те же самые локальные переменные. Никакой выгоды, только усложнение. Напоминает шахматы: "- а если... -а тогда... -а если... -а тогда..." :) Вообще-то функция получилась небольшая и цельная. Можно даже объединить с GetFreeNumber, который нигде больше не вызывается. Последний раз редактировалось ds.Dante; 28.02.2012 в 14:38. |
||
28.02.2012, 15:02 | #5 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Опишите задачу подробней - Вы разбираете строку? Вкратце алгоритм. Возможно просто стоит его пересмотреть.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 28.02.2012 в 15:08. |
|
28.02.2012, 15:21 | #6 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Работает и ладно. В целом код фиговый. Получился какой-то автомат состояний, но реализованный через одно место. Короче, я бы не трогал, если это работает
|
28.02.2012, 15:34 | #7 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Строка может любого вида из списка:
Код:
Алгоритм я трогать не стал, просто добился читабельности кода и исправил кое-какие косяки. Суть в том, что последовательно "отгрызаем" с краёв отпарсенную часть. Собственно я ошибки старого кода исправил, и больше трогать не стал. Наверняка можно было бы регексы заюзать, просто я в них пока вообще не разбираюсь. Да и не факт, что при следующем рефакторинге я не удалю к чертям весь метод. Последний раз редактировалось ds.Dante; 28.02.2012 в 16:46. |
28.02.2012, 15:37 | #8 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Вариант №2 Пытаться разбить на элементы последную строку (та что qwe{?Number(Next(1))}.txt ) и уже в обычном foreach (!) проверять корректность элементов (на соответствие шаблону). Без goto и наглядно.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
28.02.2012, 16:51 | #9 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Не прокатит со строкой "qwe{?Number(Any(0((}.txt" (нужно выдать ошибку) или "qwe{?Number}.txt" (другое число скобок).
|
28.02.2012, 17:42 | #10 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Все прокатит . Вот и выяснили, что дело не в конкретной функции, а в некоторых пробелах ТС касательно парсинга строк. Уже корректность расстановок скобок - элементарная операция и пишется на раз-два.
Да, это мой вариант будет длинней и состоять из нескольких функций, но по-моему скромному опыту искать ошибку, а тем более править код будет намного проще. но дело естественно за Вами... Да и читая Совершенный код, Вы должны были бы заметить пожелания автора книги разбивать сложные и наверченные функции на более элементарные... ЗЫ. Для получения элементов вида скобки в скобках в скобках и т.д. отлично подходит рекурсия.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 28.02.2012 в 17:55. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Goto | Avvakymova | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 09.05.2011 16:25 |
Оператор GoTo | Dalokoshka | Помощь студентам | 6 | 10.10.2010 15:22 |
goto | Serg12 | Помощь студентам | 12 | 14.06.2010 17:31 |
goto | gagen | Общие вопросы C/C++ | 18 | 05.04.2010 13:24 |
GoTo | Diego__ | Microsoft Office Word | 3 | 13.03.2010 19:55 |