VoLk88 написал:
И вобщем мы тут говорим не о программировании огромнейших длиннющих программ, а о текстовых квестах.
На сайте в целом - да. Но не в разделе "Флейм" (где мы разговариваем в т. ч. "обо всем на свете") и не в этом конкретном топике (где был вопрос, кто как пользуется goto в программировании вообще, в не только текстовых квестов).
Неактивен
Ишь ты, спеси то сколько .... какие мы гуманитарии, млин. И откуда такие познания о учебном процессе "технарей", милый? Дал бы я тебе от имени всех технарей в твое интеллигентное рыло, сынок... да, Заратустра не позволяет. Ты сам-то, прежде, чем игрулину свою написать, много if-теории прочитал, теоретик хренов?
Зерр, дружок, я кондидат в мастера спорта по боксу и жили бы мы в одном городе - рыло бы бито у тебя было, не сомневайся.
А игрулина моя - это всего 4 дня на программирования движка, написание сюжета и текстов, а также на весь дизайн. Игры я пишу не претендуя на всемирную славу, а просто от нечего делать.
Уважаемые, самые умные и хорошие, самые талантливые и честные, самые клёвые программисты и самые учёные из доучившихся, к вам обращаюсь. Мы тут говорили о конкретном операторе goto, а не о переходах как таковых. Логично предположить, что первое сообщение выглядело бы примерно так:
"Как вы относитесь к многострочным программам? Можно ли обойтись одной строчкой?".
Переходы всегда есть, а вот конекретно goto - нет!
Я про одно, а вы про другое, как малые дети всё равно что.
Разве что как цитату диалога (можно даже воображаемого) по аське с «близким другом». Типа как VoLk88 привёл лог общения с приятелем…
Меня обвиняют в фальсификации или я что-то не так понял?
...и не аська, а агент.
А ты, зеррр уважаемый, программист или писатель? Может и моё упущение, но в игры твои я не играл, да и как писателя тебя совсем не знаю, только вот на форуме и в ЖЖ читал, да и только.
Неактивен
VoLk88 написал:
Меня обвиняют в фальсификации или я что-то не так понял?
Расслабься, ты как всегда ничего не понял. Судя по тексту, диалог настоящий, поскольку твой собеседник как раз понимает в программировании. Даже тени мысли о том, что его ответы ты сочинил самостоятельно, не возникло. Цени таких людей, тем более что мнение его ты вроде как ценишь, учитывая как ты стушевался, стоило ему рассказать тебе то же самое, что и другие участники форума.
Но чтобы твоя мнительность не пропадала зря, отмечу, что твоя фраза «да тут утверждают, что блядь гото клёвый и частенько приходиться им пользоваться, чтобы не раздувать прогу до немыслимых размеров, но ведь это же всю структуру нарушает!» самое что ни на есть наглое враньё, поскольку ни одно утверждение из него не соответствует действительности.
Если же ты хочешь вернуться к теме использования goto, то в дальнейших рассуждениях (я надеюсь это будут рассуждения, а не очередная истерика — кандидату в мастера по боксу это, право, не пристало) учитывай тот факт, что народ программирует на разных языках и на разных устройствах, поэтому приводимые тобой примеры как можно легко обойти применение goto в других условиях просто не реализуемы. Ту задачу, что я приводил, реализовывать без goto было бы глупостью, поскольку это была не какая-нибудь программулька «hello, world», а написанная с нуля библиотека для работы КПК Palm с фискальным регистратором (кассовый аппарат в простонародье). В этой задаче главное было — чтобы всё работало чётко, чтобы код читался, чтобы работоспособность в наименьшей степени зависела от усложнённости алгоритмов (а это всё как раз дополнительные флаги, вынесенные в функции куски кода, добавленные циклы и всё остальное, что любители сказочных стандартов добавляют в программу, лишь бы goto не использовать). И библиотека эта работает вот уже несколько лет без единого сбоя. Так что в следующий раз, когда ты захочешь что-нибудь написать по теме, попробуй писать действительно по теме, а не оскорблять окружающих или повторять какие-то общие (пусть и громкие/авторитетные) фразы — большинство присутствующих все эти фразы уже слышали по сто раз и имели время обдумать и проверить их жизненность на практике.
Неактивен
VoLk88 написал:
Уважаемые, самые умные и хорошие, самые талантливые и честные, самые клёвые программисты и самые учёные из доучившихся, к вам обращаюсь. Мы тут говорили о конкретном операторе goto, а не о переходах как таковых. Логично предположить, что первое сообщение выглядело бы примерно так:
"Как вы относитесь к многострочным программам? Можно ли обойтись одной строчкой?".
Переходы всегда есть, а вот конекретно goto - нет!
Я про одно, а вы про другое, как малые дети всё равно что.
Наверное, я тупой, но в этом абзаце вообще ничего не понял.
А вообще эта тема была задумана не как повод к "священной войне" (хотя, каюсь, мог бы догадаться, чем оно все закончится) - мне просто действительно любопытно было узнать, для каких задач (в идеале - так с конкретными примерами) в современных условиях может применяться оператор безусловного перехода. Такая информация для меня особенно интересна в связи с тем, что я не являюсь профессиональным программистом (хотя в принципе программировать люблю), и теоретических знаний в этой области мне, увы, не хватает. То есть фактически я самым наикорыстнейшим образом собирался нагнуть весь наш форумский коллектив на бесплатные курсы повышения моей программерской квалификации;).
И, кстати, несмотря на весь флейм в прямом смысле этого слова, кое-что полезное я тем не менее почерпнул. Поэтому огромное спасибо всем участникам дискуссии.
VoLk88 написал:
А ты, зеррр уважаемый, программист или писатель? Может и моё упущение, но в игры твои я не играл, да и как писателя тебя совсем не знаю, только вот на форуме и в ЖЖ читал, да и только.
Zer, может, и не программист и не писатель (на это он гораздо лучше ответит сам), но одно могу сказать точно - для популяризации ИЛ в России он сделал (и делает) очень и очень немало... А обзоры его так точно читаются как классный приключенческий роман (в отличие от постов некоторых товарищей на форуме;)...)
Отредактировано uux (27.08.2007 06:42)
Неактивен
Уважаемый Olegus t.Gl.. (правда уважаемый), спасибо за мудрые замечания, но оскорблять я стал только в ответ и совсем этого не хотел, но "грубостью на грубость" - только так. Человек я мирный и спокойный, даже не смотря на спортивные достижения.
Только такой мудрый человек мог разрешить эту ситуацию. Я не могу похвастать программированием прошивок для кассовых аппаратов, но для многих компаний в нашем городе писал узкоспециализированный софт.
Боюсь моя вспыльчивсоть только из-за моего недопонимания (и не только моего как следствие) вот и всё.
Зерр конечно же великий популяризатор (да и в Красноярске я был. Даже возможно, что ещё приеду на какие-нибудь соревнования или сборы
), но после такой популяризации моя страсть к текстовым квестам немного поостыла.
У меня до сих пор чувство, что говорили мы о разных вещах... Всем спасибо!
Неактивен
Товарищи, если мне не изменяет память, то изначальная тема топика была о целесообразности использования оператора безусловного перехода goto в СТРУКТУРНЫХ языках программирования (речь шла о ТАДС). Коим не являются машинный код или ассемблер. Какой машинный код генерирует компилятор языка -- сугубо на совести компилятора. Язык -- это абстракция от машинного кода.
Моё мнение: goto в структурных языках не нужен. За 8 лет работы программистом (даже раньше, когда я перестал писать на Басике и Ассемблере) я ни разу не использовал оператор goto, и даже сейчас не могу представить случая, где его действительно стоит использовать. Наверное, сказывается уход от императивного программирования (вся программа -- большой main() ).
"Язык определяет то, о чём мы можем мыслить". Это из предисловия какой-то книги о программировании, может быть даже Страуструпа, не помню. Человек, изо дня в день программирующий только на ассемблере не найдёт общего языка с человеком, пищущим на Луа. ![]()
Пример из Кернигана и Ричи на языке C++ решается с помощью предназначенного для этого механизма исключений (exceptions). На худой конец, можно обойтись разбиением на функции, так, чтобы goto превратился в return. Я лично не люблю перебарщиваний и запихивания длиннющего алгоритма в одну функцию. Хорошее разбиение на функции только улучшает читабельность программы.
Кстати, для общего развития. Программистам на C/C++ будет интересно. http://digitalmars.com/d/overview.html
Язык D. Выглядит очень вкусно, захлебнулся слюной. Есть компилятор для Линуха.
Отредактировано Gremour (26.08.2007 22:58)
Неактивен
Gremour написал:
Товарищи, если мне не изменяет память, то изначальная тема топика была о целесообразности использования оператора безусловного перехода goto в СТРУКТУРНЫХ языках программирования (речь шла о ТАДС). Коим не являются машинный код или ассемблер. Какой машинный код генерирует компилятор языка -- сугубо на совести компилятора. Язык -- это абстракция от машинного кода.
Это в общем-то правильно (за исключением того, что о TADS речь не шла), просто потом дискуссия сместилась в сторону флейма;).
Gremour написал:
Пример из Кернигана и Ричи на языке C++ решается с помощью предназначенного для этого механизма исключений (exceptions). На худой конец, можно обойтись разбиением на функции, так, чтобы goto превратился в return. Я лично не люблю перебарщиваний и запихивания длиннющего алгоритма в одну функцию. Хорошее разбиение на функции только улучшает читабельность программы.
А как реализовать поэлегантнее пример Олегуса со вложенными условиями без goto? (Не в порядке возобновления священной войны, а просто действительно интересно;).
Неактивен
uux написал:
А как реализовать поэлегантнее пример Олегуса со вложенными условиями без goto? (Не в порядке возобновления священной войны, а просто действительно интересно;).
Конкретизируем задачу: во-первых, ограничение на стек (реальная вещь), во-вторых, кроме условий там были ещё и вложенные циклы…
Да и вообще, читайте статью Калинина Андрея «Религия и goto» (эту ссылку я приводил в начале обсуждения) — там всё расписано достаточно доходчиво, а насчёт состоятельности его как программиста — вот отзывы о нём как о преподавателе информатики МАИ…
Неактивен
VoLk88 написал:
Переходы всегда есть, а вот конекретно goto - нет!
Я про одно, а вы про другое, как малые дети всё равно что.
"Ничего не понимаю! Слова нет, а ЖОПА - есть!"(С) Вовочка...
Честно, говоря, тема очень веселит :-)
Неактивен
Gremour написал:
Пример из Кернигана и Ричи на языке C++ решается с помощью предназначенного для этого механизма исключений (exceptions). На худой конец, можно обойтись разбиением на функции, так, чтобы goto превратился в return.
Там голый С, без ++. Кстати, системные вещи на голом С пишутся. А вообще - согласен, можно всё сделать и через исключения на С++.
Да и вообще - на мой взгляд - к "гоуту" самое правильное отношение - это "нельзя, но если очень хочется (нужно), то - можно" :-)
Неактивен
Статья хорошая. Действительно, в зависимости от цели методы могут быть разными. Я привык рассматривать программирование с точки зрения
читабельности текста другим человеком. Как я уже говорил, работаем над общим проектом в коллективе. И экономия ресурсов сейчас редко себя оправдывает. Обычно оптимицация алгоритма начинается, когда результат работы программы не удовлетворяет потребностям.
uux написал:
А как реализовать поэлегантнее пример Олегуса со вложенными условиями без goto?
Допускаю, что это есть самое оптимальное с точки зрения производительности решение. Но переход внутри условий меня, честно говоря, коробит.
Отредактировано Gremour (27.08.2007 20:18)
Неактивен
Sfunx написал:
Там голый С, без ++. Кстати, системные вещи на голом С пишутся.
Критические места можно написать на ассемблере. А вообще, компиляторы языка C++ умные программы, и генерят отличный код, особенно с включенной оптимизацией. Глупо писать драйвер устройства на классах, где они вообще не нужны. Но использовать компилятор языка C++ (который включает в себя язык C) никто не мешает.
Неактивен
VoLk88 написал:
А ты, зеррр уважаемый, программист или писатель?
Не обижайся КМС, я сначала счел вопрос глупым. Начать с того, что "писатель" - это профессионал. Плохой он или хороший, это другой вопрос. Насколько я осведомлен, писателей здесь нет. Но потом я "проанализировал" вопрос и только теперь до меня дошла суть проблемы нашего сообщества. У нас кол-во Авторов превышает кол-во игроков во многие разы. И вопрос ты "программист или писатель" вполне естественен. В принципе, это можно понять. Очень много приходит людей понятие о IF имеющих весьма смутное, привлеченное лишь кажущейся простотой создания игры. Т.е. создать, то, что у нас называют "текстовый квест" действительно просто. А вот создание того, что достойно звания IF процесс куда более трудоемкий.
Но я несколько отвлекся, вот, собственно, ответ на твой вопрос:
Я ни то, и не другое. Я - игрок. Просто Игрок. Так, блин, бывает.
Неактивен
Так вот, Зерр, раз ты просто игрок, то, имхо, не должен делать такие выводы о "простоте программирования квестов", а тем более написать сам сюжет и придумать паззлы (даже тупые и простые) не так уж просто и ты это знаешь.
Я очень люблю твои обзоры и читаю их постоянно, но такие высказывания, как по поводу моей последней игры, имхо, не уместны от человека далёкого от программирования. Да, я знаю, что игра не сильная и ни на что не претендует, но не нужно этого. Я работал над парсером, сделал отличный движок, движок для лабиринта, написал три локации (очень объёмные, они разбиты на несколько локаций каждая) с альтернативными прохождениями (Хломид подбодрил и я начал работу), а вот после этой тёрки я бросил всю работу и желания возвращаться к ней нет никакого, хотя делал долго и получалось вроде неплохо. Кто-то будет тупо хаить, даже не зная как это делалось, чего стоило, а конструктивной критики почти не будет... А зачем мне это надо? Убивать своё время на ненужную работу? Удовольствия от работы над игрой в ближайшее время мне не удасться получить, а против себя я делать ничего не буду.
Простите, накипело.
Неактивен
VoLk88 написал:
Так вот, Зерр, раз ты просто игрок, то, имхо, не должен делать такие выводы о "простоте программирования квестов"
Сужу по РТАДС - я делал там набросок 6 локаций и пары-тройки пазлов : занял процесс около 2 дней, при том, что в программировании я абсолютный ноль и делал все исключительно на похожих примерах, которых в инете пруд-пруди. Были даже довольно сложные вещи, как смена названия и описания локаций в зависимости от состояния игрока - это мне ifn00b подсказывал. Это было конечно далеко от статуса готовой игры, но все-таки: два неполных дня (точнее два рабочих дня) и мини-игрулька готовая для альфа-теста испечена. Может твоя проблема в том, что ты делал свой движок, а не взял готовую систему?
VoLk88 написал:
Я очень люблю твои обзоры и читаю их постоянно, но такие высказывания, как по поводу моей последней игры, имхо, не уместны от человека далёкого от программирования.
Хмм, поправь меня если ошибаюсь, но о твоей игре я вообщем-то не отзывался. По той простой причине, что не играл в нее и даже не видел. CYOA вообще не мой жанр.
А про "рыло" - это меня, извини, заело твое небрежное высказывание о "технарях", ибо сам я из них.
Отредактировано zerrr (29.08.2007 17:51)
Неактивен
zerrr написал:
Сужу по РТАДС - я делал там набросок 6 локаций и пары-тройки пазлов : занял процесс около 2 дней, при том, что в программировании я абсолютный ноль
Кстати говоря, набросок -- это одно, а качественная игра (пусть даже маленькая) -- совсем другое. Не хочу никого испугать или обидеть, но стандартная библиотека RTADS не годится для быстрого и безболезненного создания качественной игры. Очень много непредусмотренных реакций на команды, которые может ввести игрок, от комичных до драматичных. Причём, когда начинаешь копать, пытаясь исправлять нелепые реакции, они начинаются плодиться и виснуть на тебе как бандерлоги на медведе Балу в мультфильме про Маугли. Например, область с управлением другими актёрами -- вообще девственный лес. В который лучше не ходить совсем.
(R)TADS мне очень нравится как система. Но. Библиотека нуждается в доработке (а точнее полной переработке). И, возможно, стоит взять одну из нестандартных библиотек. Иногда очень не хватает некоторых имплементаций, которые нужны практически в любой игре.
Но это уже совсем не про Гоуту. ![]()
Неактивен
zerrr написал:
Сужу по РТАДС - я делал там набросок 6 локаций и пары-тройки пазлов : занял процесс около 2 дней, при том, что в программировании я абсолютный ноль и делал все исключительно на похожих примерах, которых в инете пруд-пруди.
А нет желания повторить (и развить) опыт?![]()
Неактивен
VoLk88 написал:
Я работал над парсером, сделал отличный движок, движок для лабиринта, написал три локации (очень объёмные, они разбиты на несколько локаций каждая) с альтернативными прохождениями (Хломид подбодрил и я начал работу), а вот после этой тёрки я бросил всю работу и желания возвращаться к ней нет никакого, хотя делал долго и получалось вроде неплохо. Кто-то будет тупо хаить, даже не зная как это делалось, чего стоило, а конструктивной критики почти не будет...
Хм, на написание парсерного движка я тебя точно не подбадривал:). Потому как дело заведомо неблагодарное. А что касается терки, то никакого отношения к квестам она вообще не имела. Слава богу, сейчас все успокоились, но мне до сих пор кажется забавным, что такой безобидный вопрос вызвал куда более бурную реакцию, чем лучшие игры в русской ИЛ. Если просмотреть этот форум, то рассчитывать на столь эмоциональные оценки любой игры, в том числе и твоей, вряд ли приходится. Тупо хаять никто не будет - если только не пытаться запихнуть игру в глотку каждому игроку. С другой стороны, если хочешь оценки твоей работы и конструктивной критики, то разумное количество самопродвижения очень важно. Опыт подсказывает, что во избежание чрезмерного количества этой самой конструктивной критики не менее важно еще и найти бета-тестера
.
VoLk88 написал:
А зачем мне это надо? Убивать своё время на ненужную работу? Удовольствия от работы над игрой в ближайшее время мне не удасться получить, а против себя я делать ничего не буду.
Мне кажется, или это обиженный тон? Поверь мне как человеку беспристрастному: в этом топике нет абсолютно ничего, что давало бы тебе основание винить отписавшихся здесь в собственном бездействии. Пардон, если это прозвучало жестко. Зер абсолютно прав, говоря об избытке в коммьюнити авторов и недостатке игроков, но в этом некого обвинять. Тем более ни при чем здесь участники этой дискуссии. Удовольствие от работы над любым масштабным проектом, как правило, угасает по мере его создания. Ты уверен, что у тебя не этот случай? Если ничего не делать через себя, редкая игра вообще дописывалась бы. Собственно, так оно и происходит. Я сам когда-то давно пытался писать собственные движки (в т.ч. парсерные, ртадса тогда не было), оформлял их... и благополучно забивал на них, не дождавшись никакого стимула для продолжения работы. А ведь стимул в лучшем случае появится только когда работа будет закончена.
Подумай еще раз, не ищешь ли (даже подсознательно) повод, чтобы избавиться от поднадоевшей работы.
Отредактировано Xlomid[оманад] (29.08.2007 22:49)
Неактивен
uux написал:
А нет желания повторить (и развить) опыт?
Ну, видишь ли ... тогда комьюнити потеряет еще одного игрока
А если серьезно, то я слишком стар и ленив, чтобы учить программирование, а на одних "примерах" далеко не уедешь. К тому же, как заметил Xlomid : "Удовольствие от работы над любым масштабным проектом, как правило, угасает по мере его создания." Только в моем случае это еще более экстремально: я быстро загораюсь идеей, но остываю мгновенно.
И коли тема окончательно съехала в треп, то спрошу:
Насколько реально написать систему похожую на Inform 7, на великом-могучем? Ну, или перевести. Я слышал, что у 7-го Информа "детских болезней левизны" и прочих проблем, до черта, но все таки, если можно написать, что-то вроде Dead Cities, When in Rome и т.п. значит не все так плохо.
Неактивен
zerrr написал:
Насколько реально написать систему похожую на Inform 7, на великом-могучем? Ну, или перевести. Я слышал, что у 7-го Информа "детских болезней левизны" и прочих проблем, до черта, но все таки, если можно написать, что-то вроде Dead Cities, When in Rome и т.п. значит не все так плохо.
Ну, я сам об Inform 7 знаю только понаслышке, но, если вспомнить о том, что его перевели на испанский, то и на русский перевести, наверное, можно. Другой вопрос, что лично меня в обозримом будущем на это точно не хватит.
А, ну еще Adrift есть, где программирование в прямом смусле этого слова вообще не требуется...
Отредактировано uux (30.08.2007 06:47)
Неактивен
Подумай еще раз, не ищешь ли (даже подсознательно) повод, чтобы избавиться от поднадоевшей работы.
Я прекрасно знаю, что такое, когда работаешь только, чтобы закончить. Мне вообще теперь просто неинтересна тема ИЛ. Вряд ли вообще теперь буду работать в этом направлении. А про бездействие я вообще ничего не понял, суть в том, что мне просто теперь всё равно.
Неактивен
Все спорим господа. Так вот аргумент все тем, кому goto не нравится:
// Распознавание десятичного числа
private bool isNumber()
{
bool btochka = false, bdigit = false;
Set_StartPosLexem();
tochka://проверка на точку
if (this.symbol == '.')
{
//если первым символом попалась точка, то записываем истина
btochka = true;
//запись символа в значение лексемы
this.lexvalue.Append(this.symbol);
// чтение следующего символа
this.NetxtSymbol();
//после точки всегда должна идти цифра
if (this.isDigit(this.symbol))
{
//запись символа в значение лексемы
this.lexvalue.Append(this.symbol);
// чтение следующего символа
this.NetxtSymbol();
}
else //в случае не пренадлежности к классу чисел символа после, выдать ошибку
{
this.lx = lexType.lexError;
this.er = ErrorCode.lexNumber;
Set_StartPosLexem();
this.lexvalue.Length = 0;
return true;
}
//случае истинности первого условия, записывать каждый следующий символ в значение лексемы, если он принадлежит к классу чисел
while (isDigit(this.symbol))
{
this.lexvalue.Append(this.symbol);
this.NetxtSymbol();
}
}
porjadok://проверка на порядок
//после числа может стоять только порядок или ничего
if ((this.symbol == 'E' || this.symbol == 'Е' || this.symbol == 'e' || this.symbol == 'е') && (btochka || bdigit))
{
this.lexvalue.Append('E');
this.NetxtSymbol();
//Дальше должен стоять только + или минус
if (this.symbol == '+' || this.symbol == '-')
{
this.lexvalue.Append(this.symbol);
this.NetxtSymbol();
}
else//в противном случае ошибка
{
this.lx = lexType.lexError;
this.er = ErrorCode.lexNumber;
Set_StartPosLexem();
this.lexvalue.Length = 0;
return true;
}
//последним должна стоять цифра, обзначающая показатель степени
if (this.isDigit(this.symbol))
{
//запись символа в значение лексемы
this.lexvalue.Append(this.symbol);
// чтение следующего символа
this.NetxtSymbol();
}
else //в случае не пренадлежности к классу чисел символа после, выдать ошибку
{
this.lx = lexType.lexError;
this.er = ErrorCode.lexNumber;
Set_StartPosLexem();
this.lexvalue.Length = 0;
return true;
}
//случае истинности первого условия, записывать каждый следующий символ в значение лексемы, если он принадлежит к классу чисел
while (isDigit(this.symbol))
{
this.lexvalue.Append(this.symbol);
this.NetxtSymbol();
}
goto konec;
}
else//условие гарантирующие переход на konec, в случае определения точки или числа, после проверки порядка
if (btochka || bdigit) goto konec;
//----------------------------------------------------------------------------------
//если, условие оба условия выше не выполнены (смотри условие с точкой) и порядком, то проверяем на принадлежность к классу чисел
if (this.isDigit(this.symbol))
{
//если первым символом попалось число, то записываем истина
bdigit = true;
//запись символа в значение лексемы
this.lexvalue.Append(this.symbol);
// чтение следующего символа
this.NetxtSymbol();
} else //в случае не пренадлежности к десятичному числу отклонить истинность возвращаемого значения
return false;//здесь откат не нужен (всего один смивол, проверен)
//случае истинности первого условия, записывать каждый следующий символ в значение лексемы, если он принадлежит к классу чисел
while (isDigit(this.symbol))
{
this.lexvalue.Append(this.symbol);
this.NetxtSymbol();
}
//если первая строка закочилась, то определить три случая:
//1) символ является точкой, тогда переход на tochka
//2) символ является Е или е(русская или английская), тогда переход на porjadok
//3) если оба условия отвергнуты и там не стоит буква, тогда выдать тип лексемы, в противном случае ошибка
if (this.symbol == '.') goto tochka;
if (this.symbol == 'E' || this.symbol == 'Е' || this.symbol == 'e' || this.symbol == 'е') goto porjadok;
if (isLetter(this.symbol))
{//если следом после последней цифры в числе стоит буква значит ошибка
this.lx = lexType.lexError;
this.er = ErrorCode.lexNumber;
Set_StartPosLexem();
this.lexvalue.Length = 0;
return true;
}
konec:
//перед выдачей лексемы проерить, что за число (слитно с ним) не стоит буква или еще одна точка
//Проверка осущевствляется во всех 6 вариантах десятичного числа (три из них с показателем степени)
if (this.isLetter(this.symbol) || (btochka && this.symbol == '.'))
{
this.lx = lexType.lexError;
this.er = ErrorCode.lexNumber;
Set_StartPosLexem();
this.lexvalue.Length = 0;
return true;
}
this.Unset_Odin();
//определяем тип лексемы и возвращаем истиность о пренадлежности к десятичному числу.
this.lx = lexType.lexInt; return true;
}Если найдете способ написать весь этот алгоритм разбора числа формата целого и десятичного (пример 2 2.3 2.3e+3 и еще три, всего шесть вариантов), без goto так, чтобы не занимало циклов больше, чем данный алгоритм и было также логичным по ходу действия.
Написано на C#, алгоритм работает и взят из исходников моего проекта LASOFTGAME (рабочее название СТК). ЛУЧШЕГО АЛГОРИТМА НЕ НАШЕЛ!!!
И заметьте в C#, goto можно применить только в текущей функции, что и приводилось, как хорошее использование, а здесь уже стандарт. Так, что логичность здесь не порушишь, как в C++. Если не согласны, то приводите контраргументы, а раз нечего саказать, то и мусолить соленный огурец не хера, лучше от этого не станет! ![]()
Неактивен
Добавлю к своему последнему посту.
Задача решается не тривиальная, алгоритм сложный, поэтому упростить его без goto никак. А, если те кто высказывался о своих программерских талантах, скажет, что ему лень разбирать код или он его разобрать не может (кроме не знающи не то, что C++, даже C#). То какого фига, спрашивается вы называете себя программистами, если не можете разобрать чужой, да еще с комментариями. ![]()
Неактивен
В указанном случае можно подключить библиотеку регулярных выражений и упростить этот код до одной строки.
А вообще, современные компиляторы производят очень качественную оптимизацию, так что время исполнения что с "гоуту", что без, будет одинакова. Вопрос лишь в читабельности, и гоуту с ней плохо совместим.
Неактивен
Постоянно натыкаюсь на довод о читабельности, однако, народ, что вы в это вкладываете? Если взять не элегантные примеры на десяток-полтора строк, а многоэкранные листинги, то сказать, куда произойдёт переход, будет проще с goto (с его чётким указанием меток), чем если разбираться со вложенными if, for и т.п. Я уж не говорю, что придётся разгребать разного рода допонительные конструкции: флаги условия и прочее. Интересен вопрос в плане раскрытия смысла термина "читабельность"…
Неактивен