Ik wil in dit topic graag een discussie beginnen over function pointer maps in cpp en deze voornamelijk richten op de onderhoudbaarheid en hoe gevaarlijk het is om function pointer maps te gebruiken.
De stelling hierbij is dan ook: Function pointer maps maken code beter onderhoudbaarder.
Function pointer maps zorgen ervoor dat de Unit Size en de complexity (McCabe) van functies omlaag gaat. Hierdoor worden ze makkelijker te begrijpen voor de programmeur en daarmee makkelijker onderhoudbaar.
Voorbeeldcode die ik weleens tegen kom waarbij een te ondernemen actie afhangt van een bepaalde string:
Door gebruik te maken van een function pointer map zou je dit ook als volgt kunnen scrijven:
Dit heeft twee voordelen. Allereerst is de volledige if else boom vermeden waardoor de McCabe complexity naar beneden gaat.
Daarnaast is er in het laatste voorbeeld maar 1 publieke functie nodig in Test in plaats van 3.
Verder is door het gebruik van een enkele define en een typedef de code in Test zelf ook nog leesbaar te houden. Ik ben daarom ook niet tegen het gebruik van function pointers maar ben benieuwd naar jullie mening hierover.
Indien gewenst post ik de implementatie van Test ook.
De stelling hierbij is dan ook: Function pointer maps maken code beter onderhoudbaarder.
Function pointer maps zorgen ervoor dat de Unit Size en de complexity (McCabe) van functies omlaag gaat. Hierdoor worden ze makkelijker te begrijpen voor de programmeur en daarmee makkelijker onderhoudbaar.
Voorbeeldcode die ik weleens tegen kom waarbij een te ondernemen actie afhangt van een bepaalde string:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| const std::string stringObject("DEFINE_A"); Test test; if("DEFINE_A" == stringObject) { test.TestA(); } else if ("DEFINE_B" == stringObject) { test.TestB(); } else if ("DEFINE_C" == stringObject) { test.TestC(); } else { // Error? } |
Door gebruik te maken van een function pointer map zou je dit ook als volgt kunnen scrijven:
C++:
1
2
3
| const std::string stringObject("DEFINE_A"); Test test; test.doStuff(stringObject); |
Dit heeft twee voordelen. Allereerst is de volledige if else boom vermeden waardoor de McCabe complexity naar beneden gaat.
Daarnaast is er in het laatste voorbeeld maar 1 publieke functie nodig in Test in plaats van 3.
Verder is door het gebruik van een enkele define en een typedef de code in Test zelf ook nog leesbaar te houden. Ik ben daarom ook niet tegen het gebruik van function pointers maar ben benieuwd naar jullie mening hierover.
Indien gewenst post ik de implementatie van Test ook.