Перейти к содержанию

Можно ли ставить несколько else на один if


  

5 проголосовавших

  1. 1. Сколько else возможно на один if

    • Одно
      0
    • Примерно столько, сколько и вкладываемых ифов
      1
    • Что за бред? Для одного ифа одно элсе
      4


Рекомендуемые сообщения

Спор с _aL_ про скрипты.

 

Вариант Ола.

short doOnce

       if ( doOnce == 0 )
       set doOnce to 1
       
  if  ( GetDistance, Player < 1500 )

       startCombat "_al_daedroth"
       
               else
       startCombat "_al_atronach_flame"

               else
       startCombat "_al_atronach_frost"

               else
       startCombat "_al_atronach_storm"

               else
       startCombat "_al_bonelord"

               else
       startCombat "_al_Bonewalker_Greater"

               else
       startCombat "_al_dremora_lord"

               else
       startCombat "_al_golden saint"

               else
       startCombat "_al_hunger"

               else
       startCombat "_al_lich_barilzar"
       
       endif
       endif

    set doOnce to 0

ИМХО Правильный вариант.

Begin 01_game_daedra_al_dmistakes
short doonce
if ( doonce == 1 )
return
endif
  if  ( GetDistance, Player < 1500 )
       set doonce to 1;иф все равно будет завершен
       startCombat "_al_daedroth"
       startCombat "_al_atronach_flame"
       startCombat "_al_atronach_frost"
       startCombat "_al_atronach_storm"
       startCombat "_al_bonelord"
       startCombat "_al_Bonewalker_Greater"
       startCombat "_al_dremora_lord"
       startCombat "_al_golden saint"
       startCombat "_al_hunger"
       startCombat "_al_lich_barilzar"
               endif
end

(Ол)

"Муурн проверь свой скрипт, повесь его на всех даедр и у тебя умрут только даедроты! Я программист по образованию, движок морыча интересная штука, если бы твой скрипт работал как и сказал, я бы уже давно полноценную доту сделал в морровинде! Зацикливаться твой скрипт будет даже без наличия цикла, игра будет постоянно виснуть и погибнут лишь даедроты! Не веришь - проверь!

Насчет старткомбата - он подвигает объекта, находящегося под скриптом атаковать... и вот тут то на сцену вылазает даедрот! После того как он убит твой скрипт кончается. "

(Я)

"Поверь моему опыту. Я таких уже много вешал. Между прочим, зацикливаться не будет. После установки дуонс всегда идет return. Т.е. дальше скрипт не проигрывается, для экономии места.

 

P.S. Если вы программист, то знали бы, что на один иф одно елсе. "

(Ол)

"елсов может быть сколько угодно))))

Объясню:

- ты задал условие - прийти на свидание! Сколько способов тебе добраться до места назначения? Правильно, немало: пешком, на автобусе, на машине и т.д. Вот тебе куча елсов на один иф. Точно так же и в скрипте, кто тебе сказал, что на один иф один елс???

И кстати виснуть будет! Ты прежде чем говорить поверь, сначала ПРОВЕРЬ. Согласись, что слово проверь весомее поверь! И насчет того, что ты раньше много так делал. Скинь мне я посмотрю, если у тебя и вправду ничего не виснет! "

(Я)

"Я проверил. Сейчас скрин. Вы еще забыли про референс. Выбирается всегда первый. А у вас их четыре. Потому дремору я поближе поставил.

 

http://elasveel.ucoz.ru/_fr/0/8503914.jpg

"

 

У меня ничего не виснет.

 

 

"(Снова я)

Неправильно. Условие быть на свидании, добираться -- процедура или функция. Ты не на свидании == else."

(Ол)

"Если ты не на свиданиии то -

 

ты добираешься пешком

елс ты едешь на автобусе

елс ты едешь на трамвае и т.д.

 

Причем тут процедуры и функции?

 

Извини, но теперь не знаю, что и думать про тебя, на скрине даедры под моими скриптами, в том файле что ты мне скинул никаких изменений в моих скриптах не нашел, даже даедры заблокированы мною же давно еще! И что же ты исправил, м? "

(Я)

"Переведем в скрипты:

иф я не дошел до места свидания

если рэндом 1 -> команда AITravel свидание

если рэндом 2 -> искать автобус

если рэндом 3 -> искать трамвай

 

Элсе, просвещу вас, "иначе". Если условие не выполнено. В вашем алгоритме получается: если я на свидании, еду на... "

 

 

(Ол)

"В общем что то насчет примеров тяжело пошло. Ну ладно. Это был пример нескольких елсов, зачем было раздувать его так? Спроси у кого угодно, сколько на один иф можно елсов делать!

Насчет плагинов... Только ты не учел, что скрипты нужно ТВОИ на ВСЕХ повесить! причем один и тот же ТВОЙ скрипт на всех. Вот и проверь! "

Вот и причина переноса разборки. Основной вопрос: возможно ли более одного else на один if?

 

Вывод:

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

Элсе обратно ифу. Если в ифе стоит условие: это должно быть больше, то в элсе наоборот: это должно быть меньше.

 

Принято мною на основе того, что теория Ола или Ала основана на непонимании значения слова и команды скрипта. Другой же теории(и практики) про if else у меня нет. Если у вас появится обоснованная и логичная -- пишите сюда.

 

Изменено пользователем Муурн Шепард
Ссылка на комментарий
Поделиться на другие сайты

Вообще, насколько я знаю, в ТЕСКС3 на 1 иф 1 элс. Соответственно, все условия должны иметь и то, и другое, по 1 комплекту на каждый результат.
Ссылка на комментарий
Поделиться на другие сайты

Я могу сказать, что забыл return в конце своих скриптов и все.

 

Вообще, насколько я знаю, в ТЕСКС3 на 1 иф 1 элс. Соответственно, все условия должны иметь и то, и другое, по 1 комплекту на каждый результат.

 

Необязательно, можно несколько else'в делать, блин если не верите пересмотрите скрипты ежа (имени Скального Наездника).

Изменено пользователем Fr0st Ph0en!x
Ссылка на комментарий
Поделиться на другие сайты

Необязательно, можно несколько else'в делать, блин если не верите пересмотрите скрипты ежа (имени Скального Наездника).

Надеюсь, вы не перепутали с elseif.

 

P.S. Качать лень, но else всегда один вариант на иф. Потому много раз else ничего не дадут.

 

"Давай заодно и с этим поспорим!"

Тролль, тучный и с регенерацией.

 

Изменено пользователем Муурн Шепард
Ссылка на комментарий
Поделиться на другие сайты

Да ну как не дадут?? Если условие одного else не было выполнено, то будет компилятор искать следующий else, если он есть!
Ссылка на комментарий
Поделиться на другие сайты

Да ну как не дадут?? Если условие одного else не было выполнено, то будет компилятор искать следующий else, если он есть!

*Тихо-тихо* If условие. Else условие обратное.

Пример:

if ( a>b )
set a to b
else
set b to a
endif

Элсе это обратное условие. Т.е. a<b. Других элсе компилятор не знает.

 

Или формулировка Слага.

Изменено пользователем Муурн Шепард
Ссылка на комментарий
Поделиться на другие сайты

Вот пример одного из скриптов EJ-12 в плагине Имени Скального Наездника.

 

 

Begin ALL_Atak

if ( GetDistance, Player < 3700 )
startCombat "cliff racer"
else
startCombat "cliff racer_diseased"
else
startCombat "dremora_lord"
else
startCombat "atronach_storm"
else
startCombat "daedroth"
else
startCombat "dremora"
else
startCombat "golden saint"
else
startCombat "atronach_frost"
else
startCombat "ogrim"
else
startCombat "scamp"
else
startCombat "hunger"
else
startCombat "kwama forager"
else
startCombat "clannfear"
else
startCombat "winged twilight"
else
startCombat "corprus_stalker"
else
startCombat "corprus_lame"
else
startCombat "ash_zombie"
else
startCombat "ash_ghoul"
else
startCombat "ascended_sleeper"
else
startCombat "atronach_flame"
endif

end

 

 

 

Короче.

http://wiki.rumor.ru/index.php?title=Morrowind:Use_if_elseif

 

Можно поставить несколько elseif один за другим:

 

Else выполняется, если все условия предыдущие оказались ложью! А если предыдущий else ложный, тогда что, следующий else не работает?

Изменено пользователем _aL_
Ссылка на комментарий
Поделиться на другие сайты

Может, вам стоило подумать, а не лямзить из первого попавшегося плагина, не проверив во втором/почитав MSFD/глянуть в офф. скрипты.
Ссылка на комментарий
Поделиться на другие сайты

Может, вам стоило подумать, а не лямзить из первого попавшегося плагина, не проверив во втором/почитав MSFD/глянуть в офф. скрипты.

 

Я чужими скриптами не пользуюсь если что, а плагин этот один из шедевров нелорных плугов, имхо! И если бы я не был прав, то ты думаешь компилятор ошибку не выдал? Этот факт ты в расход не берешь?

 

"Давай заодно и с этим поспорим!"

Тролль, тучный и с регенерацией.

 

И это мне говорит вот этот человек? :facepalm:

Изменено пользователем _aL_
Ссылка на комментарий
Поделиться на другие сайты

Этот факт ты в расход не берешь?

Минут 5 назад себе объяснил. Возможно, Беседка не рассчитывала на такое оригинальное использование и компилятор выдает только такие ошибки, из-за которых нельзя компилировать скрипт. Например, нет непися или переменной.

Ссылка на комментарий
Поделиться на другие сайты

Позвольте спросить, какого чорта тема делает в Таверне? Переношу в соответствующий раздел.
Ссылка на комментарий
Поделиться на другие сайты

А какой смысл ставить несколько else? Это шизофрения какая-то. На каждый if есть часть (после условия) которая выполняется если условие ИСТИННО, и часть (после else) если условие ЛОЖНО. Третьего не дано. Не путайте else и elseif.
Ссылка на комментарий
Поделиться на другие сайты

А какой смысл ставить несколько else? Это шизофрения какая-то. На каждый if есть часть (после условия) которая выполняется если условие ИСТИННО, и часть (после else) если условие ЛОЖНО. Третьего не дано. Не путайте else и elseif.

 

А если оба утверждения ложны? Вообще можно использовать elseif'ы, но также можно и else'ми обойтись, кто вообще придумал, что else может быть только один? Вопрос просто в том, что каждый пользуется своими приемами при написании скриптов, я вот юзаю else и все нормально работает, блин я еще раз повторюсь, что компилятор не выдает ошибки!

 

З.Ы.

 

 

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

 

 

З.Ы.Ы.

 

Муурн смысл было делать тему для спора, если ты сам написал свой кривойвывод в шапке?

 

Изменено пользователем _aL_
Ссылка на комментарий
Поделиться на другие сайты

Позвольте спросить, какого чорта тема делает в Таверне? Переношу в соответствующий раздел.

Потому что могла превратиться во флуд.

я вот юзаю else и все нормально работает,

Подозрительно.

В общем выношу вывод про else в шапку.

Ссылка на комментарий
Поделиться на другие сайты

short doOnce

 

if ( doOnce == 0 )

set doOnce to 1

 

if ( GetDistance, Player

 

startCombat "_al_daedroth"

 

else

startCombat "_al_atronach_flame"

 

else

startCombat "_al_atronach_frost"

...

Гм, гм. А позвольте поинтересоваться, в каких условиях будет идти атака на морозного атронаха, а в каких - на огненного? Может, тут какая-то специфика морровиндовских скриптов, которую я позабыл?

И, кстати, на ком этот скрипт висит? Как он вообще может оказаться на меньшей к игроку дистанции, прежде чем условие сработает?

Ссылка на комментарий
Поделиться на другие сайты

Гм, гм. А позвольте поинтересоваться, в каких условиях будет идти атака на морозного атронаха, а в каких - на огненного? Может, тут какая-то специфика морровиндовских скриптов, которую я позабыл?

И, кстати, на ком этот скрипт висит? Как он вообще может оказаться на меньшей к игроку дистанции, прежде чем условие сработает?

 

Атака морозного атронаха произойдет в случае, если рядом не будет обоих даедр, упомянутых выше. Увы после убийства последних скрипт не будет делать вновь проверку, если сделать скрипт циклом, то игра начинает виснуть, после перезапуска сохранки скрипт заново отслеживает условия и действия, тогда вполне возможно убийство и морозного атронаха, и любого из списка, что следует за морозным! Скрипт висит на собственно одном из всех перечисленных даедр в скрипте.

 

 

 

З.Ы. Опрос отличный, а пункт возможно, затрудняюсь ответить куда делся?

 

Изменено пользователем _aL_
Ссылка на комментарий
Поделиться на другие сайты

З.Ы.Ы. Муурн смысл было делать тему для спора, если ты сам написал свой кривойвывод в шапке?

Сделаю опрос, голосуйте.

Ссылка на комментарий
Поделиться на другие сайты

*Мозг лопается большими пузырями и, выкинув эксепшен, аварийно завершается*

 

Объясню действие Вашего скрипта:

 

Если (игрок близок к ПЕРСОНАЖУ-НА-КОТОРОМ-ВИСИТ-СКРИПТ), то:

 

---- даэдрот атакует игрока,

 

Иначе: //игрок далеко от персонажа, НА-КОТОРОМ-ВИСИТ-СКРИПТ

 

---- ледяной атронах атакует игрока

 

Иначе: // шо за нах? O_o? Не ближе и не дальше? А ГДЕ? :)

---- ничего не выполняется!

 

ГДЕ ПРОВЕРКА НА НАЛИЧИЕ МОНСТРОВ?

 

Надо так: (скрипт висит на каждом из монстров)

 

один-раз == 1? Возврат

 

Если (я мертв)

---- возврат

Иначе: //я, сцуко, еще жив!

---- Если (игрок близко)

----.---- один-раз = 1

----.---- атаковать игрока;

---- конец-если

конец-если

Ссылка на комментарий
Поделиться на другие сайты

Собственно, каждый Иф должен закрываться одним Элсом, а ЭлсИфов можно вкладывать сколько угодно, но не забывать, что после выполнения первого же условия (Иф или ЭлсИф) условие закрывается и Иф завершается.
Ссылка на комментарий
Поделиться на другие сайты

Собственно, каждый Иф должен закрываться одним Элсом, а ЭлсИфов можно вкладывать сколько угодно, но не забывать, что после выполнения первого же условия (Иф или ЭлсИф) условие закрывается и Иф завершается.

Если с деталями, то после первого ифа/элсеифа/элсе все остальные элсеифы и элсе игнорируются, а скрипт прыгает до эндифа.

Ссылка на комментарий
Поделиться на другие сайты

Собственно, каждый Иф должен закрываться одним Элсом, а ЭлсИфов можно вкладывать сколько угодно

на практике выяснилось, что ЭлсИфов может быть не более то ли десяти, то ли двадцати штук, уже не помню:( остальные не выполняются:(

пришлось все делать отдельными Ифами:)

 

ЗЫ. Да, и тот мой скрипт можно сделать еще проще, если вставить ЭлсИф:)

Изменено пользователем Boeny
Ссылка на комментарий
Поделиться на другие сайты

Если с деталями, то после первого ифа/элсеифа/элсе все остальные элсеифы и элсе игнорируются, а скрипт прыгает до эндифа.
Я так и сказал.

 

на практике выяснилось, что ЭлсИфов может быть не более то ли десяти, то ли двадцати штук, уже не помню:( остальные не выполняются:(
А десять или двадцать прочих условий - это мало? о_О
Ссылка на комментарий
Поделиться на другие сайты

А если оба утверждения ложны? Вообще можно использовать elseif'ы, но также можно и else'ми обойтись, кто вообще придумал, что else может быть только один? Вопрос просто в том, что каждый пользуется своими приемами при написании скриптов, я вот юзаю else и все нормально работает, блин я еще раз повторюсь, что компилятор не выдает ошибки!

 

Какие ОБА утверждения? В операторе if только ОДНО условие. Оно может быть или истино или ложно, третьего не дано. По крайней мере в Аристотелевской логике и языках программирования так.

Конечно, если взять женскую логику, то там возможны такие условия как "персонаж и не близко и не далеко от игрока" или "персонаж одновременно близко и далеко от игрока" и даже "персонаж возможно близко, а возможно и далеко", но это пока что ни в одном языке программирования не реализовано %)

 

И нет там никакого компилятора. В TES-III интерпретируемый язык. Видимо проверки на несколько else там просто нет, но вопрос, зачем их ставить? Они же или не выполнятся кроме первого, или выполнятся все одновременно.

Изменено пользователем z-Hunter
Ссылка на комментарий
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...