Перейти к содержанию
Авторизация  
SCRIPTMAN

Советы по улучшению кода.

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

SCRIPTMAN

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

 

1. Лучше кол-во символов подсчитывать через static const, нежели использовать string, давать ему объем 128 и в итоге у вас символов 40 будут лишними.

Прочитать подробнее о данном способе можно в этой теме.

2. Нужно постараться сделать так, чтобы у вас не было скролинга, а если точнее - внизу такого столбика что ли, короче, чтобы строки влезали.

Для этого есть несколько способов, например:

2.1. Диалоги:

ShowPlayerDialog(playerid, 0, DSM, "Заголовок",
"\
Ваш текст, "Окей", "Назад\
");

Если у вас не вмещается текст, то можно сделать так:

ShowPlayerDialog(playerid, 0, DSM, "Заголовок",
"\
Ваш текст,\
ваш текст\
"Окей", "Назад\
");

2.2. Format:

format(string, sizeof(string),
"Текст\n\
текст\n\
еще текст",
test,
test,
test
");

2.3. Static const:

static const fmt_str[] =
"\
ваш текст\n\
ваше имя: %s\
";
new string[sizeof(fmt_str)-2+MAX_PLAYER_NAME];
format(string, sizeof(string), fmt_str, Player[playerid][pName]);

3. Переменные:

3.1. Переменные создавайте с маленькой буквы, они не должны называться с цифры, пример:

new number;// - правильно
new 1number;// - неправильно

3.2. Переменные не стоит называть русскими словами, на английских буквах, лучше называть на английском, например: 

new city_hall;// - правильно
new meria;// - неправильно

3.3. Не стоит называть переменные например "jailTime", это неправильно, да и вам будет не удобно, лучше называть так:

new jail_timer;// - правильно
new jailTime;// - неправильно
new Jail_time;// - неправильно

3.3. Отсортируйте переменные, дабы вам было легче, например:

переменные с _timer:
new name_timer;
new jail_timer[MAX_PLAYERS];

допустим вам нужно проверить, будет равно 1 или 2, используйте:
new bool: strap_check[MAX_PLAYERS];// - пристегнут ли ремень

3.4 Используйте переменную типа "bool", если значение переменной может быть только true или false, например ремень безопасности, пример:

new bool: strap_check[MAX_PLAYERS];
new bool: gun_check[MAX_PLAYERS];

С enum тоже конечно лучше сделать padmin, но я так не делаю, просто потому что я могу запутаться, но вы конечно можете сделать, например:

enum pInfo
{
pname[MAX_PLAYER_NAME],
pskin,
psex
}

5. Расположение строк в моде:

5.1. Добавляйте команды в конец мода например, стоки перед командами, паблики перед стоками, паблики стандартные перед пабликами, которые добавили мы, перед пабликами переменные, но рассортируйте их тоже, перед переменными дефайны, перед дефайнами инклуды.

5.2. Forward'ы, вы знаете, что нужно создавать forward перед тем, чтобы создать паблик, но я предлагаю сделать это проще, просто добавьте в дефайны:

#define fpublic%0(%1)   forward%0(%1); public%0(%1)

fpublic - то есть forward public, думаю понятно, согласитесь, так будет проще и не нужно будет занимать место в под forward'ы.

5.3. Используйте макросы, то есть, например, SPD - ShowPlayerDialog, вред моду они не наносят.

6. Создавайте инклуды, в них помещайте маппинг, переменные, дефайны и так далее.

 

Плюсы:

Код в моде станет больше, размер кода не влияет на работу мода, но вам станет удобнее.

Не нужно будет рыскать по всему моду и искать маппнг, переменные и т.д.

На оптимизацию это не влияет, просто вам станет гораздо легче.

 

Чтобы их подключить, просто к инклудам добавьте:

#include "../название папки/name.inc" 

На этом все.

Автор: SCRIPTMAN

  • Like 3

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


Ссылка на сообщение
Поделиться на другие сайты
vsergeenko

Вам создать тему по улучшению навыков использования шрифта и цвета на форуме?

  • Like 1

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


Ссылка на сообщение
Поделиться на другие сайты
LeonYT

Пойду по пунктам:
1) С каких пор format и static const взаимозаменяемы?  :D83DDE02: Исправь и не позорься  :D83DDE07:. Да и вообще, зачем так категорично высказываться о том, каким способом лучше считать строку? Суть всё равно одинаковая, просто каждый из способов удобен в той или иной ситуации.

2) Как по мне небольшая горизонтальная полоса прокрутки вполне допустима (лично для меня). Мне например нагляднее видеть некоторые функции и их аргументы в виде одной строки.
2.2) Забыли поставить двойные кавычки после окончания текста
3.3) Это не сортировка, а скорее тэгирование переменных. Способ хороший, советую.
Например:

