Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

goto vs ...

21K
02 января 2007 года
kerdan
18 / / 27.12.2006
Цитата: nilbog
можно фунцию ввести которая проверяет просто число или нет
 
Код:
function prost(num:integer):boolean;
label 1;
var i:integer;
begin
prost:=true;
for i:=2 to num div 2 do
 if num mod i = 0 then begin prost:=false; goto 1 end;
1:
end;



Не понял? А какая необходимость goto в if втыкать.
Во-первых там можно break поставить (выход из цикла).
Во-вторых там вообще надо уже exit'ом из ф-и выходить.

P.S. Это так - к слову.

Страницы:
622
02 января 2007 года
nilbog
507 / / 19.12.2006
Цитата: kerdan
Не понял? А какая необходимость goto в if втыкать.
Во-первых там можно break поставить (выход из цикла).
Во-вторых там вообще надо уже exit'ом из ф-и выходить.

P.S. Это так - к слову.


goto ... break...
если ориентироваться на стандарт паскаля там вообще break нету :)
ну а в TB пожалуйста
если вам break больше метки на последний пустой оператор нравится

257
03 января 2007 года
kosfiz
1.6K / / 18.09.2005
[quote=nilbog]goto ... break...
если ориентироваться на стандарт паскаля там вообще break нету
ну а в TB пожалуйста
если вам break больше метки на последний пустой оператор нравится[/quote]
давай сразу определимся, а то ты все время про стандарты, да про стандарты. стандартов вообще-то три штуки ты каким пользуешься? я приведу тебе цитату Н. Вирта:"Фактический стандарт для Паскаля был определен компанией Borland просто потому, что ими был создан компилятор, который распространялся широко и дешево." Так что tp и bp - это стандарт + ко всему здесь почти у всех именно tp или bp, так что хорош про стандарты.
622
03 января 2007 года
nilbog
507 / / 19.12.2006
Цитата: kosfiz
давай сразу определимся, а то ты все время про стандарты, да про стандарты. стандартов вообще-то три штуки ты каким пользуешься?


ISO 1990г например

Цитата: kosfiz
Так что tp и bp - это стандарт + ко всему здесь почти у всех именно tp или bp, так что хорош про стандарты.


я в принципе ничего против не имею...
привык просто если уж в паскале то goto вместо break
а вообще это абсолютно неважно :)
главное чтоб алгоритм дурной работы не делал

ps главное в жизни двойных стандартов избегать ;)

257
03 января 2007 года
kosfiz
1.6K / / 18.09.2005
предлагаю придерживаться того, что реализован в bp и tp.
про goto:
я просто еще хочу проинформировать о том, что использование goto на данный момент считается плохим тоном программирования, да ты наверное сам знаешь об этом.
622
03 января 2007 года
nilbog
507 / / 19.12.2006
Цитата: kosfiz

я просто еще хочу проинформировать о том, что использование goto на данный момент считается плохим тоном программирования, да ты наверное сам знаешь об этом.


да это так )
в структурном програмировании считается что должен быть один вход и один выход на оператор
самый дурной тон это выход по goto к примеру из while цикла
а из for цикла это еще куда нишло - особенно если упрощает жизнь и делает понятней код
можно ведь и так сделать было

 
Код:
i:=2; t:=false;
while ( i<=num div 2 ) and not t do
 begin
 t:=num mod i =0;
 i:=i+1
 end;

вопрос - что лучше 5 строчек или 2
лично я считаю что основная цель структурного програмирования - упрощение программы для понимания логики
хз я могу быть и не прав:)
257
03 января 2007 года
kosfiz
1.6K / / 18.09.2005
[quote=nilbog]вопрос - что лучше 5 строчек или 2[/quote]
с точки зрения компактности кода 2 строки лучше, но не всегда понятнее и это "-". к тому же begin и end несут не такую уж и большую смысловую нагрузку, так что получаем соответственно 3 и 2 строки кода + если изменить чуток код(перепишем с использованием exit), то он станет понятнее(также и останется 3 строки не считая begin и end) и максимально ближе к тому где используется for. куски кода будут почти идентичны.

и что тебе мешает использовать exit с for?
 
