Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 19 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

subj? Может не стоит его ругать? break и continue те же goto только в урезанной форме. exit() и многочисленные return тоже приводят к нарушению хода программы 'сверху вниз' (получается сверху в бок или сверху низнаю куда)



Партнер
 

Leap Ahead™
Статус: Не в сети
Регистрация: 02.09.2003
riskie Если пишешь НЕ только для себя, то все равно... Правда потом сам не разберешь что написал.
А вот если кому-то читать после тебя.... Тогда он бедный. :)


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
riskie
return ваще не тоже самое. При использовании break и continue(ух как же я их люблю :) ) строение программы совсем другое. Если написать прогу с большим коллвом "готов" то другому человеку(да и самому тоже) будет сложно разобратся с неожыданными ошибками из ниоткуда(естественно имеются ввиду программы, а не лаб. работы в 15 строчек). Сам когдато сьел пса после прешёл на break и continue (с ними же красевее код выглядит) и не жалею, хотя иногда иногда можно где нибудь резко "прыгнуть", но я уже этого не делал давно(ну кроме асмы естесно :D ).


 

Member
Статус: Не в сети
Регистрация: 26.06.2004
А по мне, код красиво выглядит, когда перечисленных выше команд в нем нет. Зачем они нужны, если все можно заменить их циклом или условием. По моему в коде без break, goto и continue легче читается другими людьми и структура (алгоритм прослеживается легче).

Но у меня самый главный вопрос: Вы на чем пишете? я последний раз видел (слышал) эти команды когда писал на ТurboРascal'е


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
Silver_Clash
Цитата:
Но у меня самый главный вопрос: Вы на чем пишете? я последний раз видел (слышал) эти команды когда писал на ТurboРascal'е

На си естесно.
Цитата:
А по мне, код красиво выглядит, когда перечисленных выше команд в нем нет. Зачем они нужны, если все можно заменить их циклом или условием

Иногда кроме красоты нужна скорость. Можно очень не хило выкрутится при этом с помощью преходов. Кроме того переходы от использования break и continue сильно ограничены - строго в пределах текущего цикла, что не сильно путает алгоритм, в отличии от готу - с ней можно прыгнуть в самую ж...


 

Member
Статус: Не в сети
Регистрация: 08.06.2004
Откуда: МО
как я понимаю goto относится к неструктурному программированию... а это очень не любят преподы... да и вообще не актуально это щас... надо просто знать что есть такой оператор и всё ! Юзать его нигде не надо...


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
мне например нравится конструкция(нигде не читал - сам придумал):
while(1){
//... код
if(условие)break(или continue);
//... код
}
Такие циклы легко писать. Условие ставишь когда душе угодно. Выход из цикла в любой момент. Не надо ждать завершения всего тела цикла. Попробуйте. Я уже давно пользуюсь этим. Может я ошыбаюсь в чём то?


 

Member
Статус: Не в сети
Регистрация: 08.06.2004
Откуда: МО
mein кстати по опыту могу сказать, что while (1) это потенциально бесконечный цикл... так что его использование КРАЙНЕ нежелательно !


 

Member
Статус: Не в сети
Регистрация: 26.06.2004
mein
Такую конструкцию писать несложно, согласен. Но без использования Break? она сложнее не становиться!
while(1){
//... код
if Not(условие)
Then
begin({)

//... код

end(});
}

А алгоритм сразу на лицо!


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
stacq
Цитата:
кстати по опыту могу сказать, что while (1) это потенциально бесконечный цикл... так что его использование КРАЙНЕ нежелательно !

Ну почему же потенциально бесконечный - это и есть бесконечный :D . Я же показал что мой иф стоит линейно в корневом цикла, так что условие не опаснее в плане зацикливания той же проверки в вайле.
Silver_Clash
Цитата:
Но без использования Break? она сложнее не становиться!

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


 

Та ну, это же несерьезно.
Goto можно позволить себе только в коротенькой простенькой программе.
А если что-то делать с умом... Не знаю ни одного случая, когда нельзя было бы без него обойтись.
Кроме того, это в своем роде философия :) - писать без goto...
И появилась она не на пустом месте.


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Кстати, раз уж на то пошло, то при переводе на ASM - ВСЕ переводится с использованием jmp! Так что в принципе применять goto можно, просто это не эстетично чтоли :). Я уже не помню когда в последний раз его применял. И если встречаю ег8о в кода какой нибудь программы, то меня немного коробит, как будто нарушается какая то целостность чтоли. Использование break и continue считаю вполне нормальным. Так как это просто идеальный способ прервать или продолжить цикл.


 

