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

Reply via email to