How to simplify nested ifs
aliak
something at something.com
Wed Mar 14 00:05:31 UTC 2018
On Tuesday, 13 March 2018 at 13:13:07 UTC, rumbu wrote:
> On Tuesday, 13 March 2018 at 12:23:06 UTC, Ozan Süel wrote:
>> Hi
>>
>> I have a construction like the following
>>
>> if (source) {
>> if (source.pool) {
>> if (source.pool.repository) {
>> if (source.pool.repository.directory) {
>> if (source.pool.repository.directory.users) {
>> // do something
>>
>> Any chance to simplify this nested ifs?
>> I know some languages has a way like.
>>
>> if (source?pool?repository?directory?users) // do something
>>
>>
>> Similar ways in D?
>>
>> Thanks and Regards, Ozan
>
> You need the null conditional operator which is not available
> in D.
>
> A library solution can be found there:
> https://forum.dlang.org/post/mailman.2562.1403196857.2907.digitalmars-d@puremagic.com
>
> SafeDeref(source).pool.repository.directory.users
This library may help as well:
https://code.dlang.org/packages/optional
It will handle safe dispatching of reference types and pointer
types and give you back the actual return result as well wrapped
up in an optional value.
class C0 {
C1 f() { return new C1(); }
class C1 {
C2 f() { return new C2(); }
class C2 {
int f() { return 0; }
}
}
}
auto res1 = some!C0(null).dispatch.f.f.f; // all no ops
auto res2 = some!C0(new C0()).dispatch.f.f.f // calls all fs
assert(res1 == none);
assert(res2 == some(0));
More information about the Digitalmars-d-learn
mailing list