Skip to content

[Draft] Code style

Yevgeniy Zakharov edited this page May 17, 2019 · 22 revisions

This is a very beginning of defining a code style of the lib

  1. Use using instead of typedef - using is more readable
  2. Class can have super alias in its' score only to its' superclass. Otherwise give it a different name
  3. Curly braces after if, for and while must be put on the same line not on the next one - same code less lines
  4. All classes/structs are named with lowercase with underscore just like std's ones - one of sqlite_orm's goals is to look like it is a part of stdlib: storage_t, table_type, statement_binder
  5. private variables are named with camelcase: needQuotes, compositeKeyColumnNames
  6. public functions are named just like classes: begin, make_table, bind
  7. every #include from stdlib must have a list of functions/classes from it which are used in a current source file. These lists must be actual to keep includes in actual state and remove excess once they are not required: #include <string> // std::string, #include <cstddef> // std::nullptr_t, #include <algorithm> // std::find_if
  8. don't write constructors which can be replaced with initializer list constructors - less code -> same result
  9. don't make member field private/protected with single lined getter/setter - make a public field instead. Once you need logic in setter or getter - then make a refactoring, move to private/protected and add getter and setter. Least of getters and setters require logic but single field logic increases code from one line to seven:
public:
    int myField = 0;

vs

private:
    int myField = 0;
public:
    int getMyField() const {
        return this->myField;
    }

    void setMyField(int value) {
        this->myField = value;
    }
  1. always use this while accessing member fields and member functions cause it makes reading complicated template code easier
  2. use std::string &str instead of std::string& str cause & and * are not a part of a type:
int* a, b;

doesn't declare two pointers but one pointer and one int. Same for return type of functions

Clone this wiki locally