naming convention for methods that transfer ownership
-
27-10-2019 - |
Question
Consider the following example:
class Foo
{
private Bar x;
// ...
public Bar getAndResetX()
{
Bar result = x;
x = new Bar();
return result;
}
}
Is there an established naming conventions for such methods? Like yieldX
, transferX
or something?
Solution
We used to have the convention Adopt and Orphan as a prefix to provide intention in the method name (taken from Taligent book on C++).
Bar b = foo.orphanBar(); // take Bar out of Foo
foo.adoptBar(b); // put it right back in
You could use something similar to provide ownership clues to the objects. Quite frankly though I would stick with the Java convention of using add and remove. They provide enough intention and other programmers will not need to read a comment explaining the new convention.
Bar b = foo.removeBar(); // take Bar out of Foo
foo.addBar(b); // put it right back in
OTHER TIPS
I'm not sure that there is a naming convention for such methods. IMHO, I would use the verb take (e.g. takeX()
). For more information regarding method naming conventions, see JLS §6.8.3 Method Names.
But in all honesty, it's really just a matter of opinion. If you're really that concerned, I'd recommend you browse the Java API for methods that are functionally equivalent, and then model your method name after those.
Mozilla's native smart-pointer classes use the method forget()
to indicate a transfer of ownership:
already_AddRefed<nsIFoo> GetFoo() {
nsCOMPtr<nsIFoo> foo = ...
...
return foo.forget();
}