Return explicitly "empty" MapResult (fail-fast)

Ali Çehreli acehreli at yahoo.com
Fri Jan 30 00:34:31 UTC 2026


On 1/29/26 4:28 PM, kdevel wrote:
 > On Thursday, 29 January 2026 at 20:44:17 UTC, Ali Çehreli wrote:
 >> On 1/28/26 12:37 AM, kdevel wrote:
 >>> On Tuesday, 27 January 2026 at 02:05:45 UTC, Ali Çehreli wrote:
 > [...]
 >>>> auto example_func(bool fail)
 >>>> {
 >>>>     alias filterFunc = a => a != "expensive";
 >>>>     alias mapFunc = a => tuple!("value", "numLetters")(a, a.length);
 >>>>
 >>>>     auto makeRange(R)(R r = typeof(someExpensiveOperation()).init) {
 >>>>         return r
 >>>>             .filter!filterFunc
 >>>>             .map!mapFunc;
 >>>>     }
 >>>>
 >>>>     if (fail)
 >>>>     {
 >>>>         return makeRange();
 >>>>     }
 >>>>
 >>>>     auto list = someExpensiveOperation();
 >>>>
 >>>>     return makeRange(list);
 >>>> }
 >
 > Your function is equivalent to

No because you don't apply filterFunc or mapFunc below.

 >     auto example_func (bool fail)
 >     {
 >        alias filterFunc = a => a != "expensive";
 >        alias mapFunc = a => tuple!("value", "numLetters")(a, a.length);
 >
 >        auto list = fail
 >           ? typeof(someExpensiveOperation()).init
 >           : someExpensiveOperation();
 >
 >        return list
 >           .filter!filterFunc
 >           .map!mapFunc;
 >     }
 >
 > but it has only two levels of indentation and no nested function
 > (template). Alas it shares the duplication of "someExpensiveOperation()".

The problem is, one has to repeat filterFunc and mapFunc as well. And 
that's why a nested function solves the repetition issue elegantly for me.

 >> I must have misunderstood but it fails fast because it does nothing at
 >> all before returning the empty result. (The OP's goal.)
 >
 > Maybe the OP favors a different definition of "fail fast" as the
 > function under close scrutiny is not failing at all.
 >
 >        FailFast also refers to some programming techniques that cause
 >        an exception to be thrown or other redirection of control to
 >        occur upon meeting certain conditions. [...]
 >
 >        http://c2.com/

I must have read too much into the subject line: "empty" result. That's 
why I'm reminded of this simple technique that I used in the past. I 
assumed the OP was like me: the caller should not be bothered by 
exceptions, rather an empty result should be returned.

Ali



More information about the Digitalmars-d-learn mailing list