new Logotype_TD;//текстдрав логотипа
new help_cp; //чекпоинт помощи 

И ещё:

 

допустим вам нужно проверить, будет равно 1 или 2, используйте: new bool: strap_check[MAX_PLAYERS];// - пристегнут ли ремень

С каких пор логические переменные могут принимать значение 2? :D83DDE02: 

5.1) Я думаю тут лучше уж самому разработчику лучше решить, где и в каком месте у него всё будет находится. К тому же модульную архитектуру мода уж явно лучше использовать.

5.2) А потом при публикации в общий доступ своих работ/уроков/мануалов и т.д с использованием макросов, возникает куча вопросов по поводу них...
6) По поводу этого соглашусь, модульная реализация довольно удобна. Кстати тут есть исчерпывающее описание того, как её реализовать.

  • Like 3

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


Ссылка на сообщение
Поделиться на другие сайты
SCRIPTMAN

@LeonYT,

1. Воу, тут ты прав, сейчас исправлю.

2. Ну для меня это не особо.

2.2. Исправлю.

3.3. Ну для меня сортировка.

Насчет "и еще", ради примера примера написал, true или false(пристегнут или нет). И я написал, что true или false только.

5.1. Это безусловно, но так будет легче, ну или хотя бы, чтобы все было в не раскинуто по моду, а стоки в одном, команды в другой и т.д., а то посмотришь паблик моды, команды в середине, стоки в конце, потом опять команды.

5.2. Можно публиковать эти макросы тоже.

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


Ссылка на сообщение
Поделиться на другие сайты
Rikka

3.3. Не стоит называть переменные например "jailTime", это неправильно, да и вам будет не удобно, лучше называть так:

new jail_timer;// - правильно

new jailTime;// - неправильно

new Jail_time;// - неправильно

 

Это уже дело вкуса, видел множество проектов где подстрочники неприемлемы.

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


Ссылка на сообщение
Поделиться на другие сайты
vsergeenko

От себя: глобальные переменные можно указывать с префиксом g (от global).

// camelCase
new gSecondTimer;
// under_score
new g_second_timer;

P.S: в будущем возможно чем-то дополню, сейчас мозг не варит вспомнить что-то :)

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


Ссылка на сообщение
Поделиться на другие сайты
H_U_N_T_E_R

?Ну и что это улучшает кроме читабельности?
?Не стоит создавать подобные темы, хотя бы потому что у каждого человека разные понятия и ценности.
?Тебе нравиться писать мелким шрифтом, а мне нравиться большим. 

?Не стоит считать символы через static const и создавать под ник ячейки каждый раз.
?Стоит создать глобальный массив и использовать его хоть по максимуму, ведь память под него уже выделена заранее.

?Эта тема полная чуть и даже самой маленькой пользы она не несет.

?Ах да, пригорает все по поводу static const.


?Создавая строки длинной до 255 символов, я лучше создам
new string[255 char];

?Нежели я буду использовать static const считая символы.

?Даже если я использую из этих 255 свободных ячеек хотя бы 50 я все ровно получу менее обильной затраты памяти чем ты.
Но лучшим вариантом было и будет глобальный массив.

 

  • Like 1

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


Ссылка на сообщение
Поделиться на другие сайты
SCRIPTMAN

@H_U_N_T_E_R,вот это критика... Нашелся человек, который меньше суток, имеющий уже предупреждение, так еще и критикует, что static const хуже обычного формата, да, может считать его для кого-то чуть тяжелее, но знаешь, уж лучше лишний раз потратить 10 секунд, чем потом получать жалобы от игроков на ужасный гейммод. Почему-то все согласны, один ты не согласен... Ну ладно) 

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


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@SCRIPTMAN, дело в том, что static const нагружает сервер сильнее, нежели обычное объявление переменной. Поэтому профессионалы утверждают, что это плохой способ подсчета строк и не является оптимизацией. К слову, есть альтернатива - notepad++. Выделяйте нужный текст и смотрите сколько символов в нем содержится. Это удобно, если у Вас notepad++ выступает компилятором. Как, например, в моем случае:

[spoiler=Изображение]

Безымянный.png

 

 

А затем уже смотрите на аргументы. Например,

new string[длина текста общая + (-2+длина первого аргумента) + (-2+длина второго аргумента)...];

который меньше суток

Меньше суток здесь, да больше суток в pawn.


 

 


чем потом получать жалобы от игроков на ужасный гейммод

Вот своим методом их и получите. А если лень считать размер массива, измените вручную размер стека и не парьтесь с подсчетом.


Честно говоря, был глуп, когда еще меньше месяца назад и сам пользовался статиком для подсчета массива. Учитесь на чужих ошибках и не тратьте на него время, чтобы потом ~50000 строк в моде не поправлять.

Изменено пользователем Elrmrnt-Kritik

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


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

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