Перейти к контенту

Рефакторинг: _g.script


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

@Zander_driver, Артос не выкладывал свой рефакторинг скриптов для общего пользования (он только в симбионе, ну и местами его почерк в ЛА проглядывается), он выкладывал готовые модули с понятными инструкциями, потому их все и используют, а описывать весь его рефакторинг комменатриями я думаю занятие весьма долгое (и опять же его не каждый поймет, не говоря уже об использовании), я вот разобрался в его скриптах, и многое почерпнул, за что ему прямо могу сказать большое спасибо.

 

Ну вот скажи, зачем перелопачивать кучи if-then-end? Там выигрыш опять же применимо для сталкера довольно не велик, вот тебе пример, возьмем простую функцию, которая режет взгляд:

function compare_part(a, 
  local l = math.min(string.len(a),string.len()
  if string.sub(a, 1, l) == string.sub(b, 1, l) then
    return true
  end
  return false
end

Задаемся целью убрать ненавистный тут нам всем if-then-end, я переписал вот так (конечно переписать можно под унифицированный вид, как многие любят, но пока остановимся на адекватном варианте, а именно том, который требует наша задача):

function compare_part(a, 
  local l = math.min(#a,#
  return rawequal(string.sub(a, 1, l),string.sub(b, 1, l)) 
end

Мой вариант показывает явный положительный результат (выигрыш ~ 10 сотых секунды) на 80 тысячах итераций (плюс начинает появляться на >50т итераций). Собственно вывод? Смотрится красивее, скрипт будет весить на несколько килобайт меньше при полной его переработке, а для игры "плюс" и не велик вроде как, т.к. опять же, ну кто тебе будет 80т раз две строки сравнивать? Поэтому такие переделки либо для каких-нибудь любителей красивого кода, либо для таких как Денис, которые гонятся за прибылью в наносекунды. Понятно, что хорошо будет, если каждый единичный if-then перепишем на тернарный оператор, а каждые if-then-elseif на ассоциативные массивы, заменив попутно все корявые конструкции на стандартные луа-функции, но ощутимый и существенный плюс то какой, я так и не понимаю. За скоростью гнаться надо когда у тебя "синхронизация" идет минут 5 или больше.

 

 

А, да, речь шла о Дезертире и Полтергейсте.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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