Code-File structure

Nathan M. Swan nathanmswan at gmail.com
Tue Jun 12 18:56:31 PDT 2012


On Tuesday, 12 June 2012 at 07:04:15 UTC, Henrik Valter Vogelius 
Hansson wrote:
> Hi!
>
> I'm new to D and trying everything out. Got the basics down 
> which are very straightforward and similar to other languages. 
> My professional background is primarily in C/C++-variants and 
> Ruby if it helps.
>
> I have a problem with how modules, packages and files work. I 
> don't really know how I am supposed to organize my code. I like 
> namespaces from C++ which is probably my curse. What I want to 
> write is code similar to this:
>
> MyClass obj = new MyClass();
> SomePackage.SecondClass secondObj = new 
> SomePackage.SecondClass();
>
> Problem here is that SecondClass is a module. Is there some 
> nifty trick I can do here to solve this? I tried with just 
> having one module file which would hold all it's classes and 
> functions but that backfired very quickly as you can imagine 
> since it grew too large too quickly for most simple things.
>
> I am open to any suggestions of course which would make it 
> simple for me to have a good structure with my files and also 
> make my code easily readable. Though if possible I would like 
> anything that goes under the package/module can somehow be 
> placed in it's own folder.

A module is a file, which can contain multiple 
functions/classes/etc. A package is a folder with files. You 
cannot put multiple modules in a file like C++ namespaces. 
Generally, I create multiple modules in a single package, and 
only use multiple packages when I have too many modules.

Here's a sample file structure:

src
   - ddi
     - color.d
     - csv.d
     - io.d
     - main.d
     - msg.d

A larger project, SDC, has 15 modules in the main package, and 
six subpackages with on average five modules inside them. I like 
the rule-of-15 in whether something is too big, though that is 
personal taste and you might like more structure than I do.

In this case, have SomePackage be some_module, and have 
SecondClass be inside of some_module.d:

auto obj = new MyClass();
auto secondObj = new some_module.SecondClass();

It's convention to _always_ use lower case, due to different 
filesystem's rules on case.

Hope this helps,
NMS


More information about the Digitalmars-d-learn mailing list