PDA

Просмотр полной версии : [Вопрос] 3 вопроса



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

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

В качестве примера хочу показать код из какого то мода:



forward mysql_OffAdmins(playerid);
public mysql_OffAdmins(playerid){
new rows = cache_get_row_count(mysql);
new str[2048], names[MAX_PLAYER_NAME], level, vxod[32];
format(str, sizeof(str), "Имя игрока - Админ - Посещение\n\n{FFFFFF}");
while(rows--){
cache_get_field_content(rows, "nickname", names, mysql);
cache_get_field_content(rows, "last", vxod, mysql);
level = cache_get_field_content_int(rows, "admin", mysql);
format(str, sizeof(str), "%s%s - %d - %s\n",str,names, level, vxod);}
ShowPlayerDialog(playerid, dOffMembers, 0, "OFFADMINS", str, "Принять", "");
return true;}

forward mysql_OffAdmins(playerid);
public mysql_OffAdmins(playerid)
{
new rows = cache_get_row_count(mysql);
new str[2048], names[MAX_PLAYER_NAME], level, vxod[32];
format(str, sizeof(str), "Имя игрока - Админ - Посещение\n\n{FFFFFF}");
while(rows--)
{
cache_get_field_content(rows, "nickname", names, mysql);
cache_get_field_content(rows, "last", vxod, mysql);
level = cache_get_field_content_int(rows, "admin", mysql);
format(str, sizeof(str), "%s%s - %d - %s\n",str,names, level, vxod);
}
ShowPlayerDialog(playerid, dOffMembers, 0, "OFFADMINS", str, "Принять", "");
return true;
}


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

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

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

DeimoS
10.11.2014, 22:15
1) Ещё раз повторяю, стиль оформления кода никак не влияет на производительность. Компиляторы не только превращают обычные команды (функции и т.п.) в машинный код, но и оптимизируют его, убирая всё лишнее. Ни комментарии, ни скобки НЕ доходят до финальной, скомпилированной версии кода. Ты сам можешь изучить данный вопрос (процесс компиляции) и сделать для себя какие-то выводы.

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

3) Не совсем понял вопроса... Есть колбэки - автовызываемые функции. Каждый колбэк вызывается в момент, когда сервер выполняет определённое действие. А на действие его подталкивает игрок. Представить это всё можно, примерно, так:

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

Elaid
10.11.2014, 22:37
Слава великому DeimoS 'у :)

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

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

И тогда почему вы отрицательно относитесь к RLS/SRL ? Ведь обычно там идет антипропаганда этого кода :D

DeimoS
10.11.2014, 22:41
Слава великому DeimoS 'у :)

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

Если ты пишешь код исключительно для себя и никогда не собираешься его показывать общественности - пиши хоть в строчку всё. Главное чтоб компилятор поддерживал это (в Pawn, увы, компилятор кривоват и при слишком длинной строке тупо крашнет. Дабы этого не было, есть предупреждение). А если ты пишешь для общественности, то будь добр делать так, как принято другими, дабы им было удобнее работать с твоим кодом. В общем, табуляция нужна исключительно людям.
"#pragma tabsize" НЕ убирает ошибку. С помощью этой директивы можно указать компилятору на то, какого уровня табуляции ты придерживаешься. Тем самым если ты где-то напортачишь, он тебя об этом предупредит. Но если тебе такой услуги от него не нужно, просто выставляй в качестве уровня табуляции нуль и он тебе ни слова больше не скажет.
То есть, если ты хочешь отделять блоки кода, например, шестью символами, а не четырьмя, ты указываешь

#pragma tabsize 6
и теперь нормальный уровень табуляции для компилятора будет таким:

if(blabla == 1)
{
Blabla = 1;
}
а не таким

if(blabla == 1)
{
Blabla = 1;
}

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


И тогда почему вы отрицательно относитесь к RLS/SRL ? Ведь обычно там идет антипропаганда этого кода :D

Как уже писалось выше, табуляция нужна человеку и раз ты делаешь свой код для общественности, будь добр следовать общепринятым нормам (а именно табуляции в 4 символа).
Да и код RLS не из-за табуляции плох, а потому, что его написал человек, который не смыслил ничего в программировании. Это был его первый опыт и естественно он допустил кучу ошибок. Этот мод был написан за пару месяцев, с использованием методики "копировать - вставить" и прочими причудами. И в нём много нелогичного кода