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?

Was it helpful?

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();
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top