Minimal

stressed for motivation and achievement

2006-09-16

 

Private functions calling private functions

I coded something the other day that got me thinking, primarily because I wasn’t satisfied with my solution. The dialog class in which I was working needed to make some changes to a couple of its controls. I added a new private method to make those changes and then coded away.

When done, I noticed I’d coded the same thing twice in the new method: once for each control. So, being a diligent refactorisor, I factored the duplication out to another private method and just called that for each control. Now, however, I had a private method that really shouldn’t be called from anywhere but another, specific private method.

This felt bad. I didn’t want other client code to mistakenly call the second method, as it logically belonged to the first method. At least, it did in my head. The second method’s existence only really made sense in the context of the first one. What to do? The following options fluttered into my head:

I read an article by Herb Sutter that converted the whole shebang into a functor, but it just looked too damn obscure. Anyone reading the resulting code would no doubt blurt a swift “WTF?”. Overkill, for sure.

In the end, I went with the second option above. Normally, I might’ve gone with the new class option, but in this case, I needed to avoid adding new files to the project (and that’s another story). I’m still not sure I did the right thing. What approach would you have taken?


Comments:
"This is essentially the same as the previous option, but without a class, so it sucks harder."

Why does not having a class suck harder? Is object orientation really so holy?
 
Good point. That was a particularly dumb statement on my behalf, perhaps based more on ingrained practices than logic. OO is certainly not some holy entity. For me, I just aim for clarity. OO often helps me in that regard, but it's not a necessity.

In this instance, I'm struggling to remember what might've made me write that. I suspect it was just that I'm more comfortable in classes. After 6 months working in a codebase that's largely global functions, I find myself shying away from anything that's not a strong declaration of restricted scope. And for me, nothing says restricted scope better than a private member function.

Still doesn't stop my statement being wrong, though. :-/
 
Fair enough. :-)
 
I think I’d have gone for the extract-a-class option, but I’d have made the new class private to dialog - so you get rid of the duplication and still keep things logically connected (and private), with no need to add any new files to the project either.
 
Post a Comment



<< Home

Archives

April 2002   May 2002   June 2002   July 2002   August 2002   September 2002   October 2002   November 2002   December 2002   January 2003   February 2003   March 2003   April 2003   May 2003   June 2003   July 2003   August 2003   September 2003   October 2003   November 2003   December 2003   January 2004   February 2004   March 2004   May 2004   June 2004   July 2004   August 2004   September 2004   October 2004   November 2004   December 2004   January 2005   February 2005   March 2005   April 2005   May 2005   June 2005   July 2005   August 2005   September 2005   October 2005   November 2005   December 2005   January 2006   February 2006   March 2006   April 2006   May 2006   June 2006   July 2006   August 2006   September 2006   October 2006   November 2006   December 2006   January 2007   February 2007  

This page is powered by Blogger. Isn't yours?