On Tuesday, 13 March 2018 at 12:39:24 UTC, Dmitry Olshansky wrote:
Hi, folks!

I’m testing waters for a D course at one University for first time it’ll be an optional thing. It’s still discussed but may very well become a reality.

Before you ask - no, I’m not lecturing and in fact, I didn’t suggest D in the first place! Academics are finally seeing light in the gloom of 1 year OOP in C++ course having underwhelming results.

Now to the point, I remeber Chuck Allison (pardon if I misspelled) doing D lectures at Utah Valley University, here:
https://dconf.org/2014/talks/allison.html

There is also Ali’s book. But anything else easily adoptable as course material?

—
Dmitry Olshansky

Hi Dmitry,

for presenting D to my team I used following example. It highlights some features of D: Meta programming, templates, CTFE, UFCS, OOP in D,
Functional programming in D and ...

It is a compile time i18n library in ~50 lines.

import std.experimental.scripting;

const devBundle = import("messagebundle.properties");
const identifiers = getIdentifiers(devBundle);
const languages = ["en", "de"];

void main()
{
    auto t = new TextBundle("en");
    writeln( t.text!"task.isNotARegisteredCommand"("lala"));
}

string[] getIdentifiers(string s)
{
return s.split("\n").filter!(l => l.canFind(" = ")).map!(l => l.split(" = ")[0]).array;
}

class TextBundle
{
    private string _language;

    alias TextKeyValue = string[string];
private static const TextKeyValue[string] _languageTextKeyValue;

    this(string language)
    {
        assert(language in _languageTextKeyValue);
        _language = language;
    }

    string text(string s)(string[] params...)
    {
        static assert(identifiers.canFind(s));
        string content = _languageTextKeyValue[_language][s];

        foreach(i, param; params)
            content = content.replace("{"~i.to!string~"}", param);

        return content;
    }

    static this()
    {
        static foreach(language; languages)
        {
static if( __traits(compiles, import("messagebundle_"~language~".properties")))
            {
string s = import("messagebundle_"~language~".properties"); foreach(a; s.split("\n").filter!(l => l.canFind(" = ")).map!(l => l.split(" = ")))
                {
                    _languageTextKeyValue[language][a[0]] = a[1];
                }
            }
        }
    }
}

The property files:

-messagebundle.properties-
task.isNotARegisteredCommand = `{0}` is not a registered command.

-messagebundle_en.properties-
task.isNotARegisteredCommand = `{0}` is not a registered command.

The property file for DE does not exist for showing __traits(compiles,...) functionality.
I does fit in a 60 minute lecture.

Kind regards
André




Reply via email to