On Thursday, 30 May 2024 at 12:56:40 UTC, Salih Dincer wrote:
> On Tuesday, 28 May 2024 at 19:39:45 UTC, monkyyy wrote:
> 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...
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@79
your example doesn't show overlapping states and im confused why you set up bitshifting without using it
switching over an enum I believe is solved with a with
block; going with the fizz buzz example, an enum isfizz{true,false}
wouldnt provide clarity
do try to take your example as something that show overlaping states
```d
nullable(T){
T me; alias me this;
bool isnull=false;
}
bool isvalid(USERNAME);//looks up a string in a database
bool authcheck(PASSWORD,USERNAME);//checks if user/pass match
switch(status,username.isnull,username.isvalid,password.isnull,password.authcheck(username){
with(Status){
case Running,0,1,0,1://ideal path
case ? ,0,1,0,1://reset server
case Running,1,?,?,?://show guest account
case ? ,?,?,?,0://invalid password page
}}