Показать сообщение отдельно
Старый 12.03.2011, 12:16   #68
Черный крыс
 
Сообщений: n/a
Ответ: Вопрос-Ответ (для новичков BlitzMax)

Это скорость.

Вообще все типы, методы, функции, поля, переменные, константы - образуют собой дерево, которое заносится как я понимаю в стек (а может и по другому). И если допустим мы вызываем метод, тогда чем ближе какой-либо обьект лижет в ветке данного метода, тем быстрее произойдет поиск / вызов / операция.

Global value:Int = 100
 
Function Test()
    Local value:Int = 50
    DebugLog value
EndFunction
 
Function Test2()
    DebugLog value
EndFunction
 
Function Test3(value:Int)
    DebugLog value
EndFunction
Функция, метод или тип представляет собой что то вроде ветки. Быстрее всех выполнится функция Test3 самой медленной будет Test2.
В одно время Oxid высказывал свое мнение по этому поводу : если в функции обьявить локальную переменную и назвать ее коротким именем, то есть шанс что переменная занесется в регистр процессора для мнгновенного доступа.

Для глобальной функции приоритет приблизительно таков : аргументы->локальные переменные->глобальные переменные.

Для метода : аргументы->поля->локальные переменные->глобальные переменные внутри типа->глобальные переменные.

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

А если рассматривать целиком весь БМакс, то он весь состоит из чунков (порций кода), - отсюда его модульность.
По идее глобальную функцию (и не только ее) можно вызвать класически : DrawImage(image,x,y,0)
А можно явно указать с какого чунка вызвать функцию : brl.max2d.DrawImage(image,x,y), в той же степени это относится ко всему остальному.
Хотя на самом деле компилятор на стадии формирования кода все вызовы приводит ко второму виду.

Для пытливых - можно пойти еще дальше : brl.max2d.TImage(image).Frame(0).Draw(...) - но это уже черезчур =)
 
Ответить с цитированием