Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 4 из 4 ПерваяПервая ... 2 3 4
Показано с 31 по 35 из 35
  1. #31
    Аватар для punkochel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±
    Цитата Сообщение от DeimoS
    Ты ему про Фому, а он тебе про Ерёму :)
    И в правду, не так понял пост))

    Цитата Сообщение от DeimoS
    Собственно, как я и сказал: когда напишешь достаточно большой проект и достаточно долго будешь его поддерживать - понимание некоторых основ, о которых я выше писал, придёт к тебе само. Ну или не придёт и ты продолжишь страдать, тратя кучу времени на разбор своего кода и исправление ошибок, которых можно было бы избежать.
    Над модом работаю уже больше 10-ти месяцев, можно в принципе представить какой уже его объем, так вот, изначально я создал массив на 2048 ячеек для использования его только для: 1 -ая строка: Форматирование; 2 -ая строка: Отправление; Всё, больше никаких операций я с ним не произвожу.
    Почему я его вообще создал: Создал я его из-за того, что весь мод построен из отдельных функций которые вызываются в разных файлах. (https://ziggi.org/arhitektura-pawn-proekta-dlya-sa-mp/)
    Часто возникают ситуации когда необходимо вызывать функцию сохранения чего либо, например денег:
    1. GivePlayerCash(playerid, money) {
    2.  
    3. new string[64];
    4. format(string, sizeof(string), "QUERY");
    5. mysql_tquery(ID, string);
    6. return 1;
    7. }
    8.  
    9. PayDay() {
    10.  
    11. foreach(new i:Player) {
    12.  
    13. GivePlayerCash(i, 100);
    14. }
    15. return 1;
    16. }


    Так вот, чтобы не создавать каждую итерацию массив string размером в 64 ячейки, я использую массив из дата сегмента на 2048. Вот почему это все.

  2. #32
    Аватар для Pa4enka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    DeimoS, касаемо массивов, я попросту высказал альтернативную точку зрения, и заметь, не навязывал ничего ни тебе, ни автору. Просто дал небольшую интересную на мой взгляд информацию.

    Остальной блок твоих сообщений улыбнул, спасибо)

  3. #33
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от punkochel Посмотреть сообщение
    Часто возникают ситуации когда необходимо вызывать функцию сохранения чего либо, например денег:
    1. GivePlayerCash(playerid, money) {
    2.  
    3. new string[64];
    4. format(string, sizeof(string), "QUERY");
    5. mysql_tquery(ID, string);
    6. return 1;
    7. }
    8.  
    9. PayDay() {
    10.  
    11. foreach(new i:Player) {
    12.  
    13. GivePlayerCash(i, 100);
    14. }
    15. return 1;
    16. }


    Так вот, чтобы не создавать каждую итерацию массив string размером в 64 ячейки, я использую массив из дата сегмента на 2048. Вот почему это все.
    Так тут проблема не в создании массива каждую итерацию, а, в целом, в том, что ты каждую итерацию отправляешь запрос, когда всё можно сделать проще и оптимизированнее (примеры давал выше).

    Ну и да: даже если представить, что тех вариантов, о которых я говорю, не существует для Pawn и SAMP, то создавать глобальный массив, выделяя кучу памяти, только для того, чтоб не создавать локальные массивы в цикле, как в случае с твоей ситуацией - это в любом случае нерациональное решение. Твоя ситуация с циклом - это исключение из правил для твоей функции выдачи денег. Гораздо разумнее избавиться от вызова твоей кастомной функции и прописать форматирование запроса напрямую в цикл.

    А то, что ты сделал сейчас - это как ситуация с "exit" у Pa4enka. То бишь, ты сам надумал себе условие в виде: "Я хочу обязательно всюду использовать GivePlayerCash", - и сам же после героически начал выдумывать нерациональные костыли для её решения. Как я писал в одном из предыдущих сообщений - не нужно натягивать сову на глобус, пытаясь создать одну функцию на все случаи жизни. Если встречаешься с ситуацией, когда реализация твоей функции начинает проигрывать по оптимизации, то нужно либо переписывать функцию, либо писать новую функцию конкретно для тех ситуаций, в которых старая функция проигрывает, либо просто прописывать код напрямую, если не получается оптимально сделать всё через функцию. Иначе рано или поздно ты начнёшь встречать сложные алгоритмы, в которых твои "универсальные" функции начнут делать кучу лишних действий, нерационально растрачивая память/время и т.п.

    Цитата Сообщение от Pa4enka Посмотреть сообщение
    DeimoS, касаемо массивов, я попросту высказал альтернативную точку зрения, и заметь, не навязывал ничего ни тебе, ни автору. Просто дал небольшую интересную на мой взгляд информацию.
    А я просто ответил на твою информацию и не более) Брать за пример какие-то сферические массы скриптеров - идея изначально плохая, ибо большая часть из них - это самоучки, которые изучали Pawn по видосам, снимающимся такими же самоучками, не особо понимающими о том, что они снимают. Отсюда и все эти максросы, по типу "SPD", "SCM" и прочая чепуха, которая тоже делается под аргументом: "мне не нужны танцы с бубном, мне нужно быстро напечатать код". И плевать они хотели на все последствия, ибо у них попросту ещё опыта недостаточно и они не встречались с этими последствиями лицом к лицу.

    Цитата Сообщение от Pa4enka Посмотреть сообщение
    Остальной блок твоих сообщений улыбнул, спасибо)
    Не очень понял что там может улыбнуть, но ок)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  4. #34
    Аватар для punkochel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±
    Цитата Сообщение от DeimoS
    А я просто ответил на твою информацию и не более) Брать за пример какие-то сферические массы скриптеров - идея изначально плохая, ибо большая часть из них - это самоучки, которые изучали Pawn по видосам, снимающимся такими же самоучками, не особо понимающими о том, что они снимают. Отсюда и все эти максросы, по типу "SPD", "SCM" и прочая чепуха, которая тоже делается под аргументом: "мне не нужны танцы с бубном, мне нужно быстро напечатать код". И плевать они хотели на все последствия, ибо у них попросту ещё опыта недостаточно и они не встречались с этими последствиями лицом к лицу.
    А что в SCM то плохого?

    Цитата Сообщение от DeimoS
    Если встречаешься с ситуацией, когда реализация твоей функции начинает проигрывать по оптимизации, то нужно либо переписывать функцию, либо писать новую функцию конкретно для тех ситуаций, в которых старая функция проигрывает, либо просто прописывать код напрямую, если не получается оптимально сделать всё через функцию.
    Именно это я уже уяснил, ну и конечно-же пример не очень я привёл. Вскоре переделаю систему сохранения данных, на ту, что ты посоветовал.
    Вообще, у меня был ужасный учитель (RLS copy samp-rp), там много чего реализовано так, и я почему-то принял это за должное, но потом спустя некоторое время, я начал переписывать функции, которые были хоть и частично скопированы оттуда, потом, спустя еще какое-то время, я понял что сделал полнейший шлак, и все уже не исправить. Итог: Начал писать мод с 0, не смотря ни в какие моды, все системы продумывал у себя в голове (мб велосипед изобретал, но тем не менее), а вот некоторые привычки - остались.

  5. #35
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от punkochel Посмотреть сообщение
    А что в SCM то плохого?
    То, что:
    1) Это сильно ухудшает читаемость, так как капсом обычно пишутся названия макросов?
    2) Это ломает совместимость с любым адекватным кодом, который не использует эти макросы.

    Почитай для чего люди в разных ЯП придумывают определённые спецификации по синтаксису. Зачем в том же Python есть PEP 8. Люди не просто так всё это придумывают, а потому что это как производительность конкретного человека повышает, так и производительность группы программистов, работающих над одним проектом. И нормальный редактор кода, заточенный под Python, тебя будет сильно по рукам бить, если ты там будешь вытворять то же самое, что обычно делают в Pawn всякие любители "экономить" время (а потом рожать из под своих рук моды с кучей багов, которые потом приходится месяцами вылавливать и исправлять).
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 
Страница 4 из 4 ПерваяПервая ... 2 3 4

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •