Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
17.08.2007 21:38

uux
Участник (+887, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1625

Великий и могучий Гоуту Неубиваемый

Тут перевод TADS-мануала неожиданно натолкнул меня на мысль: что может заставить современнх программистов использовать оператор безусловного перехода a.k.a. goto? Речь, естественно, идет не о программировании на Ассемблере, Fortran 66 и т. п., а о более-менее структурированных языках, позволяющих теоретически вообще без него обойтись. Обращаюсь к программистам среди наших форумчан (их, к счастью, есть у нас:): пользуетесь ли вы оператором goto и в каких целях?

Начну, как положено, с себя. Я goto пользуюсь, пожалуй, исключительно при программировании на Visual Basic for Applications. Делаю это по следующим причинам: во-первых, ряд процедур удобнее генерировать при помощи встроенных "визардов", а они их генерят как раз с активным использованием goto. Править каждый раз такую процедуру вручную, убирая goto - значит сводить на нет все преимущества автоматизации;). Во-вторых, безусловный переход на метку в VBA удобно использовать при проверке на возникновение ошибки. В этом случае все обработчики ошибок локализуются в конце процедуры, что делает код в целом более читаемым. И, хотя теоретически подобной группировки можно добиться и другими средствами (и, например, программируя на Паскале, я бы совершенно точно организовал такую группировку без goto), в VBA такой способ кажется почему-то наиболее естественным и удобным.

Отредактировано uux (17.08.2007 21:40)

Неактивен

0    0    #2
21.08.2007 20:38

uux
Участник (+887, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1625

Re: Великий и могучий Гоуту Неубиваемый

VoLk88 написал:

Спину вареньем не намазть? На грубость только так и могу ответить.

Причем тут грубость? Олегус совершенно резонно попросил привести пример реализации приведенного им алгоритма без goto после того, как Вы, уважаемый Volk88, отделались общими словами.

Кстати, для пуристов и апологетов структурного программирования - вот как это можно сделать без ГоуТу:

Код:

ДолойГоуту=false
УСЛОВИЕ 1 ИЛИ ДолойГоуту
    Если НЕ ДолойГоуту
      действие 1
      действие 2
    КонецЕсли
    действие 3
    ДолойГоуту=false
    действие 4
    УСЛОВИЕ 2 И (НЕ ДолойГоуту)
        действие 5
        действие 6                 
        УСЛОВИЕ 3 И (НЕ ДолойГоуту)
            действие 7
            действие 8
            УСЛОВИЕ 4 И (НЕ ДолойГоуту)
                Если НАМ ОЧЕНЬ НУЖНО НА ДЕЙСТВИЕ 3
                   ДолойГоуту=true
                КонецЕсли
            КОНЕЦ УСЛОВИЯ 4
            Если НЕ ДолойГоуту
              действие 9
            КонецЕсли
        КОНЕЦ УСЛОВИЯ 3
        Если НЕ ДолойГоуту
           действие 10
        КонецЕсли
    КОНЕЦ УСЛОВИЯ 2
    Если НЕ ДолойГоуту
       действие 11
    КонецЕсли
КОНЕЦ УСЛОВИЯ 1

(Я молчаливо предполагал, что пара УСЛОВИЕ-КОНЕЦ УСЛОВИЯ - это цикл. Если это не так, то как минимум УСЛОВИЕ 1-КОНЕЦ УСЛОВИЯ 1 придется сделать циклом).

В целом, наверное, код читается, хотя, конечно, громоздко... да и эффективность упадет в разы (в связи с тем, что количество условных операторов резко возросло).

VoLk88 написал:

Олегус, дорогой, на кого учишься? По роду своей специализации я однозначно знаю, что GoTo - ненужный и не незаменимый оператор.

Незаменимых операторов вообще нет (за исключением, пожалуй, условного;).

Отредактировано uux (21.08.2007 21:07)

Неактивен

0    0    #3
22.08.2007 22:50

uux
Участник (+887, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1625

Re: Великий и могучий Гоуту Неубиваемый

VoLk88 написал:

2Sfunx
Какая глупость про if-goto... в селект-кейс (на С) вообще все пункты выполняются до бреак, начиная с отмеченого, и он является "полуаналагом" if then else (elseif elseif elseif...) end if (это для пущей понятливости)

Sfunx говорил не о внешнем сходстве (о котором толкуете Вы), а о внутреннем представлении... Говоря примитивно, select-case - это своего рода мнемокод для "структурированной" записи конструкции if-goto.

VoLk88 написал:

И линух - не самая удобная (это 100%) и надёжная уж п(р)оверь. Виндой пользуются в России 95% пользователей и софт в основном под неё пишут. Дрова хрен под линух найдёшь, да просто КУЧА НЕДОСТАТКОВ! Но не о линухе...

Я не разделяю мнения Sfunx'а об однозначном и безоговорочном преимуществе Linux перед Windows, но цель его ссылки была не в этом. Он привел это как пример серьезной программы на структурном языке программирования, где, тем не менее, используется goto. И привел он этот пример в качестве контр-аргумента на Ваше безапелляционное (и ничем, кроме апломба, не подтвержденное) утверждение о том, что "использующий goto несостоятелен как программист" (поскольку считать несостоятельными авторов Linux - очевидная нелепость).

VoLk88 написал:

Если никто из вас не может без GoTo обойтись это совсем не значит, что больше никто не сможет! Короче, GoTo не есть истина и всегда обхожу эту дрянь, а ты, дорогой Sfunx можешь и дальше пользоваться чем тебе угодно, в любых целях и количествах.

Уверен, Sfunx необычайно счастлив и польщен таким милостивым разрешением.

VoLk88 написал:

А если бы ты был повнимательнее при работе с отладчиком, то заметил бы, что jmp, jp, jnz не всегда используются как GoTo, чаще это тот самый If.

Т. е. и в Ассемблере можно обойтись без goto? Да, это действительно новое слово в программировании.

VoLk88 написал:

А с машиной Тьюринга игрался? Читал статьи самого Тьюринга или Поста? Нет? Оно и видно...

А Вы омуля на Байкале ели, уважаемый Volk88?

VoLk88 написал:

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

VoLk88 написал:

Пусть тушуются все кому не лень над голыми фактами, но киселём расплываться перед недопрограммистами я не собираюсь (и врядли кто-то хочет).

Если уж Вы высказываете свое мнение, то будьте любезны (и готовы) его обосновать. А если не можете и не хотите, то либо держите его при себе, либо как минимум не удивляйтесь, что на Вас "нападают".

Вы тут ссылаетесь на "технари" (я только не понял, на технические ВУЗы или на техникумы), а сами ведете спор именно в таком ключе: не пользуйтесь goto, потому что это низзя! Раз пользуетесь goto - значит, козлы!

VoLk88 написал:

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

А вот это уже будет банальный плагиат.

Неактивен

0    0    #4
23.08.2007 06:11

uux
Участник (+887, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1625

Re: Великий и могучий Гоуту Неубиваемый

Xlomid[оманад] написал:

Елки-палки, вы бы так игры обсуждали... а еще лучше - писали, вовсю используя свои программистские таланты (хотя, ясное дело, профессиональным программистам среди форумчан и так более чем хватает практики).

Хлом, в десятку!wink

Неактивен

0    0    #5
23.08.2007 18:31

uux
Участник (+887, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1625

Re: Великий и могучий Гоуту Неубиваемый

VoLk88 написал:

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

На сайте в целом - да. Но не в разделе "Флейм" (где мы разговариваем в т. ч. "обо всем на свете") и не в этом конкретном топике (где был вопрос, кто как пользуется goto в программировании вообще, в не только текстовых квестов).

Неактивен

0    0    #6
26.08.2007 00:46

uux
Участник (+887, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1625

Re: Великий и могучий Гоуту Неубиваемый

VoLk88 написал:

Уважаемые, самые умные и хорошие, самые талантливые и честные, самые клёвые программисты и самые учёные из доучившихся, к вам обращаюсь. Мы тут говорили о конкретном операторе goto, а не о переходах как таковых. Логично предположить, что первое сообщение выглядело бы примерно так:
"Как вы относитесь к многострочным программам? Можно ли обойтись одной строчкой?".
Переходы всегда есть, а вот конекретно goto - нет!
Я про одно, а вы про другое, как малые дети всё равно что.

Наверное, я тупой, но в этом абзаце вообще ничего не понял.

А вообще эта тема была задумана не как повод к "священной войне" (хотя, каюсь, мог бы догадаться, чем оно все закончится) - мне просто действительно любопытно было узнать, для каких задач (в идеале - так с конкретными примерами) в современных условиях может применяться оператор безусловного перехода. Такая информация для меня особенно интересна в связи с тем, что я не являюсь профессиональным программистом (хотя в принципе программировать люблю), и теоретических знаний в этой области мне, увы, не хватает. То есть фактически я самым наикорыстнейшим образом собирался нагнуть весь наш форумский коллектив на бесплатные курсы повышения моей программерской квалификации;).

И, кстати, несмотря на весь флейм в прямом смысле этого слова, кое-что полезное я тем не менее почерпнул. Поэтому огромное спасибо всем участникам дискуссии.

VoLk88 написал:

А ты, зеррр уважаемый, программист или писатель? Может и моё упущение, но в игры твои я не играл, да и как писателя тебя совсем не знаю, только вот на форуме и в ЖЖ читал, да и только.

Zer, может, и не программист и не писатель (на это он гораздо лучше ответит сам), но одно могу сказать точно - для популяризации ИЛ в России он сделал (и делает) очень и очень немало... А обзоры его так точно читаются как классный приключенческий роман (в отличие от постов некоторых товарищей на форуме;)...)

Отредактировано uux (27.08.2007 06:42)

Неактивен

0    0    #7
27.08.2007 07:06

uux
Участник (+887, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1625

Re: Великий и могучий Гоуту Неубиваемый

Gremour написал:

Товарищи, если мне не изменяет память, то изначальная тема топика была о целесообразности использования оператора безусловного перехода goto в СТРУКТУРНЫХ языках программирования (речь шла о ТАДС). Коим не являются машинный код или ассемблер. Какой машинный код генерирует компилятор языка -- сугубо на совести компилятора. Язык -- это абстракция от машинного кода.

Это в общем-то правильно (за исключением того, что о TADS речь не шла), просто потом дискуссия сместилась в сторону флейма;).

Gremour написал:

Пример из Кернигана и Ричи на языке C++ решается с помощью предназначенного для этого механизма исключений (exceptions). На худой конец, можно обойтись разбиением на функции, так, чтобы goto превратился в return. Я лично не люблю перебарщиваний и запихивания длиннющего алгоритма в одну функцию. Хорошее разбиение на функции только улучшает читабельность программы.

А как реализовать поэлегантнее пример Олегуса со вложенными условиями без goto? (Не в порядке возобновления священной войны, а просто действительно интересно;).

Неактивен

0    0    #8
29.08.2007 21:47

uux
Участник (+887, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1625

Re: Великий и могучий Гоуту Неубиваемый

zerrr написал:

Сужу по РТАДС - я делал там набросок 6 локаций и пары-тройки пазлов : занял процесс около 2 дней, при том, что в программировании я абсолютный ноль и делал все исключительно на похожих примерах, которых в инете пруд-пруди.

А нет желания повторить (и развить) опыт?wink

Неактивен

0    0    #9
30.08.2007 06:45

uux
Участник (+887, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1625

Re: Великий и могучий Гоуту Неубиваемый

zerrr написал:

Насколько реально написать систему похожую на Inform 7, на великом-могучем? Ну, или перевести. Я слышал, что у 7-го Информа "детских болезней левизны" и прочих проблем, до черта, но все таки, если можно написать, что-то вроде Dead Cities, When in Rome и т.п. значит не все так плохо.

Ну, я сам об Inform 7 знаю только понаслышке, но, если вспомнить о том, что его перевели на испанский, то и на русский перевести, наверное, можно. Другой вопрос, что лично меня в обозримом будущем на это точно не хватит.

А, ну еще Adrift есть, где программирование в прямом смусле этого слова вообще не требуется...

Отредактировано uux (30.08.2007 06:47)

Неактивен

0    0    #10
15.10.2007 21:38

uux
Участник (+887, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1625

Re: Великий и могучий Гоуту Неубиваемый

Olegus t.Gl. написал:

Я, например, тоже склоняюсь к мысли, что лучше бы, если точка выхода из процедуры/функции одна, хотя порой это всё же приводит к излишней запутанности, но вот операторы "continue" и "break" довольно близки идеологически к естественному языку, так что, на мой взгляд, смотрятся уместно.

Да и вообще, излишний пуризьм до добра не доводит. Я вот вспоминаю книжку по Паскалю (не самую плохую, кстати), где автор в главе, посвященной ООП, утверждал, что в идеале все поля объекта должны быть скрыты от программиста, и последний должен взаимодействовать с ними исключительно через методы. Т. е. типа если у объекта есть поля x, y, то писАть вот так

Код:

with object do
   x:=1;
   y:=2;
end with;

не круто. Обязательно надо внутри объекта определить некий метод:

Код:

procedure SetXY(FirstVar, SecondVar: integer); virtual;
begin
  x:=FirstVar;
  y:=SecondVar;
end;

и впоследствии для обращения к этим полям использовать исключительно вызов

Код:

SetXY(1, 2);

К чести автора, его запала хватило только на пример, иллюстрирующий данную главу; впоследствии он прекрасно обращался к полям объекта наиболее естественным образом.

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

Неактивен

Powered by PunBB
© copyright 2001–2026 iFiction.Ru