bool concat patternmatching with switch

Salih Dincer salihdb at hotmail.com
Thu May 30 12:56:40 UTC 2024


On Tuesday, 28 May 2024 at 19:39:45 UTC, monkyyy wrote:
> ```d
> switch(i%3==0,i%5==0){
>   case 1,1: return "fizzbuzz";
>   case 0,1: return "buzz";
>   case 1,0: return "fizz";
>   case ?,?: return i.to!string;
> }
> ```

Maybe smarter solutions can be produced with BitFlags. At least 
it will be more readable...

```d
import std.stdio;
import std.typecons;

enum Status
{
     Idle = 1 << 0,    // 0001
     Running = 1 << 1, // 0010
     Paused = 1 << 2,  // 0100
     Stopped = 1 << 3  // 1000
}

void main()
{
     BitFlags!Status currentStatus;
     currentStatus = Status.Running;
     switch (currentStatus)
     {
         case Status.Idle:
             writeln("Durum: Idle");
             break;
         case Status.Running:
             writeln("Durum: Running");
             break;
         case Status.Paused:
             writeln("Durum: Paused");
             break;
         case Status.Stopped:
             writeln("Durum: Stopped");
             break;
         default:
             writeln("Bilinmeyen durum");
             break;
     }

     currentStatus = Status.Paused;

     switch (currentStatus)
     {
         case Status.Idle:
             writeln("Durum: Idle");
             break;
         case Status.Running:
             writeln("Durum: Running");
             break;
         case Status.Paused:
             writeln("Durum: Paused");
             break;
         case Status.Stopped:
             writeln("Durum: Stopped");
             break;
         default:
             writeln("Bilinmeyen durum");
             break;
     }
}
```

SDB at 79


More information about the dip.ideas mailing list