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"

From LibreCAD wiki
Jump to: navigation, search
m (spelling mistake)
m (spelling mistake)
Line 2: Line 2:
  
 
'''Accessor naming'''<br/>
 
'''Accessor naming'''<br/>
use:
+
Use:
 
<pre>foo->layer()
 
<pre>foo->layer()
 
</pre>
 
</pre>
Line 12: Line 12:
  
 
'''Immutables'''<br/>
 
'''Immutables'''<br/>
All immutables must be created 'valid', throw an exception on an attempted to create an invalid immutable:
+
All immutables must be created 'valid', throw an exception on an attempt to create an invalid immutable:
 
<pre>
 
<pre>
 
Circle::Circle(Coordinate const& center, double radius) : _center(center), _radius(radius) {
 
Circle::Circle(Coordinate const& center, double radius) : _center(center), _radius(radius) {
Line 114: Line 114:
 
</pre>
 
</pre>
 
<br/>
 
<br/>
'''Class names always start with an Upper-case letter'''
+
'''Class names always start with an Upper-case letter.'''
  
'''Variable names always start with a lower-case letter'''
+
'''Variable names always start with a lower-case letter.'''
 
<br/>
 
<br/>
 
<br/>
 
<br/>
 
[[Category:Developers]]
 
[[Category:Developers]]

Revision as of 21:32, 5 January 2017

Code style guide

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:

    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

Never pass a shared_ptr by reference.

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, geo::Coordinate const& end, Layer_SPtr const  &  layer) : CADEntity(layer), Vector(start, end) {..}


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.