Насколько константная функция быстрее обычной, если быстрее вообще?

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

ScopteRectuS, Скорее его там нет, это просто свойство интерпретатора, как и тип nothing, который объявить нельзя, так вероятно и constant - просто дает понять интерпретатору что эту переменную вынести в отдельное место, так же проверить код- нет ли операции присвоение этой переменной.
Если есть - выдать ошибку. Обращение к переменной медленнее обращение к конкретному значению, указанному в месте использования.
call CreateUnit( pl, 'hpea', x, y, bj_unitFacing) медленнее call CreateUnit( pl, 'hpea', x, y, 270.00 ).
Потому что движок сначала ищет переменную, потом берет из нее значение, иначе сразу вводит значение.
т.к есть макросы, дефайны, всякие фитчи тулов векса по замене констант, это все нафиг никому не упало. Софт все сделает за вас.

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
20
6 лет назад
2
Ускорение достигается за счет расположения функции выше по коду, чем остальные, ЕМНИП
2
26
6 лет назад
2
Вот что я имел ввиду.
таким образом вы наоборот сужаете горлышко
пример
function TimerCallback takes nothing returns nothing
	  	...
		if  ( IsUnitType( Unit, UNIT_TYPE_DEAD ) or ( GetUnitTypeId( Unit ) == 0) then
		else
			...
		endif
		...
	endfunction
0
21
6 лет назад
Отредактирован scopterectus
0
Hate, Вы акцентируете внимание совсем на другое. Это понятно, что лучше вставить код из самой функции, вместо его вызова (как Вы и написали).
Я же хотел обратить Ваше внимание не на это, a на саму функцию IsUnitAlive( ) и на ускорение кода, если сделать её константной.
То есть Ваш ответ должен быть:
  • ускорения не будет совсем
  • ...
  • ускорение будет, но очень маленькое, что даже можно это не учитывать
  • ...
  • ускорение будет достаточно хорошим и функцию стоит сделать константной.
2
30
6 лет назад
2
Ответ будет "это не сработает".
0
21
6 лет назад
0
Clamp, что значит не сработает??
2
30
6 лет назад
2
constant function is a function whose (output) value is the same for every input value

Кажется, это не та функциональность, которая требуется.

Ещё можно предварительно пробовать, а не задавать превентивные вопросы.
0
21
6 лет назад
0
Clamp, если я правильно понял, то почему это работает?
code
constant function sum takes integer a , integer b returns integer
    return a + b
endfunction

function test takes nothing returns nothing
    call BJDebugMsg( I2S( sum (1, 1 ) ))
    call BJDebugMsg( I2S( sum (2, 2 ) ))
endfunction

//===========================================================================
function InitTrig_test takes nothing returns nothing
    set gg_trg_test = CreateTrigger(  )
    call TriggerRegisterTimerEventSingle( gg_trg_test, 1.00 )
    call TriggerAddAction( gg_trg_test, function test )
endfunction
screen
Ещё можно предварительно пробовать, а не задавать превентивные вопросы.
Я спросил быстрее это или нет, а Вы отвечаете, что не работает, хотя в работоспособности я и не сомневался.
Загруженные файлы
2
30
6 лет назад
2
DracoL1ch:
а ты пробовал? логика говорит, что constant функция всегда возвращает константу и не может работать с параметрами :)
0
21
6 лет назад
0
Clamp:
DracoL1ch:
а ты пробовал? логика говорит, что constant функция всегда возвращает константу и не может работать с параметрами :)
Я не программист и не силён в терминологии. Но вышеуказанный скрин, мне кажется, говорит, что константная функция может работать с параметрами.
2
26
6 лет назад
2
дело не в том может она работать с параметрами или нет. дело в том что если там и есть прирост, он слишком мизерный что бы акцентировать на нем внимание, и эти функции несут совершенно другой смысл.
по ссылке на пальцах объяснено, что такие функции использовались для возвращения постоянных неизменных значений, и они были вытеснены функционалом JNGP где можно создавать глобалки в любом месте, и при этом иметь постоянные неизменные значения
0
21
6 лет назад
0
если там и есть прирост, он слишком мизерный
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.