main()可有string[]参数
可用std.getopt取命令.

import std.stdio;
import std.getopt;
import std.random;

void main(string[] args) {
    int count;
    int minimum;
    int maximum;

    getopt(args,"count", &count,"minimum", &minimum,"maximum", &maximum);
//可改进如下.
    getopt(args,"count|c", &count,"minimum|n", &minimum,"maximum|x", &maximum);
//即-c 等价于--count
    

    foreach (i; 0 .. count) {
        write(uniform(minimum, maximum + 1), ' ');
    }

    writeln();
}

取环境变量.

import std.stdio;
import std.process;//访问环境变量

void main() {
    writeln(environment["PATH"]);
}

将之转为aa

  string[string] envVars = environment.toAA();

启动其他函数,类似c++的系统,pyos.system.

import std.stdio;
import std.process;//执行命令

void main() {
    const result = executeShell("ls -l deneme");
//执行壳命令.
    const returnCode = result[0];
    const output = result[1];

    writefln("ls 返回 %s.", returnCode);
    writefln("输出:\n%s", output);
}

main虽然是void,返回的也是成功为0,失败为非0.

import std.stdio;

int main(string[] args) {
    if (args.length != 3) {
        stderr.writefln("错误! 正确用法:\n" ~"%s 词1 词2", args[0]);
        return 1;
    }

    writeln(args[2], ' ', args[1]);

    return 0;
}

stderr,类似stdout,都输出在控制台.
异常,没啥看头,不喜欢.try-catch-finally.出错就重新改.
scope语句,三个:
scope(exit,成功,失败),后两个成功或失败后执行.第一个退出域时则执行.失败指出现异常.可以写成块.其实就是函数版的析构函数

    断定(logical_expression);
    断定(logical_expression,message);
//上面为语法.断定必须成立,否则运行失败
double averageAge(double first, double second) {
    assert(first >= 0);
    assert(second >= 0);

    return (first + second) / 2;
}

void main() {
    auto result = averageAge(-1, 10);
}
//下面是未达分支,或无效分支.
    } else {
        assert(false);//到达这里,就是失败.
    }

static assert编译时必须成立的断定.这相当于说是前提条件.没有前提条件,程序就可以退出了.
断定单元测试/合同编程中很重要.
-release开关,会在发布版本中删掉断定.而断定(假)的地方不会删除.表示不可达.
enforce确保异常.如果不满足条件,就抛.
不能完成任务,就抛异常.
异常是错误,但不是所有错误都是异常.
异常是可以恢复的错误.经过处理后就正常了.