Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 4 из 4

Тема: 3 вопроса

  1. #1
    Аватар для Elaid
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.09.2014
    Адрес
    Киров [43]
    Сообщений
    93
    Репутация:
    0 ±

    3 вопроса

    Приветствую тебя, мой очередной раб :), за сегоднешний день у меня накопилось несколько вопросов, которые не дают мне успакоиться:

    Первое: построение кода и его читабельность.
    Не раз встречался с таким написанием кода, когда кавычки ( "{" и "}") стоят не совсем ровно. Мне стало интересно, влияет ли это как то на читаемость кода машиной или она все воспримет как одно и тоже, и не почувствует разницы между ними.

    В качестве примера хочу показать код из какого то мода:
    PHP код:
    forward mysql_OffAdmins(playerid);
    public 
    mysql_OffAdmins(playerid){
        new 
    rows cache_get_row_count(mysql);
        new 
    str[2048], names[MAX_PLAYER_NAME], levelvxod[32];
        
    format(strsizeof(str), "Имя игрока - Админ - Посещение\n\n{FFFFFF}");
        while(
    rows--){
            
    cache_get_field_content(rows"nickname"namesmysql);
            
    cache_get_field_content(rows"last"vxodmysql);
            
    level cache_get_field_content_int(rows"admin"mysql);
            
    format(strsizeof(str), "%s%s - %d - %s\n",str,nameslevelvxod);}
        
    ShowPlayerDialog(playeriddOffMembers0"OFFADMINS"str"Принять""");
        return 
    true;} 
    PHP код:
    forward mysql_OffAdmins(playerid);
    public 
    mysql_OffAdmins(playerid)
    {
        new 
    rows cache_get_row_count(mysql);
        new 
    str[2048], names[MAX_PLAYER_NAME], levelvxod[32];
        
    format(strsizeof(str), "Имя игрока - Админ - Посещение\n\n{FFFFFF}");
        while(
    rows--)
        {
            
    cache_get_field_content(rows"nickname"namesmysql);
            
    cache_get_field_content(rows"last"vxodmysql);
            
    level cache_get_field_content_int(rows"admin"mysql);
            
    format(strsizeof(str), "%s%s - %d - %s\n",str,nameslevelvxod);
        }
        
    ShowPlayerDialog(playeriddOffMembers0"OFFADMINS"str"Принять""");
        return 
    true;

    Вот два примера и они совершенно одинаковые, но второй вариант табулирован. Когда я интересовался у разных людей, они говорили совершенно разные и противоречивые мнения по поводу написания кода.
    X-men: Написание когда никак не отличается на его читаемости машиной. Она воспримет их совершенно одинаково.
    Y-men: Первый тип написания кода усугубит его читаемости машиной, в то время второй вариант прочитается быстрее.

    Второе: оптимизация +/- логическое построение
    Как понять оптимизация функций и в чем она заключается?
    Логическое построение что это такое и с чем его едят. На сколько оно отличается от оптимизации и как правильно следовать ему в построении функций.

    Третье: глупый вопрос но все же
    Работы на ЭРПИ серверах. Я не совсем понимаю ход их создания и как они строятся. Пытался понять, изучая работы, которые выложены на публику. Как я понял - это создание определенных условий, при которых выполняется действие в сопровождении с анимацией для большего эффекта.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    1) Ещё раз повторяю, стиль оформления кода никак не влияет на производительность. Компиляторы не только превращают обычные команды (функции и т.п.) в машинный код, но и оптимизируют его, убирая всё лишнее. Ни комментарии, ни скобки НЕ доходят до финальной, скомпилированной версии кода. Ты сам можешь изучить данный вопрос (процесс компиляции) и сделать для себя какие-то выводы.

    2) Логически построенная функция - это функция, где нет лишних действий. Например, у нас есть цикл, внутри которого есть код, который воспроизводится n-нное количество раз. Если мы вставим в цикл на 500 итераций создание переменной, она будет создана и удалена ровно 500 раз. В то же время мы можем перенести создание переменной за тело цикла, тем самым избавив машину от лишних 499 созданий этой злосчастной переменной (сначала создать переменную, потом объявить цикл и уже в нём использовать созданную ранее переменную). Вот это логически верно построенный код. И это самый элементарный пример.

    3) Не совсем понял вопроса... Есть колбэки - автовызываемые функции. Каждый колбэк вызывается в момент, когда сервер выполняет определённое действие. А на действие его подталкивает игрок. Представить это всё можно, примерно, так:
    Случается какое-то событие (обычно вызванное игроком) -> Сервер реагирует на это событие -> Срабатывает определённое событие, вшитое в сам сервер -> Вызывается колбэк, если это предусмотрено, и обрабатывается код внутри колбэка -> Данные отправляются всем клиентам, которые в этом событии участвуют (либо вообще всем).
    Это всё утрировано, конечно, но цикл, примерно, такой. И чтоб написать ЛЮБОЙ скрипт, нужно знать предназначение каждого колбэка и знать предназначение функций, которыми скриптер может повлиять на событие (кикнуть игрока/удалить машину/создать объект и т.п.). А так же знать особенности языка (в данном случае это Pawn), которыми можно повлиять на обработку того или иного колбэка (яркий пример - оператор возврата return. Если в OnPlayerCommandText вернуть единицу, обработка этого колбэка прервётся не только в моде, но и в скриптах. Если же вернуть нуль, сервер переключит своё внимание с мода на скрипты, пока не проверит каждый или пока не встретит возврат единицы). В общем, нужно просто знать назначение того или иного зарезервированного слова/набора слов. А далее просто останется играть в конструктор, где от того, в какой последовательности сложил детали, будет зависеть то, как финальная конструкция будет себя вести (это может быть башня, которая рухнет под собственным весом или замок, который не сломать). Вот
    Последний раз редактировалось DeimoS; 10.11.2014 в 22:19.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. #3
    Аватар для Elaid
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.09.2014
    Адрес
    Киров [43]
    Сообщений
    93
    Репутация:
    0 ±
    Слава великому DeimoS 'у :)

    То есть написание кода, табулируя его, это чисто выбор лишь твой выбор "Красиво и не :D". А что можно сказать про #pragma tabsaze .. Она же просто убирает ошибки 217, но считается, что эти только портит код.

    - - - Добавлено - - -

    И тогда почему вы отрицательно относитесь к RLS/SRL ? Ведь обычно там идет антипропаганда этого кода :D
    Функция SetGameModeText определяет уникальность вашего мода :D (Evil School Boy)


    Иногда так хочется крикнуть: "Подручныый .." :с



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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Elaid Посмотреть сообщение
    Слава великому DeimoS 'у :)

    То есть написание кода, табулируя его, это чисто выбор лишь твой выбор "Красиво и не :D". А что можно сказать про #pragma tabsaze .. Она же просто убирает ошибки 217, но считается, что эти только портит код.
    Если ты пишешь код исключительно для себя и никогда не собираешься его показывать общественности - пиши хоть в строчку всё. Главное чтоб компилятор поддерживал это (в Pawn, увы, компилятор кривоват и при слишком длинной строке тупо крашнет. Дабы этого не было, есть предупреждение). А если ты пишешь для общественности, то будь добр делать так, как принято другими, дабы им было удобнее работать с твоим кодом. В общем, табуляция нужна исключительно людям.
    "#pragma tabsize" НЕ убирает ошибку. С помощью этой директивы можно указать компилятору на то, какого уровня табуляции ты придерживаешься. Тем самым если ты где-то напортачишь, он тебя об этом предупредит. Но если тебе такой услуги от него не нужно, просто выставляй в качестве уровня табуляции нуль и он тебе ни слова больше не скажет.
    То есть, если ты хочешь отделять блоки кода, например, шестью символами, а не четырьмя, ты указываешь
    PHP код:
    #pragma tabsize 6 
    и теперь нормальный уровень табуляции для компилятора будет таким:
    PHP код:
    if(blabla == 1)
    {
          
    Blabla 1;

    а не таким
    PHP код:
    if(blabla == 1)
    {
        
    Blabla 1;

    - - - Добавлено - - -

    Цитата Сообщение от Elaid Посмотреть сообщение
    И тогда почему вы отрицательно относитесь к RLS/SRL ? Ведь обычно там идет антипропаганда этого кода :D
    Как уже писалось выше, табуляция нужна человеку и раз ты делаешь свой код для общественности, будь добр следовать общепринятым нормам (а именно табуляции в 4 символа).
    Да и код RLS не из-за табуляции плох, а потому, что его написал человек, который не смыслил ничего в программировании. Это был его первый опыт и естественно он допустил кучу ошибок. Этот мод был написан за пару месяцев, с использованием методики "копировать - вставить" и прочими причудами. И в нём много нелогичного кода
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  5. Пользователь сказал cпасибо:
    Elaid (10.11.2014)
 

 

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

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

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

Ваши права

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