SAS.Wiki

Веб-картография и навигация

Инструменты пользователя

Инструменты сайта


sasdev:соглашения_по_исходному_коду

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

sasdev:соглашения_по_исходному_коду [10/01/2014 22:05]
94.28.131.192 [Идентификаторы]
sasdev:соглашения_по_исходному_коду [10/01/2020 16:35] (текущий)
213.91.147.82 [Длина строки.]
Строка 12: Строка 12:
     * **u_** Все остальные юниты, не подходящие под предыдущие префиксы     * **u_** Все остальные юниты, не подходящие под предыдущие префиксы
  
 +===== Связи между юнитами =====
 +    * **c_** Юниты могут зависеть только от **t_** Юнитов
 +    * **t_** Юниты должны зависеть только от других **t_** Юнитов
 +    * **i_** Юниты могут зависеть от **t_** Юнитов и других **i_** Юнитов,​ циклические связи невозможны в принципе,​ так как раздел реализации пустой.
 + ​Все остальные юниты могут зависеть друг от друга, но крайне желательно,​ что бы в разделе интерфейса были в основном **i_** Юниты и **t_** Юниты. Циклические ссылки между юнитами теоретически возможны,​ но их нужно максимально избегать.
 +
 +===== Допустимые типы переменных в API плагинов =====
 +  * **Строки** - //​WideString//​ (//WSTR//). //​PWideChar//​ - допускается,​ но не рекомендуются. //​PAnsiChar//​ допустим только для ASCII-строк. //PChar// и //​ANSI-строки//​ запрещены.
 +  * **Символьные** - //​AnsiChar//​ и //​WideChar//​. //Char// - запрещено;​
 +  * **Целые** - //​Integer//,​ //​Cardinal//,​ //Int64//, //UInt64//, //​NativeInt//,​ //​NativeUInt//,​ //Byte//, //Word//. Запрещено использовать //​Currency//​.
 +  * **Вещественные** - //Single// и //Double//. Запрещено использовать //​Extended//,​ //Real//, //Real48// и //Comp//.
 +  * **Логический** - //BOOL//. Допускается //​ByteBool//,​ //​WordBool//​ и //​LongBool//,​ но не рекомендуется. //Boolean// - запрещено.
 +  * **Статические массивы** - //​array[число..число] of// из допустимых типов.
 +  * **Записи** - (//​record//​) из допустимых типов.
 +  * **Указатели** - на данные допустимого типа; нетипизированные указатели.
 +  * **Интерфейсы** - (//​interface//​),​ в методах которых используются допустимые типы.
 +  * Запрещено передавать объекты (//​TObject//​) и компоненты (//TForm//, //​TButton//​).
  
 ====== Форматирование кода ====== ====== Форматирование кода ======
 +===== Длина строки. =====
 +Мы предпочитаем делать строки короткими и наглядными. Короткие строки не только более читабельны,​ но и позволяют задавать операторы в более простой форме (особенно,​ когда они используются с описательными именами переменных). Методы,​ состоящие из серий коротких простых операторов,​ легче для восприятия и модифицирования. Даже диффы в результате точнее показывают,​ что поменялось между коммитами.
  
 ===== Блоки Uses ===== ===== Блоки Uses =====
-Название каждого юнита с новой строки примерно в таком порядке:​+Название каждого юнита с новой строки ​(опять же для упрощения диффов) ​примерно в таком порядке:​
   * Системные юниты (SysUtils, Types и тд.)   * Системные юниты (SysUtils, Types и тд.)
   * Юниты библиотек (GR32, KAZip и тд.)   * Юниты библиотек (GR32, KAZip и тд.)
Строка 29: Строка 48:
 ===== Идентификаторы ===== ===== Идентификаторы =====
 В именах типов, классов,​ методов,​ переменных,​ параметров и тд. Нужно использовать CamelCase. В именах типов, классов,​ методов,​ переменных,​ параметров и тд. Нужно использовать CamelCase.
 +
 Сразу за именем переменной должно стоять двоеточие,​ потом пробел,​ потом имя типа. Сразу за именем переменной должно стоять двоеточие,​ потом пробел,​ потом имя типа.
 +
 Пример:​ Пример:​
 +
  ​VOperationID:​ Integer;  ​VOperationID:​ Integer;
  
Строка 40: Строка 62:
   * **A** Параметр функции   * **A** Параметр функции
   * **C** Константа   * **C** Константа
-===== Форматирование кода ===== 
-Желательно что бы ширина строчек кода не превышала 80 символов. 
  
 +Объявление полей класса только по одному на строку с указанием типа для каждого.
 +
 +Объявление локальных переменных - в большинстве случаев по одному на строку типа для каждой переменной отдельно (исключение простые счетчики)
 +
 +Объявление параметров функций и процедур - по возможности указывать тип для каждой переменной отдельно,​ если параметров больше чем один-два,​ то каждый параметр должен расположен на отдельной строке.
 +
 +Пример кода:
 +
 +    function FindItems(
 +      const AVisualConverter:​ ILocalCoordConverter;​
 +      const ALocalPoint:​ TPoint
 +    ): IVectorItemSubset;​
 +    ​
 +    constructor Create(
 +      const ARootFolderName:​ WideString;
 +      const AFolderNameFromRoot:​ WideString;
 +      const AFileMask: WideString;
 +      const AFilesOnly: Boolean
 +    );
 +
 +
 +===== Форматирование кода =====
 Необходимо соблюдать отступы. Необходимо соблюдать отступы.
  
Строка 77: Строка 119:
  
 Закомментированный код зло и должен быть удален до коммита. Закомментированный код зло и должен быть удален до коммита.
- 
- 
  
 ===== Общие идеи ===== ===== Общие идеи =====
Строка 89: Строка 129:
 Это же касается делфовских динамических массивов,​ объявленных как //array of// Это же касается делфовских динамических массивов,​ объявленных как //array of//
 По возможности в интерфейсах нужно избегать использования указателей. Использовать их стоит только если это действительно оправдано. По возможности в интерфейсах нужно избегать использования указателей. Использовать их стоит только если это действительно оправдано.
- 
- 
- 
-