Member
Статус: Не в сети
Регистрация: 07.10.2003
Откуда: Russia, Moscow
В общем goto именно так плох, как его описывают. Программа с такими переходами требует намного больше времени и на отладку и просто на прочтение.
Как сказано в хелпе Билдера, целесообразно использовать ТОЛЬКО для выхода из вложенных циклов, для чего и юзаю.

_________________
В поиске включайте "Искать все слова". Избегайте многоточий.
Зачем нужен разгон? http://tsc.overclockers.ru


 

Member
Статус: Не в сети
Регистрация: 26.06.2004
mein
для современных камней количество итераций не слишком критично, а для несовременных?
Я часто пишу проги в универ, там в основном стоят целки от 300 до 600 Mhz, для них это критично (и даже очень критично). Мож кто знает ветку в которой обсуждаются оптимизация и ускорение кода? Интересно просто почитать, мож чего нового узнаю!

Ну а goto всеже не очень красиво использовать, в конце концов если новичку такой код дать он запутается и не поймет даже алгоритма! А вы помните основные принципы построения алгоритмов? Один из них: алгоритм должен быть общепонятем, нам даже пример в школе приводили: понятен даже ребенку!


 

Member
Статус: Не в сети
Регистрация: 14.08.2003
Откуда: Питер
Помнится еще в школе писал всякую ерунду на ZX Spectrum и там (на бейсике) без GoTo вообще было нереально обойтись. ммм до сих пор помню один фрагмент:
Код:
10 PRINT RND
20 GOTO 10

Да и тему надо бы перенести в раздел "Программирование" :oops:

_________________
Лучшая зашита - это нападение.


 

Member
Статус: Не в сети
Регистрация: 04.01.2004
Откуда: 31
Goto - это действительно бэйсиковская отрыжка. Сейчас учу одного человека азам - даже мысли не было рассказать, что такое есть.
Silver_Clash
По поводу раскрытия циклов: точно знаю, что применялась на монстрах a la EC и подобных - для них это было очень критично, причем зачастую циклы раскрывались полностью. Впрочем и сейчас для программирования микроконтроллеров тоже используется.
Цитата:
Но у меня самый главный вопрос: Вы на чем пишете? я последний раз видел (слышал) эти команды когда писал на ТurboРascal'е

Пишем на чем придется. Почти во всех языках такое есть.
Соглашусь с теми, кто считает, что без необходимости и бряки с континуами лучше не использовать. Ну не нравится и всё тут! :bandhead:


 

Member
Статус: Не в сети
Регистрация: 08.10.2004
А чем конструкция if else if лучше switch break? Даже хуже и менее читаема иногда. И цикл for бывает прервать лучше, чем пользоваться всякими while, until и т.д. Вообще, были примеры, которые доказывали, что без goto нельзя обойтись. Поэтому, в goto-ненавистничестких языках он все же был введен. Программа должна быть эффективна, хорошо читаема другими програмерами и максимально проста и не важно, каким стилем она написана. У каждого свой стиль. По мне, так лучше пусть побольше коментариев вставит програмер, чем будет изощрятся и писать красиво, без goto и прочих догм (кроме этой, которая велит вставлять пояснительные толковые коментарии, конечно). Догмы - вон из голов програмистов! ;)


 

Member
Статус: Не в сети
Регистрация: 25.01.2003
Откуда: UA
IliaV
If else if страшная вещь. До сих пор вспоминаю монструозные if'ы с десятком условий которые воротил в delphi, этот код абсолютно нечитаем и практически не подлежит отладке. А вот блок switch/case/break будет короче и стройнее.

Понять что либо в чужой программе использующей хотя бы 2-3 goto невозможно, это поганый стиль программирования. Я goto ставил пару раз в что б выйти из многоуровневого цикла и не более того, для простых вещей всегда красивее while(1) и if(..) break.
Насколько я понимаю оптимизации циклов типа разворачивания или прохода задом наперед актуальны только для delphi или других высокоуровневых языков, в C цикл пообрабатывается стандартными средствами типа loop/jne и т.п., накладные расходы минимальны и выигрышь в тысячных долях процента не стоит запутывания и раздувания кода.


 

Member
Статус: Не в сети
Регистрация: 18.07.2004
Откуда: Донецк
Kometa_triatlon писал(а):
Та ну, это же несерьезно.
Goto можно позволить себе только в коротенькой простенькой программе.
А если что-то делать с умом... Не знаю ни одного случая, когда нельзя было бы без него обойтись.
Кроме того, это в своем роде философия :) - писать без goto...
И появилась она не на пустом месте.



Необходимость в операторе goto может возникнуть при оптимизации некоторой части программы. В этом случае ни о какой читабельности кода не может быть и речи и зачастую только goto может дать нужный результат. Для подтверждения своих слов предлагаю заглянуть в исходники Quake, Quake 2.

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


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 19 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan