k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose –...

45
Lightning Talks Jonathan Wakely – Smarter Than The Average Pointer Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide Anna-Jayne Metcalfe – Don't Let The Big Ball of Mud Sneak Up on You Roger Orr – Code Critiques Pete Goodliffe – The C++ Cathedral & The Bizarre Peter Sommerlad – C++'s “hello, world” Considered Harmful

Transcript of k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose –...

Page 1: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

Lig

htn

ing

Ta

lks

Jonathan Wakely – Smarter Than The Average Pointer

Seb Rose – Transformation Priority Premise

Aaron Ridout – Advocating References

Mike Long - Metricide

Anna-Jayne Metcalfe – Don't Let The Big Ball of Mud Sneak

Up on You

Roger Orr – Code Critiques

Pete Goodliffe – The C++ Cathedral & The Bizarre

Peter Sommerlad – C++'s “hello, world” Considered Harmful

Page 2: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

C++THE CATHEDRAL

&THE BIZARRE

PETE GOODLIFFE [email protected] @petegoodliffe

Page 3: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

PETE GOODLIFFEPROGRAMMER / AUTHOR / COLUMNIST / TEACHER ★ CONSCIENTIOUS CODER

@petegoodliffepete@goodliffe.netgoodliffe.blogspot.comwww.goodliffe.net

Page 4: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide
Page 5: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide
Page 6: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide
Page 7: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide
Page 8: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

semicolon overload

Page 9: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

void foo(){};

class Foo{public: Foo() { /* blah */ };};

Page 10: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

the non-virtual destructor

it’s just common sense, come on people

class Foo{public:

virtual void doSomething() = 0;};

Page 11: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

being very certain

if (foo == true) doFoo();

Page 12: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

being surprisedif (foo && bar || baz) doFoo();

Page 13: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

very careful deleteif (foo) delete foo;

Page 14: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

looking like code

void foo(Thing &t){ Component *source = t.source; { return true; } return false;}

Page 15: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

in(line) sanityin .h...

class Foo{public: void MyMethod();};

in .cpp:inline void Foo::MyMethod(){ /* do tonnes of stu! */ }

Page 16: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

the namespace class

Page 17: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

not using initialiser lists

Page 18: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

wrong order initialiser lists

Page 19: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

any warnings

Page 20: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

the wrong type of inheritance

Page 21: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

writing your own list

Page 22: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

or pair

Page 23: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

or string

Page 24: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

or list

Page 25: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

or...

Page 26: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

const (in)correctnessI said...void useFoo(const Foo &foo);

Chinese whispers…void useFoo(Foo &foo); // fred: i had to remove

//constness, as we adjust foo// before using it

Page 27: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

delete disaster

int *foo = new int [10];delete foo;

Page 28: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

doing nothing in stylebool Foo::ThingChanged(Thing *param, int value){ switch(param->GetTag()) { default: break; } return true;}

Page 29: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide
Page 30: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

rule of three

Page 31: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide
Page 32: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

stupid long functions

Page 33: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

ascii art “standard” header/*------------------------------------------------------------ Function: Enter: Exit: Notes : ----------------------------------------------------------*/void Foo::DoThing(Thing *pThing){

//… stu!

Page 34: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

just one more parameter

it’s only wafer theeeen...

Page 35: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

the early returnvoid Foo::DoSomethingAwesome(){ evilMachinations();

// fred: the app seems to crash with the code below return;

otherEvilMachinations();}

Page 36: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

inconsistencynamingspacing

pointers/references

Page 37: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

the helpful comment

void Foo::ItWasBuggyButIFixedItCozIAmGreat(){ // [geo!] Added this, it was responsible for // bugs #234 an #9087 if (foo == 23) ...}

Page 38: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

the wrong membersdon’t use any member variables

static methods placed here because that’s “where it’s used”

Page 39: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

making casual friendsclass Foo{ // because we need to get to… friend class CompletelyUnrelated;};

Page 40: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

leaving helpful notesor questions in the code

//fred: why set it to 24????

Page 41: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

protected member variables

for convenience

Page 42: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

commenting out code

large swathes of it

Page 43: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

calling everything foo

Page 44: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

@petegoodliffepete@goodliffe.netgoodliffe.blogspot.comwww.goodliffe.net

Page 45: k Jonathan Wakely – Smarter Than The Average Pointer l · 2012-05-28 · Seb Rose – Transformation Priority Premise Aaron Ridout – Advocating References Mike Long - Metricide

BUMPHDULL, but important ★

THIS DOCUMENT WAS CREATED BY PETE GOODLIFFE IT IS COPYRIGHT // © 2012 PETE GOODLIFFE

>> ALL RIGHTS RESERVED>> ALL THOUGHTS ARE OWNED>> PHOTOS AND IMAGES ARE MOSTLY

SOURCED FROM THE WEBTHANK YOU FOR READING // I HOPE IT WAS USEFUL

Version 1.0 2012-04-25