Not sure how to translate this C++ variable to D.
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Mar 15 08:45:26 PDT 2016
On 03/15/2016 07:29 AM, WhatMeWorry wrote:
>> SpriteRenderer Renderer; // Although, I would name it 'renderer'
> Ok. I was trying something more D like, by doing:
>
> SpriteRenderer Renderer = new SpriteRenderer();
That would work if the variable were const or immutable and if
everything needed to execute the expression were available at compile time:
const(SpriteRenderer) renderer = new SpriteRenderer();
immutable(SpriteRenderer) renderer = new SpriteRenderer();
(Note: Associative arrays literals still cannot be initialized with that
syntax and arrays may have performance implications.)
For mutable variables and for anything in general, module variables can
be initialized in 'statit this()' and 'shared static this()' scopes:
static this() {
renderer = new SpriteRenderer();
}
The difference is that 'static this()' is executed at runtime before any
code in the module gets executed. It is like the constructor of the
whole module. (You can have many disjoint 'static this()' blocks, which
would all get executed.)
> In large projects with 1000s of
> line of code and many many modules, classes, structs, and functions; is
> it probably true that most of the time the vast majority of variables
> are going to be inside one of above constructs?
In D, everything will be inside one of those constructs because you
included "modules". :) Like many modern languages, D lacks a global
scope. Although we are advised to use the global scope much less in
general, it is less applicable to D. In other words, it is fine to have
module variables. For example, if a module consists of a single class,
there wouldn't be any difference between making a variable class-static
or module-scope. (Others, please correct me if you know any differences.)
> And is there a name for the variables that fall outside of the above
> constructs?
I think module-scope or module would work.
> I see so many tiny code snippets in books and docs, that when I do look
> at large dub/github projects, I'm not sure how to organize the "stuff"
> that slops over the edges.
That's always hard :) but "cohesion" seems to be a winning goal: program
constructs should have little responsibilities.
Ali
More information about the Digitalmars-d-learn
mailing list