Код:
function prost(num:integer):boolean;
var i:integer;
begin
prost:=true;
for i:=2 to num div 2 do
 if num mod i = 0 then begin prost:=false; exit; end;
end;
622
03 января 2007 года
nilbog
507 / / 19.12.2006
Цитата: kosfiz

и что тебе мешает использовать exit с for?


пора заканчивать оффтоп :)
а exit меня полностью устраивает
но exit - это по сути та же метка
на последний опрератор
так что по логике это будет эквивалентно

21K
04 января 2007 года
kerdan
18 / / 27.12.2006
первый раз на паскае начал писать лет 7 назад.
tp7.0 и потом bp7.0
И не разу в голову не приходило вместо break ставить goto.
А уж exit в вашем iso-стандарте точно есть.

Не понимаю откуда такая манера взялась использовать один стандарт,
когда реализован другой. да еще когда стандарт на паскаль - простите
вообще никому не нужное дер*о, как и сам язык.

Может вам пескаль преподавал древний фанат фортрана, знавший Вирта,
И он приучил Вас стандарту следовать?? ;)
21K
04 января 2007 года
kerdan
18 / / 27.12.2006
поверьте, лучше две чем пять.
если привыкнуть писАть компактный код, то потом если будете
изучать не компактный то будут возникать такие ситуации:
смотришь, смотришь, 1,2,3,5 строка и понимаешь - на хрен этот
ламер такую хрень расписывает на столько строк???

мозги со временем выработают дополнительные извилины, которые ни
кому еще не помешали и вам станет удобнее смотреть и писАть маленький код с высокой смысловой нагрузкой.

З.Ы. Конечно это боллее явно можно ощутить, если писАть не на паскале а на С/С++,... хотя один хрен.
257
04 января 2007 года
kosfiz
1.6K / / 18.09.2005
[quote=kerdan]да еще когда стандарт на паскаль - простите
вообще никому не нужное дер*о, как и сам язык.[/quote]
ты по аккуратнее со словами. язык необходим и это факт(с него половина студентов РФ начинают постигать программирование), стандарты тоже было бы неплохо знать.
[quote=kerdan]Может вам пескаль преподавал древний фанат фортрана, знавший Вирта[/quote]
а чем тебе фортран не угодил? между прочим этот язык до сих пор используется в различных научных лабораториях и не даром такие пакеты как Matlab и MathCad его поддерживают. о том что он создан давно еще ничего не говорит.
[quote=kerdan]поверьте, лучше две чем пять.
если привыкнуть писАть компактный код, то потом если будете
изучать не компактный то будут возникать такие ситуации:
смотришь, смотришь, 1,2,3,5 строка и понимаешь - на хрен этот
ламер такую хрень расписывает на столько строк???

мозги со временем выработают дополнительные извилины, которые ни
кому еще не помешали и вам станет удобнее смотреть и писАть маленький код с высокой смысловой нагрузкой.[/quote]
человек, который умеет писать компактный код без проблем сможет разобрать и тот, что на 5 строк. если у тебя с этим проблемы, то ... не знаю что тебе сказать - это тебе минус причем огроменный.
622
04 января 2007 года
nilbog
507 / / 19.12.2006
ну я же вас не призываю писать программы для машины Тьюринга (хотя почему бы и нет - жаль это не обсуждают тут)
а стандарт паскаля это скорее абстрактный язык которого уж лично я придерживаюсь при написании программ на паскале (за исключением случаев когда пишется для конкр цели)
к примеру стандарт ничего не говорит про работу с файлами :)
таких вещей как assign close в стандате нет
и вообще турбо это не какой-нибудь идеал - к примеру почему (не будем далеко ходить ) при работе с файлами нет процедур get и put
и нет буферных переменных
273
04 января 2007 года
3A3-968M
1.2K / / 22.12.2005
Цитата: kosfiz
я просто еще хочу проинформировать о том, что использование goto на данный момент считается плохим тоном программирования


Возможно, но это предположение умерщвляется следующей задачей:
"Выход из множества вложенных циклов одновременно"

622
04 января 2007 года
nilbog
507 / / 19.12.2006
Цитата: 3A3-968M
Возможно, но это предположение умерщвляется следующей задачей:
"Выход из множества вложенных циклов одновременно"


