A nice D coding pattern

bearophile via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Nov 24 14:50:32 PST 2014


In some D programs I'm using this coding pattern:


struct Foo {
     // Instance fields here.

     @disable this();

     this(in string[] data) pure @safe
     in {
         // Many pre-conditions here.
     } out(result) {
         // Some post-conditions here.
     } body {
         // ...
     }

     Nullable!(string[][]) doIt() pure {
         //...
     }

     // Various other methods here...
}

void main() {
     // Created at compile-time.
     enum something = "........".Foo;

     // Something much larger is done at run-time.
     immutable const result = something.doIt;
}


The structure is created at compile-time using data known at 
compile-time (here a string). This struct has a constructor that 
runs at compile-time that has many pre-conditions that avoid 
wrong input data at compile-time.
The largest part of the computation is done at run-time calling 
one or more struct methods.
And the @disable this() assures that a struct is correctly 
initialized by the constructor.
This pattern has significant advantages regarding code 
reliability.

You can see an example of this pattern that I've used here:
http://rosettacode.org/wiki/Solve_a_Hopido_puzzle#D

Bye,
bearophile


More information about the Digitalmars-d-learn mailing list