Do you think if statement as expression would be nice to have in D?

user1234 user1234 at 12.de
Sat Jun 4 16:55:37 UTC 2022


On Saturday, 4 June 2022 at 16:28:07 UTC, Nick Treleaven wrote:
> On Saturday, 4 June 2022 at 16:24:10 UTC, user1234 wrote:
>> On Saturday, 4 June 2022 at 16:15:26 UTC, Nick Treleaven wrote:
>>> On Saturday, 4 June 2022 at 11:35:41 UTC, user1234 wrote:
>>>> ```
>>>> const char = if (current < input.len)
>>>>             input[current]
>>>>         else
>>>>             break;
>>>> ```
>>>>
>>>> - So the `break` expression has a type ? And this type is 
>>>> compatible with the typê of `input[current]` ? wut ?
>>>
>>> Just like `throw` is an expression in D now. It's type is 
>>> noreturn, which implicitly converts to any type.
>>
>> I think this does not give intuitively what char value will 
>> be: undefined, 0 ?
>> Well in this case a loop is exited and char is out of scope so 
>> that does not matter but what if char is a var owned by the 
>> loop outer scope.
>
> In that case, no assignment would occur. Control flow was 
> interrupted before the assignment.

yes, this is what I observe

```
const std = @import("std");

pub fn ert(input: []const u8) u8 {
     var ret: u8 = 0;
     var current: usize = 0;
     while (true) {
         ret = if (current < input.len - 1)
             input[current]
         else
             break;
         current += 1;
     }
     return ret;
}

pub fn main() void {
   const t : u8 = ert("ABC");
   std.debug.print("{}\n", .{t});
}
```

> 66

I had no idea. Not mind changing however.


More information about the Digitalmars-d mailing list