Re[4]: В чем прелесть замаскированного goto?
От: Erop Россия  
Дата: 09.09.10 18:37
Оценка:
Здравствуйте, Nik_1, Вы писали:

N_>Яж написал, что это не маскировка. Наоборот, гоуту — это будет маскировка брейка( здесь суть действия — досрочное прерывание блока из последовательности операторов, спецально для этого в языке есть ключивые слова брейк и континью).


интересно, что в данной конкретной конструкции будет делать слово континью, которое специально для этого есть в языке?

N_>Как говориться, дьвол кроится в деталях, а в данном случаи за этим многоточием. На практике код там обычно бывает длянным и куда нас послали придется искать через поиск.


Ну и что? Так хотя бы искать прийдётся, а иначе ты вообще можешь никогда не узнать, что цикл-то не цикл на самом деле...

N_>Это лишь изза того, что в языке не ввели возможность создния блоков без цикла. Поэтому это обходят через вайл(фолс).

Ну так и зачем небенально рожать конструкцию, которой нет, вместо того, чтобы использовать конструкцию, которая есть и которую все знают?

N_>Аналогично, в случаи брейка зато мы точно знаем куда идет посыл — в конец текущего блока. А в случаи с гоуту пока не дочитаем до метки, не поймем что имелось ввиду под этим посылом.


Ну так-то мы можем хотя бы поискать. Кроме того, меткам принято давать осмысленные имена, вообще-то.
А так мы вообще всё неверно поймём...

Да и вообще, если мы читаем последовательно, то goto наверх быть уже не межет, значит, а вниз тоже далеко не пошлёшь -- до первого объекта с конструктором... Так что свобода goto в С++ не так уж и велика, как тебе кажется.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: В ЭТОЙ ПРОГРАММЕ НЕТ НИКАКОГО ЦИКЛА!!!
От: Erop Россия  
Дата: 09.09.10 18:39
Оценка:
Здравствуйте, Nik_1, Вы писали:

N_>Это уже издержки того что в языке нет конструкции на этот случай. Но тут уже предлагали использать дефайны которые решают эту проблему, и все сразу становится наглядно


1) C дефайнами это уже другая конструкция!!! IMHO излишняя, кстати.
2) Наглядно становится, если эти дефайны знать.
3) И дефайны точно нужно не через break определять, а то оконфузишься...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: В чем прелесть замаскированного goto?
От: Erop Россия  
Дата: 09.09.10 18:41
Оценка:
Здравствуйте, Nik_1, Вы писали:

E>>Надо goto наружу блока, непосредственно за его конец!

N_>А зачем? Чтоб сделать гоуту за блок в языке введен оператор брейк

Точно? У K&R писали, что для преждевременного выхода из циклов и switch'ей...
И, кстати, почему break, а не continue?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: В чем прелесть замаскированного goto?
От: Erop Россия  
Дата: 09.09.10 18:42
Оценка:
Здравствуйте, Nik_1, Вы писали:

N_>Хосподи, а макросы то тебе чем не угодили?

Если коротко, то всем
Моим подчинённым, например, крайне редко удаётся протащить через меня какой-нибудь макрос...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[10]: В чем прелесть замаскированного goto?
От: Erop Россия  
Дата: 09.09.10 18:45
Оценка:
Здравствуйте, Nik_1, Вы писали:

N_>Какая ИДЕ умеет отоброжать брекиты написанные в дуратском стиле:

N_>
N_>do{
N_>};
N_>


N_>в нормальный стиль?


Ну, как по мне, так такой нормальный и есть. Но MSVC, например, умеет форматировать под тот стандарт оформления, что в него вбит. Он вроде настраивается.
Ещё много где можно писать макросы...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: В чем прелесть замаскированного goto?
От: Nik_1 Россия  
Дата: 09.09.10 18:56
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Nik_1, Вы писали:


N_>>Хосподи, а макросы то тебе чем не угодили?

E>Если коротко, то всем
Тебя что в детстве макросы покусали чтоль Это незаменимый в целом ряде случаев инструмент, который можно и нужно использовать понеобходимости.
E>Моим подчинённым, например, крайне редко удаётся протащить через меня какой-нибудь макрос...
Назовите название конторы, куда никогда не следует посылать резюме Этож вообще писец, если каждую строчку кода нужно бегать согласовывать с начальством. Как тока народ не разбежался еще из конторы.
Re[5]: В чем прелесть замаскированного goto?
От: Nik_1 Россия  
Дата: 09.09.10 19:04
Оценка:
Здравствуйте, Erop, Вы писали:
N_>>Как говориться, дьвол кроится в деталях, а в данном случаи за этим многоточием. На практике код там обычно бывает длянным и куда нас послали придется искать через поиск.
E>Ну и что? Так хотя бы искать прийдётся, а иначе ты вообще можешь никогда не узнать, что цикл-то не цикл на самом деле...
Ну а зачем чтото искать, когда можно и не искать

N_>>Это лишь изза того, что в языке не ввели возможность создния блоков без цикла. Поэтому это обходят через вайл(фолс).

E>Ну так и зачем небенально рожать конструкцию, которой нет, вместо того, чтобы использовать конструкцию, которая есть и которую все знают?
Затем, что эта конструкция более правильная с точки зренеия структурированности кода, и позволяет писать более качественный код, чем с гоуту.

E>Да и вообще, если мы читаем последовательно, то goto наверх быть уже не межет, значит, а вниз тоже далеко не пошлёшь -- до первого объекта с конструктором... Так что свобода goto в С++ не так уж и велика, как тебе кажется.

Я не селен в стандарте с++ относительно оператора гоуту. Это закреплено внем что можно делать переход тока вниз, но не наверх?
Re[11]: В чем прелесть замаскированного goto?
От: Nik_1 Россия  
Дата: 09.09.10 19:09
Оценка: :)
Здравствуйте, Erop, Вы писали:
E>Ну, как по мне, так такой нормальный и есть.
Он не нанормален тем, что внем тяжело искать начало и конец блоков. Когда открывающая скобка стоит в конце строки, то ее найти ооочень тяжело(т.е. на несколько порядков больше тратится усилий, чем когда она вначали строки). Но это уже тема для отдельного холивара
E>Но MSVC, например, умеет форматировать под тот стандарт оформления, что в него вбит. Он вроде настраивается.
Ну так всетаки, как мне включить в студии чтоб все брекиты отображались правильно(=как мне надо)?
Re[8]: В чем прелесть замаскированного goto?
От: Erop Россия  
Дата: 09.09.10 19:13
Оценка:
Здравствуйте, Nik_1, Вы писали:

N_>Назовите название конторы, куда никогда не следует посылать резюме Этож вообще писец, если каждую строчку кода нужно бегать согласовывать с начальством. Как тока народ не разбежался еще из конторы.


А у тебя в каждой строчке макросы? Тогда действительно резюме твоё тут не надо...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: В чем прелесть замаскированного goto?
От: Erop Россия  
Дата: 09.09.10 19:17
Оценка:
Здравствуйте, Nik_1, Вы писали:

N_>Ну а зачем чтото искать, когда можно и не искать

У тебя большой опыт поддержки большого объёма кода? Ты когда по коду шаршься, по каждой конкретной нужде, то замечаешь что-то и запоминаешь что да как где видел. Когда код работает совсем не так, как выгядит на первый взгляд, получается довольно неприятно...

N_>Затем, что эта конструкция более правильная с точки зренеия структурированности кода, и позволяет писать более качественный код, чем с гоуту.


А что значит "более правильная"? IMHO, более правильная конструкция -- вынести всё в отдельную функцию или в объект-механизм!
А в тех, крайне редких случаях, когда так сделать от чего-то нельзя, использовать goto, а не хитро извращаться с недоциклами...

N_>Я не селен в стандарте с++ относительно оператора гоуту. Это закреплено внем что можно делать переход тока вниз, но не наверх?

Я тебе советую сначала изучить имеющиеся конструкции языка, а потом уже предлагать новые...

