Помогите пожалуйста с логикой.
-
@wmbab гугл разве отключили? :) Поищи почитай, поймешь сам.
-
@wmbab Зря заминусовал @bigorat, я уже приводил вырезку из вики
Оператор goto в языках высокого уровня является объектом критики, поскольку чрезмерное его применение приводит к созданию нечитаемого «спагетти-кода». Впервые эта точка зрения была отражена в статье Эдсгера Дейкстры «Доводы против оператора GOTO», который заметил, что качество программного кода обратно пропорционально количеству операторов goto в нём. Статья приобрела широкую известность как среди теоретиков, так и среди практиков программирования, в результате чего взгляды на использование оператора goto были существенно пересмотрены. В своей следующей работе Дейкстра обосновал тот факт, что для кода без goto намного легче проверить формальную корректность.
Код с goto трудно форматировать, так как он может нарушать иерархичность выполнения (парадигму структурного программирования) и потому отступы, призванные отображать структуру программы, не всегда могут быть выставлены правильно. goto также мешает оптимизации компиляторами управляющих структур.
Некоторые способы применения goto могут создавать проблемы с логикой исполнения программы:
- Если некоторая переменная инициализируется (получает значение) в одном месте и потом используется далее, то переход в точку после инициализации, но до использования, приведёт к тому, что будет использовано значение, которое находилось в памяти, выделенной под переменную, до момента выделения (и которое, как правило, является произвольным и случайным).
- Передача управления внутрь тела цикла приводит к пропуску кода инициализации цикла или первоначальной проверки условия. Аналогично, передача управления внутрь процедуры или функции приводит к пропуску её предисловия (пролога), в котором производится инициализация (выделение памяти под локальные переменные и т. п.).
-
@Fox не стоит пытаться объяснить кому то что то, если человек не может приложить малейших усилий для поиска информации самосотоятельно, которая лежит вдоступном виде, то объяснять что то, это как метать бисер перед свиньями, грубо конечно, но факт :)
-
@bigorat, согласен, но с другой стороны не стоит плодить мифы о метках. Я так тоже что-то прочел на форуме давно про метки и избегал их. А потом вопрос стал изучать и понял, что технически любой цикл - это тоже самое. Как и вызов функции в нескольких местах. А изначально метки в БАСе глючно работали, поэтому лучше было их не использовать, но это уже давно не так.
У меня большие шаблоны были написаны без меток, но там куча ветвлений, поэтому приходилось все повторяющиеся куски засовывать в функции и вызывать по несколько раз. И это был реальный ад, а не просто «спагетти-код». Это вообще читать невозможно. Потом я перешел на метки, где функции не нужны и все стало круто.
-
@Antonio В Бас, когда меткой выходишь из функций из которой произошел вызов, то вызвавшая функция уже не помнит кто ее вызвал. Вообщем контексты теряются. Короче вывод в БАС не стоит использовать метки для выхода из функции в другую функцию.
-
@Antonio Ни кто не запрещает пользоваться функционалом BAS, тем более, что метки в нём есть. Если в каком то месте скрипта удобнее использовать их, то ради бога. Но чем их больше, тем сложнее весь скрипт диагностировать.
Однажды мне в личке просили помочь со скриптом, дак он полностью весь состоял из меток. Я насчитал около !пятидесяти! меток и уйму переходов. Там были функции, которые он не вызывал, а использовал через метки в разных участках кода.. Сказать что у меня потекла кровь из глаз, это ни чего не сказать...:d
- Я не призываю к холивару, быть меткам или нет. Каждый работает с тем, что ему привычнее.
-
@Denis_krsk, а уменя наоборот были проблемы из-за того, что я из функции вызывал другую функцию. БАС иногда просто останавливался при этом.
-
@Fox спасибо за ответ, хоть я про это в целом был в курсе.
@bigorat мы с тобой на форуме баса и я не экстрасенс, так что не зная что там у тебя было в голове, когда ты писал про "метки - зло", я вполне резонно предположил, что речь идет о какой-то специфике работы именно баса, возможно баге. Вот и спросил. Но рад, что помог тебе поднять твое ЧСВ с "гугл разве отключили" и "метанием бисера".
-
@Antonio Ни разу не было такого. У меня очень много таких вызов. Я всегда стараюсь все на функции разбивать. У меня скрипт как дерево :) Но пока я не вкурил, что метки зло то тоже были проблемы. Теперь я их почти не использую, а если использую то только в рамках одной функции.
-
@Fox, я тоже не бросаюсь в крайности. Я говорю о том, что если пишешь, что метки-зло, то нужно привести аргументы. Иначе это слишком категорично.
-
@Fox said in Помогите пожалуйста с логикой.:
Там были функции, которые он не вызывал, а использовал через метки в разных участках кода..
Я далек от программерских холиваров, но серьёзно, в чем тут для тебя была разница в чтении кода с вызовами функций? Это же абсолютно такой же переход.
-
@Denis_krsk said in Помогите пожалуйста с логикой.:
В Бас, когда меткой выходишь из функций из которой произошел вызов, то вызвавшая функция уже не помнит кто ее вызвал. Вообщем контексты теряются.
Поясни на примере, что это значит.
-
@Antonio На пальцах что-то вроде этого
Функция1 вызвала Функцию2, а та в свою очередь Функцию3. И если меткой выйти из фунции 3 в Функцию 2, то та может после своего выполнения не вернуться в функцию 1, а остановиться.
Причинной этому видимо является, то что пропускается момент инициализации функции 2.
-
@Denis_krsk, а, ну это писец, о котором я и говорил, относительно функций. Отлаживать код, в котором вот так функции постоянно вызывают другие функции - это иногда очень запарно. Ну в общем это уже дело вкуса. Я стараюсь максимально последовательно писать.
-
Просто были случаи, что в функции 3 был цикл, а в этом цикле условие при котором выполнение не имело смысла .А тупо continue не выйдешь из функции т.к. в цикле находишься вот я по лени своей и выходил меткой.
-
@wmbab said in Помогите пожалуйста с логикой.:
мы с тобой на форуме баса и я не экстрасенс, так что не зная что там у тебя было в голове, когда ты писал про "метки - зло", я вполне резонно предположил, что речь идет о какой-то специфике работы именно баса, возможно баге. Вот и спросил. Но рад, что помог тебе поднять твое ЧСВ с "гугл разве отключили" и "метанием бисера".
У меня все в порядке с ЧСВ, и за ваш счет я его поднимать не собираюсь уж точно, как я писал, пржде чем что то спрашивать попробуйте узнать это сами, поскольку вы таким образом превратитесь в подобие одного персонажа на форуме, который на любой чих требует сиюминутный ответ, вместо того что бы поискать информацию самому. Поэтому ни в коем разе вам это было не в обиду, и уж если вы знаете почему лучше не юзать метки в обычном програмировании то аналогию к BAS-у применить могли. За сим откланиваюсь :)
-
@Antonio В больших скриптах последовательный код и сложночитаем и приводит к большему дублированию кода, который потом сложно исправлять. Конечно если скрипт простой то я себя тоже не заморачиваю :)
-
@Denis_krsk, понятное дело, что мы не про простые скрипты говорим. Я к тому, что иногда лучше код продублировать, чем по 3-5 вызовов функции из функции делать. И это даст более читабельный и отлаживаемый код. А иногда нет.
-
@Antonio Ну тут да дело вкуса. Главное результат и уж точно никого не волнует красота кода :))