о да
это классический аргумент:)

242
04 января 2007 года
Оlga
2.2K / / 04.02.2006
Цитата: nilbog
о да
это классический аргумент:)


и единственый, из мне известных покрайней мере :). данный аргумент просто исключение из правила.

10
04 января 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: OlgaKr
и единственый, из мне известных покрайней мере :). данный аргумент просто исключение из правила.


А интересно стало, как выход из вложенных циклов реализован в Java, C# и Обероне? На память не помню. Ведь меток, вроде бы, ни в одном из перечисленных языков нет.

622
04 января 2007 года
nilbog
507 / / 19.12.2006
Цитата: OlgaKr
и единственый, из мне известных покрайней мере :). данный аргумент просто исключение из правила.


а что неужели никто не использует метки в других случаях...
признавайтесь )))

10
04 января 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: nilbog
признавайтесь )))


Я уже забыл, когда последний раз пользовался меткой. Значит, лет 5-6 без меток точно. Писал на Дельфи.

273
04 января 2007 года
3A3-968M
1.2K / / 22.12.2005
Цитата: Freeman
А интересно стало, как выход из вложенных циклов реализован в Java, C# и Обероне? На память не помню. Ведь меток, вроде бы, ни в одном из перечисленных языков нет.


По крайней мере в C# есть и goto и break (ещё там есть классная штука yield return).

10
04 января 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: 3A3-968M
По крайней мере в C# есть и goto и break


Ну, микрочлены никогда не были принципиальными.

Цитата: 3A3-968M
ещё там есть классная штука yield return


А по-русски кратко смысл объяснить можешь? На английском прочёл - не вставило.

273
04 января 2007 года
3A3-968M
1.2K / / 22.12.2005
Цитата: nilbog
а что неужели никто не использует метки в других случаях...


Пусть есть такое сравнение:
if(objectA.nValue == objectB.nValue)
{
}
else if(objectC.nValue == objectD.nValue)
{
}
else if(objectE.nValue == objectF.nValue){...}
Лично для меня этот код неудобен как для чтения, так и для отладки. Поэтому я его заменяю на:
if(objectA.nValue == objectB.nValue)
{
...
goto END;
}
if(objectC.nValue == objectD.nValue)
{
...
goto END;
}
if(objectE.nValue == objectF.nValue)
{
...
goto END;
}
END:....
Особенно код с else'ами красиво смотриться, когда там сравнений так 10.
[quote=Freeman]yield return
[/quote]
Это возвращение объекта итерации в результат без выхода из функции. Например, пусть метод возвращает перечисление данных типа int (в .NET есть такое понятие перечисление - это не массив и не список, читать данные из него можно только при помощи итератора) - обозначается как IEnumerable<int>, метод в цикле обрабатывает данные и возвращает в последовательность значения типа int. Когда заполнение закончено, цикл автоматически прерывается.

622
04 января 2007 года
nilbog
507 / / 19.12.2006
если еще говорить о структуре то самым плохим тоном считается возвращение с помощью метки назад :)
252
05 января 2007 года
koderAlex
1.4K / / 07.09.2005
Цитата: 3A3-968M
Пусть есть такое сравнение:
if(objectA.nValue == objectB.nValue)
{
}
else if(objectC.nValue == objectD.nValue)
{
}
else if(objectE.nValue == objectF.nValue){...}
Лично для меня этот код неудобен как для чтения, так и для отладки. Поэтому я его заменяю на:
if(objectA.nValue == objectB.nValue)
{
...
goto END;
}
if(objectC.nValue == objectD.nValue)
{
...
goto END;
}
if(objectE.nValue == objectF.nValue)
{
...
goto END;
}
END:....
Особенно код с else'ами красиво смотриться, когда там сравнений так 10.


case... ? )

242
05 января 2007 года
Оlga
2.2K / / 04.02.2006
моя первая мысль =), но в данном примере не катит, судя по условиям в иф'ах. я в таких случаях иф ... елсе предпочитаю.
309
06 января 2007 года
el scorpio
1.1K / / 19.09.2006
3A3-968M
А какие могут быть сложности с блоком else if () ???
Я им всегда пользуюсь - просвети пожалуйста.

