| Yoko http://forum.yoko.com.ua/ |
|
| Как избежать использования goto??? http://forum.yoko.com.ua/viewtopic.php?f=3&t=7392 |
Page 1 of 2 |
| Author: | Sanch [ 2006-04-16 21:39:50 ] |
| Post subject: | Как избежать использования goto??? |
Вобщем тк во всех скриптах goto выходит за пределы оборотов, что вызывает глюки, как написал йоко, написал новй скрипт, добавил его с остальным, а в нем все прально но из за непрального использования готу, глючат другие, подскажите че нить дельное плз, в основном готу я использую на проверку физла при касте. |
|
| Author: | Destruction [ 2006-04-16 21:55:01 ] |
| Post subject: | |
Переписывай все скрипты. Пример с GoTo Code: sub main() Пример без goto: Code: sub main() |
|
| Author: | Sanch [ 2006-04-16 22:37:23 ] |
| Post subject: | |
Ща на ночь глядя мне что то не думается никак, у меня что то вроде, после каста, если физл, он переходит на опять првоерку маны и каст, мне интересна сама технолгия замены, тк имхо вещь оч удобная, но глючит, зарание благодарю. |
|
| Author: | DerMeister =) [ 2006-04-17 00:12:27 ] |
| Post subject: | |
Sanch wrote: Ща на ночь глядя мне что то не думается никак, у меня что то вроде, после каста, если физл, он переходит на опять првоерку маны и каст, мне интересна сама технолгия замены, тк имхо вещь оч удобная, но глючит, зарание благодарю. -=...ЫЫЫ...=- Вобщем совет простой: просто навсегда забудь про goto и пиши все скрипты без него... поверь, это не сложно до всего самому догадатся... { Quote: использование циклов и процедурное программирование полностью исключают необходимость использования команды goto }
|
|
| Author: | DerMeister =) [ 2006-04-17 00:14:01 ] |
| Post subject: | |
Sanch wrote: ...имхо вещь оч удобная...
- ГЛУПОСТЬ, не говори это никому... просто засмеют |
|
| Author: | admir [ 2006-04-17 01:06:46 ] |
| Post subject: | |
у тебя стоит метка 1 ТУТ скрипт метка 2 ТУТ скрипт условие да на 2 условие да то на 1 (условие ,да -2 нет -1 ) как сделать цикл ... while условие 1 { .. while условие 2 { .. } } ========= с 1 меткой МЕТКА ТУТ ... условие ДА - метка while условие { .. } либо repeat .. until условие |
|
| Author: | Edred [ 2006-04-17 08:27:56 ] |
| Post subject: | |
Der wrote: Sanch wrote: ...имхо вещь оч удобная... - ГЛУПОСТЬ, не говори это никому... просто засмеют Глупость не признавать удобства гоуту. Если бы он был не нужен - его не было бы в языке. При этом он есть во всех языках программирования. Другое дело - его неудобство для структурного программирования. Для чтения кода написанного скрипта. Для анализа логики этого скрипта. И т. д. Именно поэтому гоуту стараются не использовать когда это возможно. Но если замена гоуту равнозначна введению сложной громоздкой структуры других операторов (иногда так бывает) - лучше использовать гоуту. Я думаю, примерно в 3-5% моих скриптов иногда используется гоуту, счас точно не помню, никогда не запоминал этого. Гоуту можно использовать без опаски, соблюдая парочку несложных правил: 1. Не выходить по гоуту из функций и процедур наружу. 2. Не выходить из циклов (то есть while, repeat, for) за их пределы |
|
| Author: | Sanch [ 2006-04-17 08:44:23 ] |
| Post subject: | |
Quote: 1. Не выходить по гоуту из функций и процедур наружу.
2. Не выходить из циклов (то есть while, repeat, for) за их пределы Все это я прочитал, до того как создать этот топ, но к сожалению после того как написал тучу криптов с применением готу, причем во всех скриптах он выходит за цыкл, и очередной скрипт написаный так, сделал так что в других скриптах он на готу начал ругаться, хотя до этого этого не случалось никогда, вобщем решил заменить готу, на repeat....until, тк у меня в скриптах готу применен пока только так. |
|
| Author: | DerMeister =) [ 2006-04-17 22:09:29 ] |
| Post subject: | |
Харошь гнать Не видел я в своей жизни еще таких ситуаций, гдеб вместо гоуту пришлось бы использовать какие-то сверхсложные условия... А гоуту всегда можно заменить (без каких-либо сложностей) , если правильно пользоватся процедурами... |
|
| Author: | DerMeister =) [ 2006-04-17 22:11:29 ] |
| Post subject: | |
Sanch wrote: Quote: 1. Не выходить по гоуту из функций и процедур наружу. 2. Не выходить из циклов (то есть while, repeat, for) за их пределы Все это я прочитал, до того как создать этот топ, но к сожалению после того как написал тучу криптов с применением готу, причем во всех скриптах он выходит за цыкл, и очередной скрипт написаный так, сделал так что в других скриптах он на готу начал ругаться, хотя до этого этого не случалось никогда, вобщем решил заменить готу, на repeat....until, тк у меня в скриптах готу применен пока только так. А ты не лепи в циклы по многу действий... используй процедуры... Разделяй алгоритм на блоки... Кароч, харошь гнать! ГОуТУ в отстой... |
|
| Author: | Grin [ 2006-04-17 22:32:04 ] |
| Post subject: | |
Раздвоение личности? |
|
| Author: | Edred [ 2006-04-17 22:50:25 ] |
| Post subject: | |
Der wrote: Харошь гнать Не видел я в своей жизни еще таких ситуаций, гдеб вместо гоуту пришлось бы использовать какие-то сверхсложные условия... Мало значит ты видел вообще ситуаций... Я с головы придумывать не буду, но подобные ситуации бывают. Железно. И вообще: чтобы оценивать что есть гоуту для скрипта, надо почитать как скриптовый модуль работает... Не знаю, есть ли у тебя такой файлик, но вот цитата: Quote: Идея парсера
Собственно заключается в том, чтобы использовать Bison по максимуму. Единственное ограничение – Бизон рассчитан на написание компиляторов. То есть таких программ, в которых переданный скрипт просматривается целиком и притом всего один раз. У меня же интерпретатор. А в интерпретаторе, как известно, части скрипта могут вообще не выполняться (например, тело IF) или выполняться несколько раз (в случае цикла). Как я из этого выкручиваюсь? Тупо. Бизон генерирует разборщик грамматики yyparse, который зависит от внешней функции yylex, сообщающей ему, какое именно слово требуется разобрать в дальнейшем. Так я в функции yylex вру что, например, в случае ложного условия IF тело до ENDIF пустое, а в случае цикла FOR a=1 to 10, тело цикла повторяется 10 раз. Правда в этом случае пришлось функцию yylex сделать слишком «интеллектуальной»: она сама определяет, когда надо убрать строки, а когда наоборот. К счастью «добавление» лишних строк осуществляется простой установкой внутреннего указателя ScriptPos в соответствующую позицию (кстати, таким же образом реализован GoTo). А «удаление» строк сделано функциями SkipToEndIf, SkipToCR, SkipToElseOrEndif, SkipToWend и т.д. Их назначение ясно из названия. Комментарии по тексту парсера находятся в myparser.h, по синтаксису в script.y. Еще одно замечание. Главной частью парсера является класс TVariable, который, несмотря на название, хранит не только переменные, но и классы, массивы, а так же море внутренней информации используемой в основном внутри script.y Так что как видишь, гоуту для скрипта не представляет в обработке каких-либо сложностей, не сложнее ифа. |
|
| Author: | DerMeister =) [ 2006-04-17 23:02:06 ] |
| Post subject: | |
Вобщем, хороший программист никогда не использует команду goto... вот это железно. А до парсера мне до лампочки что там и как работает... раз команда гоуту не может выводить из цикла она совершенно не нужна! Всё очень красиво реальзуется через процедуры... |
|
| Author: | DerMeister =) [ 2006-04-17 23:04:17 ] |
| Post subject: | |
Grin wrote: Раздвоение личности?
Нет, просто так получилось... я имел ввиду что если замена гоуту на что то другое приводит к возникновению кучи условий вместо красивого алгоритма то это значит что у скриптописателя бардак в голове и пора пить пиво... |
|
| Author: | Edred [ 2006-04-17 23:15:25 ] |
| Post subject: | |
Der wrote: Вобщем, хороший программист никогда не использует команду goto... вот это железно.
Хороший программист старается не использовать команду гоуту. Потому что хороший программист пишет обычно большие скрипты, сложно структурированные, модульные, и хорошему программисту часто приходится залезать в эти скрипты и что-то изменять, совершенствовать, править. А команда гоуту затрудняет чтение такого скрипта. И все. Больше ничего. Все остальное - фантазии. ЗЫ: скрипты = программы ЗЗЫ: поверь моему двадцатилетнему (с лишком) опыту программирования. Я знал очень много высококлассных программеров. Да и сам когда-то был таким. |
|
| Author: | DerMeister =) [ 2006-04-17 23:21:23 ] |
| Post subject: | |
Edred wrote: Der wrote: Вобщем, хороший программист никогда не использует команду goto... вот это железно. Хороший программист старается не использовать команду гоуту. Потому что хороший программист пишет обычно большие скрипты, сложно структурированные, модульные, и хорошему программисту часто приходится залезать в эти скрипты и что-то изменять, совершенствовать, править. А команда гоуту затрудняет чтение такого скрипта. И все. Больше ничего. Все остальное - фантазии. ЗЫ: скрипты = программы ЗЗЫ: поверь моему двадцатилетнему (с лишком) опыту программирования. Я знал очень много высококлассных программеров. Да и сам когда-то был таким. Ой мля, нун@х с вами спорить... у меня Батя отличный программист, и когда я был маленький и он меня пытался научить программировать. Одно из первых что он мне сказал: "Про goto забудь раз и навсегда... Вот так... |
|
| Author: | Destruction [ 2006-04-17 23:27:37 ] |
| Post subject: | |
Der wrote: Edred wrote: Der wrote: Вобщем, хороший программист никогда не использует команду goto... вот это железно. Хороший программист старается не использовать команду гоуту. Потому что хороший программист пишет обычно большие скрипты, сложно структурированные, модульные, и хорошему программисту часто приходится залезать в эти скрипты и что-то изменять, совершенствовать, править. А команда гоуту затрудняет чтение такого скрипта. И все. Больше ничего. Все остальное - фантазии. ЗЫ: скрипты = программы ЗЗЫ: поверь моему двадцатилетнему (с лишком) опыту программирования. Я знал очень много высококлассных программеров. Да и сам когда-то был таким. Ой мля, нун@х с вами спорить... у меня Батя отличный программист, и когда я был маленький и он меня пытался научить программировать. Одно из первых что он мне сказал: "Про goto забудь раз и навсегда... Вот так... Это в другом языке было |
|
| Author: | DerMeister =) [ 2006-04-17 23:30:10 ] |
| Post subject: | |
Да какая разница какой язык, да хоть BrainFuck!!! Хотя это уже совсем другая история |
|
| Author: | Grin [ 2006-04-18 00:10:27 ] |
| Post subject: | |
о да фак брен это классика;))) нравились мнетакие приколы;))) нуапоповоду гоуту... как и всем процесору свойственная ошибка;)) так вот существует такое понятие как проскок;) в чем он проевляется то что указатель в памяти может быть неправельно выставлен... И что быэто исправитьидет проверкаиповторное выставление...так воткогда идетскачек на большие дистанцции проскокна иболее вероятен;) Но поверьте это не как не скажетсянавас и на ваших скриптах;) этоувсе уровни памитей процесса и другойдребедени;) все это относительно... гоуту обыкновеный без условныйпереход... только как как он выполнен в этом скриптовоммодуле... оставляет желать лутшего... Вобщем это не повод длядраки... |
|
| Author: | flake [ 2006-04-18 00:14:04 ] |
| Post subject: | |
Ну чтож.. я опять, побив рекорд (дойдя от вино-водочного магазина до кондиции за 2.5 минуты) полез постить на форуме. Раньше (когда Цитадель работала) я постоянно использовал функции с GoTo. На крутого програмиста я не притендую, т.к. крмое инжекта я писал код только на уроках паскаля в 9 классе... Так вот, GoTo c выходом за приделы цыкла ни разу не выдавал ошибки ни у меня, ни у половина шарда, которые моими скриптами пользовались. Вот пример такого "кривого" GoTo: Code: ################# |
|
| Page 1 of 2 | All times are UTC+02:00 |
| Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |
|