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