-
Notifications
You must be signed in to change notification settings - Fork 0
Coding style
Alexandr Akulich edited this page Mar 23, 2016
·
4 revisions
- Каждый класс в двух отдельных файлах, базовое имя которых совпадает с названием класса:
- Реализация в .cpp.
- Объявления в .hpp. (Расширение .h относится к языку Cи. Объявление структуры класса не является валидным Си-кодом.)
- Все поля должны начинаться с m_. (member)
- Имена функций и переменных должны быть в camelCase.
- Табов в исходном тексте программы быть не должно. Совсем.
- Вместо табуляции - 4 пробела. (Оба правила по-умолчанию автоматически выполняются в среде Qt Creator)
- Должны быть пробелы между ключевыми словами и параметрами.
- Обязательны пробелы между мат. операциями. (supposedNewPosition = position + supposedTotalSpeed * dT + totalAcceleration * dT * dT / 2;)
- Открывающаяся фигурная скобка, начинающая функцию, либо определение класса, пишется с новой строчки.
- Каждая новая открывающаяся фигурная скобка пишется на той же строчке, что и относящийся к ней оператор.
- После открывающейся фигурной скобки всегда следует перенос строки, либо оператор else (else if).
- Для разделения можно использовать только одну пустую линию.
- Допускается перенос параметров на следующую строку.
- После ключевого слова и перед фигурной скобкой (если она не является первым символом в строке) всегда ставится ровно один пробел.
- Для указателей и ссылок: всегда ставится один пробел между типом и ‘*’ или ‘&’, но никогда не ставится пробел между ‘*’ или ‘&’ и названием переменной.
void CTelegramDispatcher::ensureSignedConnection(CTelegramConnection *connection)
{
if (connection->status() == CTelegramConnection::ConnectionStatusDisconnected) {
connection->connectToDc();
} else {
// If need an exported auth to sign in
if (connection->authState() == CTelegramConnection::AuthStateHaveAKey) {
quint32 dc = connection->dcInfo().id;
if (m_exportedAuthentications.contains(dc)) {
connection->authImportAuthorization(m_exportedAuthentications.value(dc).first,
m_exportedAuthentications.value(dc).second);
} else {
if (activeConnection()->authState() == CTelegramConnection::AuthStateSignedIn) {
activeConnection()->authExportAuthorization(dc);
}
}
}
// Else - nothing to do.
}
}
Порядок секций:
- public
- public slots
- signals
- protected slots
- protected
- private slots
- private
- Пустые секции нужно пропускать.
- После каждой секции должна быть пустая строка.
- Поля всегда перечисляются после функций.
class CBase
{
public:
bool isValid() const { return m_id != 0; }
virtual CScriptAdaptor *scriptAdaptor() const = 0;
virtual QStringList files() const;
public slots:
void setId(quint32 newId);
void setTitle(const QString &newTitle);
signals:
void idChanged(quint32 newId);
void titleChanged(QString newTitle);
protected:
void copyHelper(const CBase *sourceBase);
void copyStyle(const CBase *sourceBase);
private:
quint32 m_id;
QString m_title;
};
- Всё, что может быть приватным (защищённым), должно быть приватным (защищённым).
- Всё, что может быть const, должно быть const.
- Использовать префиксную инкрементацию.
- В заголовочных файлах следует подключать минимум заголовочных файлов — вместо этого следует использовать предварительное объявление.
- Не допускается использование препроцессора для ввода переменных. Вместо этого следует создавать const static переменные нужного типа с нужным значением, либо использовать enum.