I have found that I like static private functions because they allow me to make 
promises about my code, making it more self explanatory and I was interested in 
opinions from others about it.
It's not something I would want to force on other people but I would use it 
myself if people don't think it's too messy.

Reasoning:
A private method which does not touch any state of the is easy to review, it 
has no side channels to modify or access information so:
#1 with the same inputs it will always give the same output.
#2 it will not affect the world around it aside from it's inputs and output (no 
surprise side effects).
By declaring the private method static, you make that promise and the compiler 
will hold you to it.
As a reviewer I can let my guard down when looking at the code because it 
doesn't affect object state so it can't be the source of some types of bugs. 
The code is sandboxed so to speak.
These assumptions do not hold true if static variables are used but I believe 
those should never be used unless absolutely necessary and when they are, code 
should be reviewed more closely anyway.

Example:
https://github.com/xwiki/xwiki-rendering/blob/master/xwiki-rendering-transformations/xwiki-rendering-transformation-icon/src/main/java/org/xwiki/rendering/internal/transformation/icon/IconTransformation.java

If I were writing this now, I would be tempted to make these into static 
functions:
private Block convertToDeepTree(Block sourceTree, String iconName)
private void mergeTree(Block targetTree, Block sourceTree)
private int indexOf(List<Block> targetBlocks, Block block)
private boolean blockEquals(Block target, Block source)


Anyone have any thoughts on this pattern?

Caleb

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to