The D Scripting Language
Per Ångström
d-news at autark.se
Mon Nov 15 08:20:02 PST 2010
On 2010-11-15 14:27, spir wrote:
> On Mon, 15 Nov 2010 13:15:50 +0100
> Per Ångström<d-news at autark.se> wrote:
>> string func(string s)
>> {
>> /++
>> // A handy feature of many scripting languages, but not in D
>> // (in D, the type of the or-expression is bool):
>> // The type of the or-expression is the type of the first
>> // sub-expression that evaluates to true.
>> return s || "default";
>> +/
>> // The D equivalent, arguably more readable but also more verbose:
>> return s ? s : "default";
>> }
>
> More verbose?
> Real programmers *want* to type 3 more characters when this makes code clearer!
> ;-)
Verbosity is not only about more code to type, it's also about more code
to read. My example was brief so of course that difference is
negligible. Here's a somewhat more complex example which forces a
trade-off between an extra temporary variable, evaluating the same
expression twice or using a template:
/++
Simulates type-returning or-expression
+/
template or(T) {
T _(T a, lazy T b) {T tmp = a; return tmp ? tmp : b;}
}
void m() {
/+ least verbose, invalid D:
string s = func("...") || "default";
+/
/+ valid D, but requires extra temp variable:
string tmp = func("...");
string s = tmp ? tmp : "default";
+/
/+ valid D, no temp variable but two (hopefully idempotent)
function calls:
string s = func("...") ? func(".,.") : "default";
+/
// valid D, but arguably ugly:
string s = or!string._(func("..."), "default");
}
--
Per Å.
More information about the Digitalmars-d
mailing list