On Thu, May 08, 2014 at 01:59:58AM -0700, Jonathan M Davis via 
Digitalmars-d-learn wrote:
> On Thu, 08 May 2014 07:29:08 +0000
> bearophile via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com>
> wrote:
> 
> > Jonathan M Davis:
> >
> > > ultimately, this sort of thing pretty much always ends up being
> > > highly subjective.

FWIW, for very long function signatures I write it this way:

        const(T)[] myVeryLongFunction(T)(const(T)[] arr,
                                         int        x,
                                         int        y,
                                         int        z,
                                         ExtraArgs  extraArgs)
                pure @safe nothrow
                if (is(T : int) &&
                    someOtherLongCriteria!T &&
                    yetMoreVeryLongCriteria!T)
        {
                ...
        }


> > But please put the const/immutable of methods on the right:
> >
> > struct Foo {
> >      void bar1() const {} // Good
> >      const void bar2() {} // Bad
> > }
> 
> Well, that's one case where there's actually an objective reason to
> put it on the right due to one of the flaws in the language - that
> it's the one place that const inconsistently does not apply to the
> type immediately to its right (though it's consistent with how
> attributes are applied to the function itself - just not consistent
> with variables).

Due to this flaw, I've stopped writing "const T" completely -- now I
only ever write "const(T)". Besides, there is also the ambiguity between
const(T)[] and const(T[]), so I regard writing const without parens
(const T[]) as a bad practice in D.


> It's also because of this that I favor putting most attributes on the
> right (though that's subjective, unlike with const). I only put
> attributes on the left if they're on the left in C++ or Java (e.g.
> static, public, or final).  Everything else goes on the right.
[...]

Ditto. I think this is the closest we can come to consistency given the
current language.


T

-- 
My program has no bugs! Only undocumented features...

Reply via email to