View mode: basic / threaded / horizontal-split · Log in · Help
June 20, 2012
what is the difference between static method of the class, module method and static method of the module?
I have a class, and I want to write factory methods which will 
encapsulate different ways of creating instances of this class.
I can do this in 3 ways:

// static method of the class
public class Item
{
	public static Item createItem_1() { ... }
}

// module function
public Item createItem_2() { ... }

// static function of the module
public static Item createItem_3() { ... }

Which way should I choose? What are their pros and cons?
June 20, 2012
Re: what is the difference between static method of the class, module method and static method of the module?
On 20-06-2012 17:45, ref2401 wrote:
> I have a class, and I want to write factory methods which will
> encapsulate different ways of creating instances of this class.
> I can do this in 3 ways:
>
> // static method of the class
> public class Item
> {
> public static Item createItem_1() { ... }
> }
>
> // module function
> public Item createItem_2() { ... }
>
> // static function of the module
> public static Item createItem_3() { ... }
>
> Which way should I choose? What are their pros and cons?

The static keyword has no effect on module functions, so 2 and 3 are 
equivalent. There is no significant difference between static class 
methods and module functions.

-- 
Alex Rønne Petersen
alex@lycus.org
http://lycus.org
June 20, 2012
Re: what is the difference between static method of the class, module method and static method of the module?
On Wednesday, June 20, 2012 17:47:05 Alex Rønne Petersen wrote:
> On 20-06-2012 17:45, ref2401 wrote:
> > I have a class, and I want to write factory methods which will
> > encapsulate different ways of creating instances of this class.
> > I can do this in 3 ways:
> > 
> > // static method of the class
> > public class Item
> > {
> > public static Item createItem_1() { ... }
> > }
> > 
> > // module function
> > public Item createItem_2() { ... }
> > 
> > // static function of the module
> > public static Item createItem_3() { ... }
> > 
> > Which way should I choose? What are their pros and cons?
> 
> The static keyword has no effect on module functions, so 2 and 3 are
> equivalent. There is no significant difference between static class
> methods and module functions.

The only difference is how they're called. createItem() vs Item.createItem().

- Jonathan M Davis
June 20, 2012
Re: what is the difference between static method of the class, module method and static method of the module?
On Wednesday, 20 June 2012 at 17:47:15 UTC, Jonathan M Davis 
wrote:
> On Wednesday, June 20, 2012 17:47:05 Alex Rønne Petersen wrote:
>> The static keyword has no effect on module functions, so 2 and 
>> 3 are equivalent. There is no significant difference between 
>> static class methods and module functions.
>
> The only difference is how they're called. createItem() vs 
> Item.createItem().

 I'd say just a little more than how they are called, it would be 
a direct relationship of the function with the class. Plus due to 
the direct relationship you can shorthand some of it (as long as 
it still makes sense).

 Although technically static functions are regular functions. But 
it's kinda like the difference of having enums internal vs 
external of a struct/class: Sometimes it just makes more sense 
(or localizes information a little more strongly).
June 20, 2012
Re: what is the difference between static method of the class, module method and static method of the module?
Alex Rønne Petersen:

> The static keyword has no effect on module functions, so 2 and 
> 3 are equivalent.

This problem is caused by DMD sloppyness regarding its management 
of attributes. A serious language doesn't accept a keyword like 
"static" where it has no meaning. It just causes confusion to 
newbies, and makes it harder to port D code across future D 
compilers...

Bye,
bearophile
June 20, 2012
Re: what is the difference between static method of the class, module method and static method of the module?
On 06/20/2012 09:52 PM, bearophile wrote:
> Alex Rønne Petersen:
>
>> The static keyword has no effect on module functions, so 2 and 3 are
>> equivalent.
>
> This problem is caused by DMD sloppyness regarding its management of
> attributes. A serious language  doesn't accept a keyword like "static"
> where it has no meaning.

What is a 'serious language'?

interface I{ static int x=2; } // java

> It just causes confusion to newbies, and makes
> it harder to port D code across future D compilers...
>
> Bye,
> bearophile

To be fair, it does not have no meaning. It is simply redundant, because 
all module scope declarations are implicitly 'static'.
Top | Discussion index | About this forum | D home