Is there a DXL-equivalent of JavaScript's switch statement? I want to check a variable against multiple strings and thought that using a switch-style statement would be easier to read (and write) than having multiple OR'ed equal statements. An example would be something like:
switch (sMyName) {
case "Jon":
case "Christopher":
case "Douglas":
case "Michael":
sPrefix = "Mr.";
break;
case "Janet":
case "Monica":
case "Karen":
case "Cathy":
sPrefix = "Ms.";
break;
}
I know these are a very simplistic list of names, but gets the point across of what I want to do. I'd rather do the above than have:
if (sMyName=="Jon" || sMyName=="Christopher" || sMyName=="Douglas" || sMyName=="Michael") {
sPrefix = "Mr.";
} else if (sMyName=="Janet" || sMyName=="Monica" || sMyName=="Karen" || sMyName=="Cathy") {
sPrefix = "Ms.";
}
which could turn out to be a large number of choices and thus become even harder to read.
Chris chrscote - Tue Feb 07 13:34:01 EST 2017 |
Re: DXL Equivalent of switch statement No there is no switch / case statement in DXL. Regarding readability you need to rethink in DXL and use what you have, and make the syntax tools you need for readability / productivity, like:
// ********** Hide this inside a library *************
// DXL supports variable arguments!
bool inArray(string names[]) {
if (sizeof names < 2) error "inArray expects at least 2 arguments!";
string search = names[0];
int i; for (i = 1; i < (sizeof names)-1; i++)
if (search == names[i]) return true;
return false;
}
// ******************************************
bool isDude (string dude) {
return inArray(dude, "Jon", "Christopher", "Douglas", "Michael");
}
bool isDudette (string dudette) {
return inArray(dudette, "Janet", "Monica", "Karen", "Cathy");
}
string sMyName = "Janet";
if (isDude sMyName) {
print "Dude!";
} else if (isDudette sMyName) {
print "Dudette";
} else {
print "What is it?"
}
But plain old if/else is not so bad actually. In the end, everybody reading an if/else knows what it means, with a custom function it can be harder to understand sometimes. Regards, Mathias |
Re: DXL Equivalent of switch statement Mathias Mamsch - Wed Feb 08 03:46:24 EST 2017 No there is no switch / case statement in DXL. Regarding readability you need to rethink in DXL and use what you have, and make the syntax tools you need for readability / productivity, like:
// ********** Hide this inside a library *************
// DXL supports variable arguments!
bool inArray(string names[]) {
if (sizeof names < 2) error "inArray expects at least 2 arguments!";
string search = names[0];
int i; for (i = 1; i < (sizeof names)-1; i++)
if (search == names[i]) return true;
return false;
}
// ******************************************
bool isDude (string dude) {
return inArray(dude, "Jon", "Christopher", "Douglas", "Michael");
}
bool isDudette (string dudette) {
return inArray(dudette, "Janet", "Monica", "Karen", "Cathy");
}
string sMyName = "Janet";
if (isDude sMyName) {
print "Dude!";
} else if (isDudette sMyName) {
print "Dudette";
} else {
print "What is it?"
}
But plain old if/else is not so bad actually. In the end, everybody reading an if/else knows what it means, with a custom function it can be harder to understand sometimes. Regards, Mathias Thank you again Mathias. I will look into doing this instead. |