KoderAlex
case - это очень узкоспециализированный оператор, который работает только на проверку равенства целочисленным константам. А набор условий порою бывает гораздо сложнее :(
21K
06 января 2007 года
kerdan
18 / / 27.12.2006
Цитата: kosfiz
ты по аккуратнее со словами. язык необходим и это факт(с него половина студентов РФ начинают постигать программирование), стандарты тоже было бы неплохо знать.



Согласен, сам начинал с него. Причем года три юзал.
Но - смотреть в стандарт, когда все юзают tp7/bp7 - глупо.
Смотри в этот tp7/bp7, что ОН умеет и не умеет, а не стандарт.
Борланд задали стандарт, а не iso - это просто факт.
Я знаю эту парочку от и до и при этом не разу не вчитывался
в стандарт на Паскале. А некотрые со своим стандортом лепят
у себя в коде какую-то хрень.

Цитата: kosfiz
а чем тебе фортран не угодил? между прочим этот язык до сих пор используется в различных научных лабораториях и не даром такие пакеты как Matlab и MathCad его поддерживают. о том что он создан давно еще ничего не говорит.



Фортран и Паскаль и прочие раритеты я безмерно уважаю.
Это была просто ирония.

Цитата: kosfiz
человек, который умеет писать компактный код без проблем сможет разобрать и тот, что на 5 строк. если у тебя с этим проблемы, то ... не знаю что тебе сказать - это тебе минус причем огроменный.



Вы меня не правильно поняли. Более ценен программист, который
умеет писать комактно - самому проще и приятнее во всем.
И вообще-то я говорил, что когда вижу растянутый и не компактный
код, то я не понимаю ТОГО КТО ЭТО писал (ибо нефиг расписывать
всякую фигню...), а НЕ САМ КОД. Так что минус у Вас - это Вы не смогли
прочитать правильно мое сообщение. :)

257
06 января 2007 года
kosfiz
1.6K / / 18.09.2005
[quote=kerdan]Но - смотреть в стандарт, когда все юзают tp7/bp7 - глупо.
Смотри в этот tp7/bp7, что ОН умеет и не умеет, а не стандарт.
Борланд задали стандарт, а не iso - это просто факт.
Я знаю эту парочку от и до и при этом не разу не вчитывался
в стандарт на Паскале. А некотрые со своим стандортом лепят
у себя в коде какую-то хрень.[/quote]
согласен вот я это и писал nilbog'у если ты внимательно читал
[quote=kosfiz]я приведу тебе цитату Н. Вирта:"Фактический стандарт для Паскаля был определен компанией Borland просто потому, что ими был создан компилятор, который распространялся широко и дешево." Так что tp и bp - это стандарт + ко всему здесь почти у всех именно tp или bp, так что хорош про стандарты.[/quote]
далее
[quote=kerdan]Вы меня не правильно поняли.[/quote]
возможно
[quote=kerdan]Более ценен программист, который
умеет писать комактно - самому проще и приятнее во всем.[/quote]
это чем же он более ценен?

вообще-то тема давно уже сменилась.
252
07 января 2007 года
koderAlex
1.4K / / 07.09.2005
Цитата: el scorpio
3A3-968M
KoderAlex
case - это очень узкоспециализированный оператор, который работает только на проверку равенства целочисленным константам. А набор условий порою бывает гораздо сложнее :(


перегрузка оператора ) . хотя не помню , есть такое в паскале или нет .

241
08 января 2007 года
Sanila_san
1.6K / / 07.06.2005
Цитата: koderAlex
перегрузка оператора ) . хотя не помню , есть такое в паскале или нет .

Такого в Паскале не помню, но можно свести к какой-нибудь подходящей (почти всегда - самописной) функции, с которой case .. of работать будет. Решение, ИМХО, паллиативное, но... таков дух Паскаля. :)

252
16 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
Цитата: el scorpio
3A3-968M
KoderAlex
case - это очень узкоспециализированный оператор, который работает только на проверку равенства целочисленным константам. А набор условий порою бывает гораздо сложнее :(


пара пустяков (буду на си писать :) )