Что касается goto, то по нему нельзя обрулить создание объекта, доступного в точке, куда осуществляется переход...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[9]: В чем прелесть замаскированного goto?
От: Nik_1 Россия  
Дата: 09.09.10 19:19
Оценка:
Здравствуйте, Erop, Вы писали:
E>А у тебя в каждой строчке макросы? Тогда действительно резюме твоё тут не надо...
Вот ненадо тока переиначивать. Ты говорил что вообще макросы не разрешаешь, причем тут в каждой строчке
Re[10]: В чем прелесть замаскированного goto?
От: Erop Россия  
Дата: 09.09.10 19:24
Оценка:
Здравствуйте, Nik_1, Вы писали:

N_>Вот ненадо тока переиначивать. Ты говорил что вообще макросы не разрешаешь, причем тут в каждой строчке


Ну я на всякий случай повторю.
Есть список опасных и сомнительных конструкций, использование которых ОБЯЗАТЕЛЬНО нужно согласовать с начальником В КАЖДОМ СЛУЧАЕ ОТДЕЛЬНО.
Соответсвенно, если у тебя эти сомнительные конструкции не используются то и согласовывать ничего не надо
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[12]: В чем прелесть замаскированного goto?
От: Erop Россия  
Дата: 09.09.10 19:24
Оценка:
Здравствуйте, Nik_1, Вы писали:

N_>Ну так всетаки, как мне включить в студии чтоб все брекиты отображались правильно(=как мне надо)?


Ну если она не умеет так широко настраивать свой коде-стиль (фиг тебя знает, как тебе надо?), то напиши макрос...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: В чем прелесть замаскированного goto?
От: Nik_1 Россия  
Дата: 09.09.10 19:31
Оценка:
Здравствуйте, Erop, Вы писали:

E>А что значит "более правильная"? IMHO, более правильная конструкция -- вынести всё в отдельную функцию или в объект-механизм!

Полностью согласен Но реали таковы что приходится поддерживать код, который написан неидеально и встречаются длинные функции. Я предпочту встретить внем брейк, вместо гоуту неизвестно куда.
E>А в тех, крайне редких случаях, когда так сделать от чего-то нельзя, использовать goto, а не хитро извращаться с недоциклами...
Гоуту не нужен

E>Я тебе советую сначала изучить имеющиеся конструкции языка, а потом уже предлагать новые...

Уменя на практике ниразу не возникало необходимости им воспользоваться, поэтому не вникал в особенности его работы, а лишь знаю что он есть и как примерно работает. Возниклаб необходимость внем — глянул бы в справку про ньюансы, но вот пока ниразу не понадобился

E>Что касается goto, то по нему нельзя обрулить создание объекта, доступного в точке, куда осуществляется переход...

Вот и говорю что не нужен , потому что слишком много всяких таких "но" и подводных камней в его использовании.
Re[13]: В чем прелесть замаскированного goto?
От: Nik_1 Россия  
Дата: 09.09.10 19:35
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Nik_1, Вы писали:


N_>>Ну так всетаки, как мне включить в студии чтоб все брекиты отображались правильно(=как мне надо)?


E>Ну если она не умеет так широко настраивать свой коде-стиль (фиг тебя знает, как тебе надо?), то напиши макрос...

мне нужен обычный стиль, когда все на раздных строках:

while()
{
};


Скажи по пунктам куда тыкать и что нажимать, чтобы она отображала мне все исходники в таком стиле. ( студия 2008-я)
Re[11]: В чем прелесть замаскированного goto?
От: Nik_1 Россия  
Дата: 09.09.10 19:38
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Nik_1, Вы писали:


N_>>Вот ненадо тока переиначивать. Ты говорил что вообще макросы не разрешаешь, причем тут в каждой строчке


E>Ну я на всякий случай повторю.

E>Есть список опасных и сомнительных конструкций, использование которых ОБЯЗАТЕЛЬНО нужно согласовать с начальником В КАЖДОМ СЛУЧАЕ ОТДЕЛЬНО.
Если они далеко не "в каждой строчке" будут использоваться, всеравно замаишься согласовывать. Я б такого начальника отдела с его заморочками послалбы куда подальше.
E>Соответсвенно, если у тебя эти сомнительные конструкции не используются то и согласовывать ничего не надо
Ну так скажи что такого плохо в макросах?
Re[9]: В чем прелесть замаскированного goto?
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 09.09.10 20:08
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, CaptainFlint, Вы писали:


CF>>Во-первых, на нетбуке и на 26" мониторе понятия "один экран" чуточку разнятся. Во-вторых, даже если весь код уместился на один экран, всё, что я говорил об очевидности поведения кода, здесь тоже применимо с тем лишь отличием, что придётся не текст прокручивать, а глазами по коду прыгать. Согласен, это не та проблема, чтобы бить в барабаны, но всё же, согласись, найти текстовый идентификатор и проверить его идентичность метке в goto занимает больше времени и усилий, чем просто найти конец текущего блока.


E>Дык он должен быть как раз в конце блока...


Верно. Но его ещё надо сравнить с тем, который упомянут в goto: а та ли это метка, на которую мы переходим или всё-таки другая?

CF>>Я нигде не утверждал, что сабжевая конструкция — это серебряная пуля.

E>Либо я тебя не понял, либо твои приятности становятся актуальны, когда меток в функции много, блоков много и вообще всего много. IMHO, такие сложные функции лучше не писать

Мои приятности приятны тем, что тебе не будет ни малейшей необходимости даже задумываться о том, много ли у тебя меток, блоков и вообще всего. Ты видишь break и сразу же точно знаешь, куда попадаешь. Всё.

CF>>Речь не о том, как запутать код, а о том, как объяснить читателю, что код не запутан.

E>Ну вот мне в конструкции с псевдоциклом больше всего не нравится то, что код запутан, но это замаскировано.

CF>>Согласен, есть такой аспект. Но я ведь с самого начала сказал об этом: да, информация, которую мы получаем, видя break, неполна.

E>Хуж! Она не та! пока не дойдём до конца, так и не узнаем к чему всё это было.

Если почитать эту тему, то видно, что так считают не все.

CF>>Во-первых, это субъективно.

E>Что субъективно? Что такой "цикл" может и не насторожить или что goto не может не насторожить?

Твоя фраза
E>А код с goto неверно понять НАМНОГО СЛОЖНЕЕ!
субъективна, потому что сложность понимания языковых конструкций у разных людей разная. Кому-то именно код с goto покажется не тем, чем он является на самом деле (например, решит, что это выход не из блока, а вообще переход в конец функции), зато do/while(0) этот человек опознает мгновенно и не будет понимать, как о нём можно подумать что-нибудь неправильное.

CF>>Во-вторых, ты как-то слишком легко судишь о том, кто чего и как понял.

E>Да нет, не ты. Ты юы наверное понял бы, что ты не понял и изменил бы мнение о конструкции.
E>Но были посты типа "и что вам тут не нравится, обычный цикл получения данных"

А, ну если ты про них, тогда ладно. Просто мне показалось, что ты говорил вообще про всех, кто хотя бы раз упомянул слово "цикл".

CF>>Да, неочевидность кода — это один из недостатков данного подхода, совершенно верно.

E>Ну да. IMHO, это очень боьлшой недостаток. Так как код с goto только гипотетически может оказаться неочевидным, и то, если автор допустит в нём ошибку, использовав не ту метку, или поставив метку не сразу после конца, а где-то ещё. А код с псевдоциклом СРАЗУ неочевидный...



CF>>Оба пункта, которые ты привёл, опять-таки, субъективны. Тебя некий код удивит, а кого-нибудь другого — нет. А другой код — наоборот. И какой из них считать "наименее удивляющим"?
E>Прикольно! Ты не знаешь принципа наименьшего удивления? Это очень хороший и широкоупотребляемый принцип. Очень ценен при работе в команде. Правда я не готов сейчас углубляться в обсуждение самого принципа. Это тут офтоп несколько.

Скажем так: я специально его не изучал, но полагал его означающим то, что он интуитивно должен означать. Глянул Википедию — там про него описано именно то, что я о нём предполагал. Так что мои слова остаются в силе: удивление пользователя — критерий неуниверсальный, потому что разные пользователи могут ожидать разного поведения программ и, соответственно, удивляться разным вещам. Если взять пример из той же Википедии с Ctrl+Q: один пользователь будет ожидать, что сочетание запишется, другой — что программа закроется, третий — что запись макроса прервётся. И какой вариант ни выберешь, остальные два пользователя будут удивлены выбранному поведению. Вопрос лишь в количестве пользователей каждой категории, но набирать объективную статистику такого рода — занятие неблагодарное.

E>Так что вернусь к goto vs псевдоцикл. Оно конечно немного субъектитвно, но всё равно всё просто и понятно. Вот смотри, ты тут выше, когда писал про то, что я неверно сужу кто там что понял или не понял, писал, что тут-то ты всё понял, потому что читал перед этим тему про WTF? А вот про код с goto ты от чего-то таких разъяснений делать не стал. Не подскажешь почему?


Просто потому что до прочтения той темы мне эта конструкция в Сях нигде не попадалась. Я точно так же мог сказать о любой ранее не знакомой мне конструкции, — хоть про goto, хоть про какой-нибудь синглтон, хоть про что-то ещё — если бы так получилось, что я о них раньше не слышал, а тут так совпало, что прочёл о них в соседней ветке буквально за пару дней до обсуждения.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[9]: В чем прелесть замаскированного goto?
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 09.09.10 20:12
Оценка: :)
Здравствуйте, Erop, Вы писали:

CF>>Рассматривай это как паттерн. Есть определённые ситуации, в которых требуется конструкция вида "однопроходный блок с выходом из него по условиям". Роль такой конструкции может играть try/catch, может функция с return'ами, может обычный блок с goto, а может и псевдо-цикл do/while(0). Есть люди, которым последний подход показался интересным и достаточно вразумительным. Тебе он таковым не показался — что ж, это твоё личное мнение. Но это не означает, что этот подход никому в мире не должен казаться понятным и полезным.


E>Ужос! try-то с catch'ем-то за что? Я верно понял, что речь идёт о конструкции вида:
try {
E>    if( XXX ) {
E>        throw 666;
E>    } 
E>} catch( int rootOfEvil ) {
E>        // process XXX
E>}
Это уж совсем ни в какие ворота не того. Чего толкьо люди из-за религиозного страха перед goto не делают!!!


Э-э… Боюсь показаться необразованным дураком, но что не так в этом коде? Неоднократно встречал, да и сам использовал…
/нервно оглядываюсь, ища куда бы заныкаться от неотвратимого гнева гуру/
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[7]: В чем прелесть замаскированного goto?
От: CreatorCray  
Дата: 09.09.10 20:38
Оценка:
Здравствуйте, Erop, Вы писали:

N_>>Хосподи, а макросы то тебе чем не угодили?

E>Если коротко, то всем
E>Моим подчинённым, например, крайне редко удаётся протащить через меня какой-нибудь макрос...

интересно, а например вот такие вот
#define SIZE_CHECK(type,bits)    static_assert (sizeof(type) == bits/8, #type " != " #bits " bit")
#define foreach(it,cont)            for (auto it = (cont).begin (), foreach_end_##it = (cont).end ();it != foreach_end_##it;++it)
#define countof(array)                (sizeof (array)/sizeof (array[0]))

пролезли бы?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[5]: объект-механизм
От: fk0 Россия https://fk0.name
Дата: 09.09.10 20:41
Оценка:
Здравствуйте, Erop, Вы писали:


fk0>> Для этого нужны вложенные фунцкии, как в паскале. Для одептов GCC и Delphi, для виндоморонов и C++ -- никак нельзя.

E>Да ладно уж прямо вот и никак
Автор: Erop
Дата: 26.08.05
?..


Костыли и подпорки! Попытка через ()() сделать то, что в других языках делается просто и непосредственно!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.