Sign in to follow this  
Followers 0

Советы по написанию кода. Приведение кода к единому общепринятому стилю

4 posts in this topic

Cawfee
Великий Гуру

Каждый начинающий разработчик пишет код так, как видит в интернет-ресурсах. Грубо говоря, он привыкает к уже имеющимся шаблонам. Но зачастую код отдельно взятых пользователей лишь вводит в заблуждение о том, что к чему. В программировании существует некий рекомендуемый шаблон, к которому стоит стремиться каждому разработчику. Это позволяет приводить код в общий стиль, что не нарушает читаемость. 

 

Сами советы по написанию кода (рекомендации) будут появляться в данной теме отдельными постами. В создании таких постов может поучаствовать каждый пользователь. 

 

Обратите внимание: написание кода согласно стилю, изложенному в данной теме, является вовсе необязательным. Однако, Вы должны сделать все, чтобы Ваш код был понятен всем пользователям. А потому его все же стоит "подгонять" под один шаблон.

Share this post


Link to post
Share on other sites
Cawfee
Великий Гуру

#1. Названия переменных и функций не стоит писать с помощью транслитерации. Прежде всего такие названия выглядят крайне неприятно. Стоит учесть и то, что функции зачастую называют, например, так: HideRuki. То есть транслитерация и английский вперемешку. Это тоже является ошибкой при написании кода у многих недопрограммистов. К ранее сказанному, старайтесь писать названия переменных на чистом английском, понятным самим англичанам, нежели переводить отдельные части и пытаться составить из них единое название.

 

В английском языке, ровным счетом как и в русском, существуют некие устойчивые выражения. Рассмотрим одно из них - to take a seat. Если переводить каждое слово в отдельности, мы получим взять кресло. Однако, если переводить полный оборот, то увидим иной перевод - присесть. Поэтому важно понять, что перевод в отдельности каждого слова на английском не всегда дает вам адекватный вариант на английском языке.

Share this post


Link to post
Share on other sites
SCRIPTMAN
Великий Гуру

#2. Названия переменных стоит писать с маленькой буквы, первым символом названия не должна быть цифра, не стоит писать название слитно.

Название переменных стоит писать с маленькой буквы.

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

Можно, конечно, написать вот так:

new Text: TDLogotipServera;

Но согласитесь, это не очень красиво, гораздо лучше написать в таком виде:

new Text: td_logotype_server;

Здесь мы учли сортировку переменных (о ней ниже), написание с маленькой буквы, разделение слов, название переменных на английском (выше).

Сортировка переменных:

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

У нас есть переменные одной системы, переменная для таймера, переменная для текстдрава, многие бы написал так:

new SystemTimer;
new Text: SystemTD[5];

Потом гадай, откуда они, для чего они служат (особенно если вы новичок), для этого можно их "отсортировать" - привести в единый вид, вот например, те же переменные, но "отсортированные":

new timer_system;
new Text: td_system[5];

Теперь, чтобы посмотреть все переменные текстдравов, нам достаточно ввести: "td_".

Тип переменных "bool":

Если у нас переменные могут иметь только 2 значения, то лучше использовать тип "bool" например:

new bool: check_belt[MAX_PLAYERS];


if(check_belt[playerid] == false)
{
	действие;
}
else
{
	дествие
}

Данный тип переменных имеет 2 значения: true(истинна) и false(ложь).

Share this post


Link to post
Share on other sites
SCRIPTMAN
Великий Гуру

#3. Старайтесь не иметь скроллинг внизу. 

 

Старайтесь не иметь скроллинга внизу.

Мне например не приятно, когда приходиться скроллинг вправо двигать, чтобы просмотреть какой-либо текст или еще что-то, я просто текст растягиваю на несколько строк, стараюсь сделать это грамотно. Пример длинного текста в разных функциях(SPD, string):

SPD(playerid, 0, DSM, "Длинный диалог", "Здесь у нас будет нас текст, он ооочень длинный, это неудобно, да и некрасиво.", "Закрыть", "");

format(string, sizeof(string), "Здесь у нас будет нас текст, он ооочень длинный, это неудобно, да и некрасиво Nick_Name: %s", name);

Сделаем его короче и понятнее:

SPD(playerid, 0, DSM, 
 "\
	Длинный диалог", "Здесь у нас будет нас текст, он ооочень длинный, это неудобно, да и некрасиво.", "Закрыть", "\
 ");

format(string, sizeof(string), 
 "\
	Здесь у нас будет нас текст, он ооочень длинный, это неудобно, да и некрасиво Nick_Name: %s\
 ", name);

Если текст сам по себе длинный, то можно сделать так:

SPD(playerid, 0, DSM, 
 "\
	Длинный диалог", "Здесь у нас будет нас текст, он ооочень длинный,\
	это неудобно, да и некрасиво.", "Закрыть", "\
 ");

