We have moved to https://dokuwiki.librecad.org/
Lots of content was already moved to the new wiki, but there is still work to do. If you want to contribute, please register a new account at https://dokuwiki.librecad.org/
This wiki will be kept for a while to keep search engine results valid. Moved sites may be deleted here in future.
Difference between revisions of "LibreCAD 3 - LibreCAD 3 - code style"
(Modify shared pointers rules) |
LordOfBikes (Talk | contribs) m (fix typo) |
||
Line 10: | Line 10: | ||
'''Indentation'''<br/> | '''Indentation'''<br/> | ||
− | * Namespace | + | * Namespace blocks |
* public and private +1 and methods +2 | * public and private +1 and methods +2 | ||
Revision as of 20:50, 12 July 2018
Code style guide
Line length
Maximum line length is 120 columns
Spacing
- Between if, for, while and (
- Between comparison operators
- After ,
Indentation
- Namespace blocks
- public and private +1 and methods +2
Headers
- use #pragma once instead of #ifndef
- Include what you use
- Do not use virtual and override in the same declaration
Accessor naming
Use:
foo->layer()
instead of
foo->getLayer();
Immutables
All immutables must be created 'valid', throw an exception on an attempt to create an invalid immutable:
Circle::Circle(Coordinate const& center, double radius) : _center(center), _radius(radius) { if (_radius < 0.0) { throw "Invalid radius"; } }
All variables in an immutable class must be declared as const.
Exceptions
Only throw where code is effectively unreasonable:
document->entityByID(...); // return null if an entry does not exists
Variable naming
Use typedefs to shorten otherwise difficult to read names:
DECLARE_SHORT_SHARED_PTR(Circle) // OR typedef std::shared_ptr<Circle> Circle_SPtr; typedef std::shared_ptr<const Circle> Circle_CSPtr;
This can also make further variable-use more legible:
std::list<std::shared_ptr<const Circle>> myListVeryLong; // very long std::list<Circle_CSPtr> myList; // better readable
Shared pointers
Shared pointers should be passed by const reference, they can be passed as value if they are going to be stored in the target (with std::move)
Namespace std
Don't bring in the 'std' namespace into global; always use std::vector, std::map, std::string etc...
Variable declarations
Declare variables on separate lines to make them easier to read and to annotate.
Good:
const Coordinate _extensionPoint1; // check dependencies... const Coordinate _tangentPoint2;
Bad:
const Coordinate _extension_point1, _tangentPoint2; // which one did I want?
Const variables
You must add const modifiers after the variable type.
Good:
Line::Line(geo::Coordinate const& start, geo::Coordinate const & end, Layer_SPtr const layer) : CADEntity(layer), Vector(start, end) {..}
Bad:
Line::Line(geo::Coordinate const & start, const geo::Coordinate& end, Layer_SPtr const layer) : CADEntity(layer), Vector(start, end) {..}
Camel case
Use it as much as possible, though some exceptions are allowed:
- Variable names in a class may start with a underscore;
- An '_' (underscore) may be added if the variable name gets unreadable, e.g. in 'Dimension_CSptr';
- Underscores can help make function names autological, e.g. on_dimRadial_changed:
Good:
const String _textValue; void on_dimRadial_change() {...};
Bad:
const String _text_value; void on_dim_radial_change() {...};
Class names always start with an Upper-case letter.
Variable names always start with a lower-case letter.