-
Notifications
You must be signed in to change notification settings - Fork 3
CodeConventions
Для кода мы используем Google C++ Codestyle.
- Не используются исключения, потому что довольно сложно их контролировать: либо приходится расставлять везде throw(SomeException, AnotherException), что довольно сложно держать в актуальном состоянии, а неуказаные эксепшны проскочат в unexpected обработчик и будет плохо; либо не указывать спецификацию вовсе и тогда с исключениями может случиться полный космос.
- Не используется RTTI (Run-Time Type Identification), ибо штука дорогая в плане производительности и существуют соображения, что использование RTTI — признак плохой архитектуры.
Важно
Google C++ Codestyle запрещает использование C++11, ибо штука новая и еще далеко не все компиляторы поддерживают все фичи. Мы используем C++11, потому что это удобно и потому что несколько последних версий самых универсальных компиляторов полностью или почти полностью его поддерживают.
- Явное лучше неявного:
- Избегайте неявных преобразований типов. Конструкторы с одним параметром должны быть отмечены ключевым словом explicit, чтобы запретить неявное приведение.
- Избегайте переопределения операторов в случае если их можно трактовать неоднозначно.
- Запрещайте копирование и присваивание для объектов, которые этого не поддерживают (декларация конструктора копирования и оператора присваивания в приватной секции без определения; TODO(@alex-ac): написать макрос для этого).
- Документирование:
- Используйте самодокументирующиеся имена объектов;
- Не стесняйтесь написать комментарий там, где это необходимо, и только если необходимо.
Отступы и пробелы:
- Во всем проекте используется два пробела в качестве отступа.
- При переносе на другую строку используется отступ в четыре пробела или длинный, к примеру, чтобы выровнять аргументы функции в стобик;
- Отступ между функциями — одна строка;
- Блоки кода допускается отделять одной строкой;
- Отступ перед/после объявления класса/нэймспэйса — одна строка.
- Внутри нэймспэйсов и #if/#endif дополнительный горизонтальный отступ не ставится.
- Не допускаются пробелы в конце строк.
Заголовок:
// Copyright (c) 2014 The Caroline authors. All rights reserved.
// Use of this source file is governed by a MIT license that can be found in the
// LICENSE file.
// Author: Vasya Pupkin <[email protected]>
Не забывайте писать себя в авторы файла создавая его. Если вы сделали обширные модификации в файле, созданном кем-то другим — стоит добавить строку со своим именем в заголовок.
Имена объектов:
- Переменные именуются в underlined_style;
- Приватные и защищенные поля класса имеют на конце подчеркивание;
- Имена типов и функции/методы именуются в CamelCaseStyle;
- Имена простых геттеров и сеттеров должны совпадать с именем поля без конечного подчеркивания. Для сеттеров используется префикс set_.
Общее:
Используется ограничение на длину строки в 80 символов.
В репозиторий подтягивается скрипт cpplint, который проверяет стиль файлов на соответствие codestyle. Стоит установить его в git hooks, чтобы проверка стиля выполнялась перед каждым коммитом.