format(string, sizeof(string), 
 "\
	Здесь у нас будет нас текст, он ооочень длинный,\
	это неудобно, да и некрасиво Nick_Name: %s\
 ", name);

Так и текст красивее, и табуляция соблюдается. Я обычно так делаю всегда.

Пример моего кода:

static const fmt_str[] =
 "\
	{FFFFFF}Здравствуйте, {FFFF00}%s!\n{FFFFFF}Вы зашли на сервер {2979FF}"NAME_SERVER"\n\
	\n{FFFFFF}Данный аккаунт зарегистрирован\nДля авторизации аккаунта введите свой пароль:\
 ";
new string[sizeof(fmt_str)-2+MAX_PLAYER_NAME+1];
format(string, sizeof(string), fmt_str, GN(playerid));
SPD(playerid, 3, DSP, "Авторизация на A-RP", string, "Далее", "Выход");

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • sinvays
      By sinvays
      Продаётся проект Criminal RolePlay с 8-летней историей.

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

      В комплекте:
      Полноценный игровой мод Мобильный лаунчер с Figma-дизайном Кэш клиентской части Все версии оформления проекта Все группы проекта Criminal RolePlay Шаблоны всех версий сайта, включая ранее не выпущенный шаблон Модуль автодоната YooMoney Помощь с установкой игрового мода на хостинг Цена:
      49 900₽ — за весь комплект.
      Возможен торг при адекватных предложениях.

      Важное:
      Проект продаётся в одни руки. Если в течение месяца не найдётся покупатель, будет рассмотрена продажа по частям.
      Связаться: https://vk.com/krnl0
    • Dekmveka
      By Dekmveka
      Здравствуйте, уважаемые пользователи форума PAWNO-RUS.
       
      В этой теме хочу поделиться видеоуроками, ориентированных на новичков, которые сейчас начинают только изучать pawn. 
      Хочу сказать сразу, я не профессиональный блогер с крутым оборудованием, поэтому если что за какие то погрешности в съемке заранее извиняюсь.
      Хотелось бы попросить не писать, что типа pawn и samp уже умер, неактуален, уроков и так полно и так далее и тому подобное. Я лишь просто занимаюсь своим увлечением и решил делиться знаниями с новичками.
      Далее на канале после плейлиста с основами планируется выложить плейлист по MySQL и максимально подробно всё рассказать о MySQL, будет старая добрая рубрика "Мод с нуля" (но на основе плагинов, стандартов и др. актуальных в 2025-2026 году). 
       
      Также хочу сказать, что есть также телеграмм канал. 
      На данный момент там есть ветка для общения, ветка "Инструменты" (там лежат архивы со всем нужным + есть навигационный пост, я просто поделил всё на категории и просто вставил ссылки на архивы которые туда же выложил. Можете зайти посмотреть если интересно). Также в телеграмм канале потом будут исходные файлы с плейлиста "Мод с нуля" и других плейлистах, пока что говорить подробно не буду что буду ещё выкладывать. 
       
      В общем, я даю ссылки, кому интересно, можете смотреть.
      [Часть 1]: Архитектура ядра SAMP || Основы программирования PAWN/PAWNO  -  *кликабельно*
      [Часть 2]: База мода, переменные, format() || Основы программирования PAWN/PAWNO  -  *кликабельно*
      Telegram канал  -  *кликабельно*
       
      Желаю всем приятного просмотра, а также успехов в обучении 
    • Antoxa39
      By Antoxa39
      Здарова бандиты. 
      Вообщем, в этом уроке я расскажу и покажу как подключить Базу Данных к MySQL.
      Не регистрацию,и не в готовом моде где просто пользователя пароль хост и т.д меняете.
      А подключение с нуля.
       
      1.Нам понадобится MySQL.  Я использую R39-6. Скачать 
      2.Приступаем к подготовительному этапу.
      Заходим в Pawn и подключаем MySQL чуть ниже инклюда a_samp. #include <a_mysql>
      Должно быть так.
      После этого отчищаем мод от хлама. Должно получится вот так: жмЫкс
      3.Подключение
      Дальше нам требуется создать переменную,эта переменная будет хранить ИД подключения. в MySQL R39 создаем простую переменную.
      new dbHandle;  В MySQL R41 создаем так:
       new MySQL:dbHandle;  
      теперь создаем Константы
      #define Host "127.0.0.1" #define User "root" // это если вы используете Denwer. Если хостинг указываете другого пользователя. #define DataBase "urok" #define Password_SQL ""//Если вы на хостинге ставите пароль,для Denwer пароль не требуется, чуть позже скажу как его установить Все, теперь переходим в public OnGameModeInit()
      public OnGameModeInit() {     dbHandle = mysql_connect(Host,User,DataBase,Password_SQL); // приравниваем нашу переменную с ИД подключением к коннекту к базе данных. Извиняюсь если коряво обьяснил. Это для R39     return 1; } Для R41
      public OnGameModeInit() {     dbHandle = mysql_connect(Host,User,Password_SQL,DataBase);// В R41 поменялись местами Пароль и База     return 1; } Если сделаем чтобы при подключении к базе выводилось сообщение о том,подключилось или нет. Я сделаю это без switch. Чтобы сильно не загружать смотрящих этот урок.
      Делаем все там же в public OnGameModeInit()
      public OnGameModeInit() {     dbHandle = mysql_connect(Host,User,DataBase,Password_SQL);     if(mysql_errno())     {         printf("Подключение к базе данных %s не удалось.",DataBase); // %s означает строку. То есть будет выводить название базы данных которое указано в #define DataBase     }     else     {         printf("Подключение к базе данных %s успешно",DataBase);     }     return 1; } Все, с этим закончили. Остался последний этап, это отключение базы данных когда мод выключается.
      Идем в паблик OnGameModeExit()
      public OnGameModeExit() {     mysql_close(dbHandle);     return 1; } Все. База данных подключена.
      Чтобы скачать Denwer жмите сюды: плямп
      Для установки можете перейти по этой ссылке: УСТАНОВКА
    • sinvays
      By sinvays
      Продаётся проект Criminal RolePlay с 8-летней историей.

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

      В комплекте:
      Полноценный игровой мод Мобильный лаунчер с Figma-дизайном Кэш клиентской части Все версии оформления проекта Все группы проекта Criminal RolePlay Шаблоны всех версий сайта, включая ранее не выпущенный шаблон Модуль автодоната YooMoney Помощь с установкой игрового мода на хостинг Цена:
      49 900₽ — за весь комплект.
      Возможен торг при адекватных предложениях.

      Важное:
      Проект продаётся в одни руки. Если в течение месяца не найдётся покупатель, будет рассмотрена продажа по частям.
      Связаться: https://vk.com/rosetta
    • Elvis
      By Elvis
      Настоящим информируем о начале набора сотрудников в нашу студию "AlinSA Studios". В рамках текущего проекта "VanguardRP", основанного на мотивах CRMP, мы ищем профессионалов и энтузиастов для выполнения следующих должностей:
       
      1. Технические специалисты
       
      Требования:
       
      | Базовые знания в области информационных технологий
      | Понимание структур кода и принципов работы компиляторов
      | Готовность к обучению и развитию профессиональных навыков
      | Иметь базовое представлении ЯП "Pawn" или "Kotlin" и "Java".
       
      Обязанности:
       
      | Поддержка технической инфраструктуры проекта
      | Участие в разработке и оптимизации программных решений
      | Взаимодействие с командой разработки для внедрения новых функций
       
      2. Пиар-ассистенты
       
      Требования:
       
      | Опыт работы в сфере SMM, маркетинга или PR
      | Навыки взаимодействия с аудиторией и ведения социальных сетей
       
      Обязанности:
       
      | Продвижение проекта в социальных сетях
       
      3. Дизайнеры
       
      Требования:
       
      | Наличие портфолио с примерами выполненных работ (не обязательно, желательно)
      | Владение графическими редакторами ! (Photoshop и Figma)
      | Креативность, внимательность к деталям и способность работать в сжатые сроки
       
      Обязанности:
       
      | создание графического контента для соцсетей, сайта и внутриигровых материалов
      | Разработка дизайна интерфейсов, баннеров, логотипов и иллюстраций
      | Участие в визуальном оформлении проекта
       
      4. Геймдизайнеры
       
      Обязанности:
       
      | Разработка игровых механик, правил взаимодействия и систем баланса
      | Проработка сюжета, персонажей и сценариев для создания эмоциональной связи с игроками
      | Проектирование уровней, задач и сценариев для обеспечения разнообразия игрового процесса
      | Взаимодействие с командой разработчиков, художников и звукорежиссёров для достижения согласованности элементов игры
      | Участие в тестировании прототипов, выявление проблем и балансировка игрового процесса
       
      5. Рупоры
       
      Цель роли: Обеспечить эффективное взаимодействие с целевой аудиторией, формировать положительный имидж проекта, своевременно информировать участников о новостях, обновлениях и
      мероприятиях, а также модерировать сообщества для поддержания комфортной и безопасной среды.
       
      -————————-
      Условия работы:
       
      Обучение и постоянная поддержка со стороны команды
      Гибкий график работы / удалённый формат (обсуждается индивидуально)
       
       
      Если вы заинтересованы в присоединении к нашей команде или хотите получить дополнительную информацию, обращайтесь по следующему контакту:
      Telegram: @AntonLegost
       
       
      Благодарим за внимание! Надеемся на плодотворное сотрудничество.
       
      p.s Новички приветствуются. Для пополнение портфолио и наработки опыта.
       
      С уважением,
      Команда "AlinSA Studios"