![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
Все вот говорят, что мол нельзя юзать goto - Небезопасно это.
Но сами юзают switch. Ведь он, по сути пострен на goto принципе. Ваше мнение и что обычно юзаете: switch/case или if/else ? -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
все юзаем
|
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
До обсурда опускаться не будем, ладно? Естественно, что if/else - неотъемлемая часть. Я имею виду, когда у вас некая переменная может иметь несколько значений и вы должны по каждому из них произвести соответствующие действия.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
Rodman |
|
|||
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: нет Всего: 122 |
||||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Юзаю иногда...
Но обычно роль switch-а в моих программах выполняет таблица виртуальных функций |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
Кто - "все" ? Я вот не говорю. Вообще goto редко, но юзаю, ибо есть некоторые моменты, когда с goto самый красивый вариант. То же с switch/case Это сообщение отредактировал(а) GrayCardinal - 25.4.2008, 09:54 |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
Я тоже раньше думал что глобальные переменные - это нормально и ничего зазорного.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
Rickert,
СЛушай, добрый совет забей ты на шаблонное мышление. Тебе надо ? Так пиши хоть goto, хоть глобальные переменные. Вон хлопцы написали Perl 6 (Pugs) на Haskell и сидят - торчат, какие мы крутые, А вы тут про гооту и глобальные переменные ![]() Это сообщение отредактировал(а) GrayCardinal - 25.4.2008, 10:16 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
вообще, самое красивое применение goto я видел в совокупности с применением расширения компилятора gcc
что-то вроде этого
в каждом из stateX state изменяется по определенному алгоритму перепишите ка этот пример без goto ![]() число переходов недетерминировано (т. е мы не знаем сколько раз будет выполняться goto *jumps[state]) Это сообщение отредактировал(а) MAKCim - 25.4.2008, 10:32 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Не нельзя, а нежелательно. А небезопасно потому, что "goto " [goto label1] label4: Поэтому вместо того чтоб его использовать [goto label5] label1: не вкладывается в стиль языка [goto label2] label3: и затрудняет понимание ее же для самого же программиста [goto label4] label2: "давит" конструкцию программы [goto label3] label5: лучше и легче перефрзировать мысль Что вышеперечисленное будет выглядеть без "goto" приятнее, я думаю, спорить не будешь )) Бывают и красивые решения с "goto" - но человек должен хорошо чуствовать что он хочет. A если он знает - то ему запреты и не нужны, но если бы не было бы "запретов" то многие бы вместо того чтоб сформулировать мысль писали бы кучу goto. так и return на том же принципе основон - только ты не в те принципы глядишь. Реализация команд на машинном языке не имеет никакого отношения к принципам высокоуровневого языка . если надо проверить состояния одного объекта то "switch" если другие условия то " if ". Это сообщение отредактировал(а) mes - 25.4.2008, 10:27 |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
Ага, спасибо за совет, я последнии несколько лет его придерживался, пока не понял что за деньги платят.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
+1 ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
не совсем понял что делает этот код. дай угадаю. наверное что-то типа этого:
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Mayk,
я уже не помню, где я это видел (код мой, он просто принцип показывает)
нет это просто динамический конечный автомат Добавлено через 1 минуту и 52 секунды Mayk, в твоем коде каждая итерация влечет за собой большое число проверок условий (число растет пропорционально числу состояний) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
SABROG |
|
||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
А мне из-за шаблонного мышления пришлось отказаться от такого варианта:
к такому
И до сих пор меня терзают смутные сомнения, все время задаю себе вопрос: "На машинном уровне это jmp/loop + dec eax + cmp eax,N. Т.е. 3 долгих операции вместо одного jmp'a... Нафига мне оно надо было ? Из-за шаблонного мышления! |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
1. Никогда не думай, что ты лучше компилятора знаешь какие машинные комманды нужны - если все же лучше то пиши на асме 2. выход из "goto" все равно будет по проверке значения - так что от проверки ты не избавишься 3. в твоем примере воoбше не понятен смысл - но скорей всего ты неправильную конструкцию подобрал раз тебя терзают сомнения )) Добавлено @ 11:05 Так ?
Это сообщение отредактировал(а) mes - 25.4.2008, 11:09 |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Попробую объяснить по памяти. Есть ряд чисел: 1,2,3,2,4,5,1,4 Задача: сгруппировать одинаковые цифры таким образом, чтобы получилось: 1,1 2,2 3 4,4 5 Т.е. объединить одинаковые цифры. Внутри цикла for который выполняется 8 раз на каждую цифру приходится неизвестное количество проходов, неизвестное потому, что мы заранее не знаем какое количество совпадений будет в массиве. Т.е. берем цифру 1 и в цикле goto проходим дальше по всему массиву начиная с 2 до тех пор пока не встретится 1 (предпоследняя). |
|||
|
||||
bsa |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Я бы тоже отказался, заменив на:
И вообще, я против goto ничего не имею, у меня самого есть код:
|
||||||||
|
|||||||||
Mayk |
|
||||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
что нет? покажи полностью небольшой пример когда контструкцию с goto *[] нельзя свести к switch/case.
зависит от оптимизатора компилятора. Некоторые вполне за О(1) перепрыгнут куда надо. Добавлено через 1 минуту и 43 секунды
причем тут goto? это простейшя задача для std::map'а или аналоигчной контсрукции
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||||
|
|||||||
SABROG |
|
||||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
У меня в коде используются continue и break. Я точно не могу сказать что именно произойдет в этой ситуации, если с помощью continue/break я должен управлять циклом for, а не while:
Я логику сократил, чтобы было яснее. На самом деле там массив из неизвестного количества столбцов, если все цифры во всех столбцах совпадают со всеми цифрами в других строках, то эти строки надо объединять. При этом есть еще ряд условий, которые не позволяют объединить цифры в строках, т.к. строки имеют разные ключи. В общем тут ничем кроме как многоэтажными for'aми и if'aми не обойтись.
Соотв строки 1, 4, 6 объединяются. Это сообщение отредактировал(а) SABROG - 25.4.2008, 11:34 |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
|
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Ну вот в том то и дело. Если нет чего-то типа ::continue и ::break, то получается нужен goto вместо while.
|
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
в том случае если состояние является константой на момент компиляции. в приведенных примерах с goto состояние определяется в рантайме
если тебе такое требуется, значит алгоритм выбран не подходяший для задачи, а вообше сложные условия решаются через состояния конечным автоматом. Это сообщение отредактировал(а) mes - 25.4.2008, 11:57 |
||||
|
|||||
baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
по теме: больше 2х if/else наводят на мысль о switch. Кстати, switch может быть построен более эффективно, чем набор if: массив адресов перехода плюс всего одно сравнение и собственно переход. Т.е. фактически тот же jumps, что у MAKCim, только метки не изменяются. Rickert,
|
||||
|
|||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
пипец вы развели, лучше пусть будет жрать больше времени CPU чем времени программиста, разбирающегося в этом коде.
Насчет примера выше, то что написано у Майка просматривается за 3 секунды и приходит понимание. То что написано у Максима,я не понял до сих пор. goto ухудшает восприятие кода. А уж отказываться от свитча, это по моему маразм. Если у переменной много состояний то свитч, если мало то if'ы, я так считаю. |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
неа, если например case-ы - целые значения идущие по порядку, то смещение может быть вычислено вместо проверки всех условий, либо смещение берется из таблицы, либо просто вычисляется. Недаром в синтаксисе языка такие ограничения на аргумент конструкции swtch |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
А меня не наводит из-за ограничения в том, что значение которое сравниваешь должно быть константной:
Да и goto - got'e рознь. В ассемблере мне известны следующие механизмы для перехода по адресам: int'ы - прерывание retn'ы - возврат, при желании можно изменить значения в стеке, чтобы ретурны использовались вместо callов call'ы - тут все понятно, адрес возврата пихается в стек и происходит переход jmp'ы/ja/jz/jb и т.д. - аналогично call'у, разве что one way. loop'ы - условный переход, где условие - значение в регистре cx/ecx. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Никто не советует разбазаривать время CPU, но экономить пару тактов ради того чтоб запутать код определено не стоит. В программирование как в реале не стоит экономить время на не экономном. Что лучше обойти большую лужу или сэкономить две секунды и пройти насквозь? Все зависит от нескольких факторов: 1 критичность времени на данной момент 2. периметр против глубины и "чистоты" лужи 3. наличие подходящей обуви. 4 ... И если все таки решились пройти сквозь лужу надо не забывать о том что она скрываетоткрытый люк - выбраться из которого далеко не просто. )) Это сообщение отредактировал(а) mes - 25.4.2008, 12:27 |
|||
|
||||
mes |
|
||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а не проще разгрузить такое большое кол-во однотипных операций - самому же дышать легче будет. к примеру так
тогда код выглядить будет примерно так
|
||||||
|
|||||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
SABROG, код ужаснул меня...
|
|||
|
||||
SABROG |
|
||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Меня самого он ужасает, иногда прежде чем думать про оптимизацию сначала стоит задача сделать так, чтобы работало хоть как-то, чтобы понять в правильном вообще направлении я иду или нет. Уже 2 раза переписывал ядро программы. Причем иногда очевидные вещи даже в голову не приходят.
Если бы там были только текстовые данные, так там ведь может быть что угодно вообще. Одним toString() не обойдешься. Там и toDouble, и toUInt(), и toInt(). Причем в некоторых случаях int надо преобразовывать в указатель. По сути под каждый уникальный параметр (не тип!) свое действие. Это сообщение отредактировал(а) SABROG - 25.4.2008, 14:01 |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
смотри в сторону перегрузки метода Добавлено через 2 минуты и 12 секунд в данном примере не оптимизация, а построение логики |
|||
|
||||
SABROG |
|
||||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Смотрел и шаблоны смотрел. Не особо меня радует это. Сделал вариант со свичем:
|
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
P.S. для уникальных типов - уникальные операции
P.S.S кстати насчет строковых имен - я бы посоветовал бы использовать вместо них строковые константы Преимушества: 1. при опечатке компилятор заметит 2. при смене имени ключа не стоит переживать что где то в теле завбудешь исправить имя 3. переменная может быдь названа более удобным способом -(например если ключ слишком длинный) 4. и многое другое)) |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Мда... Читать, если честно, ужасно
![]() ![]() ЗЫ Функции больше 15 строчек есть зло! |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
ты не прав, есть ф-ии где по другому не обойтись. Да и в большинстве своем они больше 15 строчек... |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
значит функции злые - не всем же им добрыми быть)) |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Экстрактить в отдельный метод ![]() |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Это когда получается. А бывает, что надо заводить структуры на 5-10 параметров... ага. И в итоге код получается в два раза больше... и ни фига не понятнее. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
И вообще, не надо впадать в крайности. Согласен, код функции, занимающий более 15-20 строчек, вызывает напряги. Но иногда невозможно разделить большую функцию на несколько маленьких (например, контекст огромный). Так же и с goto - в большинстве случаев он не нужен, но иногда (выход из вложенного цикла, например) он предпочтителен, так как и быстрей, и наглядней, по моему.
|
|||
|
||||
MAKCim |
|
||||||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
так может быть переполнение стека
замени в моем предыдущем примере статический массив динамическим ![]()
чем больше состояний, тем больше среднее время выполнения одной итерации
наводит на мысль о двоичном поиске в таком случае, но не об O(1) т. е
и number = 4 при "тупой" реализации switch/case нужно 5 проверок при реализации двоичного поиска 2-3 но никак не 1 соответственно число сравнений возрастает с увеличением числа case Добавлено через 3 минуты и 39 секунд
смотря кто писАл код ![]() Это сообщение отредактировал(а) MAKCim - 25.4.2008, 20:40 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||||||
|
|||||||||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не совсем понял .. что именно вызывает переполнение в отличие от "оригинального" примера? |
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
да и получим все тот же мой пример, только в неявном виде + у меня state не константен Добавлено через 5 минут и 30 секунд
в оригинальном примере state не константен и вычисляется динамически т. е не обязательна последовательность state1() -> state2() -> state3() + state3() не обязательно пуст в этом случае можем получить длинную цепочку вызовов, что приведет в конечном итоге к переполнению если брать ваш код в том виде, в котором он есть, переполнения, конечно, не будет но он и не эквивалентен моему -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
так я просто для примера сделал его статическим )) под приравниваем подразумевалась определеная операция над состоянием результатом которой неизвестное на этап компиляции значение у по идеи одно значение состояние должно быть выходом из автомата
согласен, ![]() сейчаспопробую переписать Это сообщение отредактировал(а) mes - 25.4.2008, 21:54 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
не обязательно инвариант выхода может формироваться не только по state -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну а теперь?
Добавлено через 2 минуты и 7 секунд P.S. inline функций в данном примере компилятор должен произвести сам .. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
mes,
а если в каждой из stateX требуется контекст Run()? тащить его в каждую stateX? расточительно... Это сообщение отредактировал(а) MAKCim - 25.4.2008, 22:29 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
1 контекст является глобальным окружением - (как и в примере с goto) 2. все это дольно быть классом и функции обслуживающие состояния являются его членами 3. этот автомат обслуживает сторонюю структуру данных - тогда придется ее передавать как параметр 4 или функции обслуживаюшие состояния являются внешними по отношению классу - тогда придется передавать себя как параметр . P.S. если функции заинлайнятся, то даже этих расходов на передачу параметров не будет. Это сообщение отредактировал(а) mes - 26.4.2008, 09:54 |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
Почему мои последние топики такие провакационные? Вроде спросил простую вещь
![]() -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Талант наверное. ![]() Резюмируя:
Без разницы, главное, что-бы в данном конкретном случае это хорошо читалось другими программистами. а столько многабукаф из-за того, что здоровенный switch- это как правило признак ошибки в проектировании... вот.. Это сообщение отредактировал(а) Lazin - 26.4.2008, 18:10 |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
В этом всё и дело, Rickert, чем проще вопрос — тем больше на него ответов. Это давно так ![]() ![]() -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
solved
![]() -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
CppDevelopeR |
|
|||
![]() Experienced Expert ![]() ![]() Профиль Группа: Участник Сообщений: 390 Регистрация: 7.1.2008 Где: Moscow-City Репутация: нет Всего: 9 |
Конечно switch. Но согласяться все, что без if/else порой ну никак не обойдись. Ну, или по крайней мере в некоторых случаях(местах) if/else использовать удобнее.
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
вообще-то, switch/case довольно редко используемая конструкция (речь не о любителях Win32API) по сравнению в if/else. |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
А конструкция:
еще реже... |
|||
|
||||
bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
у меня так чаще, чем switch/case ![]() |
||||
|
|||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
Аналогично
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Паттерн Strategy рулед!
гг шучу --------------------
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |