condition vs if

Добавлен
В чем разница между функцией condition (а заодно и filter) и обычным if?

Принятый ответ

condition/filter создают из булевой функции переменную типа boolexpr для использования в качестве условий триггеров.
а if позволяет ставить условия внутри функций.
0
15
12 лет назад
0
Точно не скажу, но
condition и filter - одно и то же. Хотя пользуюсь только первым.
Обычный if - вообще из другой оперы. т.к. используется внутри функции, а не вызывается
0
14
12 лет назад
Отредактирован Темак
0
я имел ввиду другое. Зачем, например, создавать для триггера условие, ели можно в actions ставить if? Меня этот вопрос интересует с точки зрения оптимальности и процессов.
0
14
12 лет назад
Отредактирован Hares
0
Conditions (иногда можно прописывать напрямую функцию (есть такой тип, начинается на code)) используются для встроенных for'ов, типа ForGroup*. Для них прописывается целая функция, которая возращает булевое значение, и принимает неявный аргумент Фильтр (GetFilterUnit(); GetFilterPlayer()** и др.), однако является полноценной функцией (можно писать любые действия), запускающейся в этом потоке.
If'ы же используются внутри кода, очень часто в циклах (втч. для выхода из них). Они используются для простого управления ветвями кода, когда нет необходимости писать кучу разных функций.
Пример:
// Работоспособность не гарантируется.
// Писал по памяти.
// Выполняет какое-то действие, хз.

bool UnitFilter1()
{
    group g = new group;
    unit u = GetFilterUnit();
    GroupAddUnitsInRange(g, GetUnitX(u), GetUnitY(u), 250, function UnitFilter2);
    
    if (CountUnitsInUnitGroup(g) > 5) \
        bool b = KillUnit(u);
    u = null; DestroyGroup(g); g = null;
    return b;
}

function UnitFilter2 takes nothing returns bool
    if (IsUnitBuilding(GetFilterUnit())) return false;
    elseif (IsUnitHero(GetFilterUnit())) return false;
    else return true;
    endif
endfunction

void Test()
{
    group g = CreateGroup();
    // ...
    // g = VseUnityNaKarte;
    // ...
    ForGroup(g, function Action, Condition(function UnitFilter1));
                                // Condition(function f) = Filter(function f) = function f
}
0
1
12 лет назад
0
читал что condition медленнее, а if внутри loop-а быстрее, но есть вероятность обрыва потока из-за превышения лимита итераций, так что ForGroup+Condition безопаснее, если я правильно понял вопрос
0
27
12 лет назад
Отредактирован MpW
0
Condition (условие)
Эта функция срабатывает раньше на 0.001 сек чем его действие. Многие говорят, что она даже работает быстрее. Поэтому многие советуют для быстрых действии даже писать прямо в них все действия чем в Action, например при нанесении урона либо при лечении хп и том подобное.
Еще эта функция Condition помогает фильтровать работу триггеров, если boolean вернет функции Condition истину, происходит запуск функции Action (действия) этого триггера. Проще говоря происходит запуск действия (Action). Если boolean возвращает ложь, запуск функции Action не идет. Это очень важно. Например у тебя есть куча триггерных абилок. Для каждой абилки - свой собственный триггер, который ловит каст. Происходит проверка при касте, в условиях он решает запускать ли триггер. Это в свою очередь помогает избежать от лишних работ и утечек, при которых должны выполнить в Action.
В конце темы, на которую дал снизу ссылку, можно найти ответы
Фильтры - они так необходимы если надо отсеить, найти объекты.
Насчет if эти своего рода логическая проверка, она нечем не отличается от Condition, и от filter. Они все возвращают boolean (логические условия, сравнения чисел и типов объектов и самих объектов). Отличается if тем, что внутри него, внутри блока if, заключены действия, которые срабатывают при его истине. Вроде бы это и так понятно.
0
14
11 лет назад
0
Steal nerves, я так понял между if и condition разницы нет?
0
30
11 лет назад
0
condition/filter создают из булевой функции переменную типа boolexpr для использования в качестве условий триггеров.
а if позволяет ставить условия внутри функций.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.