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
Line 68: Line 68:
  
 
Don't bring in the std namespace into global. So  always use std::vector, std::map, std::string etc...
 
Don't bring in the std namespace into global. So  always use std::vector, std::map, std::string etc...
 +
 +
'''Variable declarations on separate lines'''
 +
For readability we prefer to have variables declared on separate lines.
 +
This will make commenting on variables when needed easer and in general add to readability.
 +
 +
good style:
 +
<pre>
 +
const Coordinate _extension_point1;
 +
const Coordinate _extension_point2;
 +
</pre>
 +
 +
bad style:
 +
<pre>
 +
const Coordinate _extension_point1, _extension_point2;
 +
</pre>

Revision as of 12:57, 26 May 2014

Code style guide

Accessor naming:

use foo->layer()

instead of

 foo->getLayer();


Immutables: Are immutables must be created 'valid', throw an exception if a immutable is attempted to be created that is invalid.

example:

Circle::Circle(const Coordinate& center, double radius) : _center(center) {
    if (radius < 0.0) {
        throw "Invalid radius";
    }

    _radius = radius;
}

Exceptions:

Only throw exceptions in rare situations that are effectively unreasonable.

For example:

document->entityByID(...); // return null if a entry does not exists


hide shared_ptr behind a typedef:

    typedef std::shared_ptr<Circle> Circle_SPtr;
    typedef std::shared_ptr<const Circle> Circle_CSPtr;

This so we can 'shorten' our shred pointers, example:

  std::list<std::shared_ptr<const Circle>> myListLong; // Less readble
  std::list<Circle_CSPtr> myListReadable; // better readable


Shared pointer passing:

never pass shared_ptr by reference:

Good:

Line::Line(const geo::Coordinate& start, const geo::Coordinate& end, const Layer_SPtr layer) : CADEntity(layer), Vector(start, end) {..}

Bad:

Line::Line(const geo::Coordinate& start, const geo::Coordinate& end, const Layer_SPtr &layer) : CADEntity(layer), Vector(start, end) {..}

using namespace std;

Don't bring in the std namespace into global. So always use std::vector, std::map, std::string etc...

Variable declarations on separate lines For readability we prefer to have variables declared on separate lines. This will make commenting on variables when needed easer and in general add to readability.

good style:

const Coordinate _extension_point1;
const Coordinate _extension_point2;

bad style:

const Coordinate _extension_point1, _extension_point2;