Код:
.....
long tmp;
.....
tmp=0;
if(objectA.nValue == objectB.nValue){tmp=tmp|0x0001};
if(objectC.nValue == objectD.nValue){tmp=tmp|0x0002};
if(objectE.nValue == objectF.nValue){tmp=tmp|0x0004};
//и т.д.
swith(tmp){
case 1: {...};break;
case 2: {...};break;
//и т.д.
   };

и никаких goto :)
242
16 февраля 2007 года
Оlga
2.2K / / 04.02.2006
имхо, не стоит дважды сравнение делать, также else добавить надо, иначе код не соответствует примеру ЗАЗа.
252
16 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
а вот и нет .)
присмотрись как работает код .
242
16 февраля 2007 года
Оlga
2.2K / / 04.02.2006
Цитата: koderAlex
а вот и нет .)
присмотрись как работает код .


посмотрела, но так ничего и не уведела...
в приведенном примере Заз, насколько я понимаю, идет речь о том, если объект А равен об. Б - делаем ряд операций и идем к Енд(etc.), а остальные условия не проверяются. не вижу чтобы ор поменял ситуацию, хотя может и не понимаю. я привыкла писать как можно проще, если это возможно.
в любом случае использовать иф'ы подобным образом, чтобы затем пользовать касе - ИМХО, изврат.

242
16 февраля 2007 года
Оlga
2.2K / / 04.02.2006
твои иф'ы имеют смысл, если важно проверить сколько из условий совпадают, и в зависимости от этого выполнить ряд операций.
252
16 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
смысл в том что
1)улучшаем читабальность
2)не используем goto
3)для любой комбинации получаем ветвление (не обязательно условия должны выполнятся )
242
16 февраля 2007 года
Оlga
2.2K / / 04.02.2006
Цитата: koderAlex
смысл в том что
1)улучшаем читабальность


сомневаюсь, все зависит от поставленной задачи.

Цитата:
2)не используем goto


иф ... елсе иф...елсе, и никаких гото, хотя если речь о комбинациях то не подходит, согласна

Цитата:

3)для любой комбинации получаем ветвление (не обязательно условия должны выполнятся )


ну если для любой то ладно, ну у ЗАЗа код без комбинаций условий ...

у тебя на 3 условия 8 вариантив, а у Заза по его коду на 3 условия будет 4...

252
16 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
Цитата: OlgaKr
сомневаюсь, все зависит от поставленной задачи.


ЗАЗ поставил условия )

Цитата: OlgaKr

иф ... елсе иф...елсе, и никаких гото, хотя если речь о комбинациях то не подходит, согласна


у ЗАЗа получилось с гото .

Цитата: OlgaKr

ну если для любой то ладно, ну у ЗАЗа код без комбинаций условий ...


у него цепочка if(){if(){};}else{if(){};}; - это комбинация вроде бы )

Цитата: OlgaKr

у тебя на 3 условия 8 вариантив, а у Заза по его коду на 3 условия будет 4...


необязательно использовать все ветви .

3.3K
24 мая 2007 года
Nethead
88 / / 24.11.2006
чем можно заменить goto???(Почему его лучше не использовать?):confused:
497
24 мая 2007 года
IL84
267 / / 24.04.2003
Использование goto - плохой тон в программировании. Заменить можно циклами - for/while/repeat и правильным построением программы.
242
24 мая 2007 года
Оlga
2.2K / / 04.02.2006
Цитата:
чем можно заменить goto?



Без кода врядли кто-то тебе точно ответит на этот вопрос, но в общем вполне достаточно циклов, if'ов и т.д., как и написал IL84.

314
18 июля 2007 года
fanto
374 / / 15.02.2003
Ха... где-то кто-то считает что goto суть плохо.....
Если бы это было так, то такого оператора просто не существовало бы....
GOTO нужен....
и зачастую позволяет СОКРАТИТЬ и повысить УДОБОЧИТАЕМОСТЬ кода в разы....
Единственный момент -- не прыгать !!В!! функции и циклы, а из них пожалуйста...

И еще один аргумент в пользу goto:
А как вы думаете реализованы while и тому подобные циклы?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог