Any language supports this type of syntax?
-
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != (0,1,2))
{
//Do something
}Instead of having to do like:
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != 0 &&
nThatVeryLongVariableYourMateNamed != 1 &&
nThatVeryLongVariableYourMateNamed != 2
)
{
//Do something
}-VUNIC
-
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != (0,1,2))
{
//Do something
}Instead of having to do like:
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != 0 &&
nThatVeryLongVariableYourMateNamed != 1 &&
nThatVeryLongVariableYourMateNamed != 2
)
{
//Do something
}-VUNIC
You could do that as an extension method in C# pretty easily. The syntax would be something like ```csharp if (nThatVeryLongVariableYourMateNamed.Excludes(0,1,2)) ```
This space for rent
-
You could do that as an extension method in C# pretty easily. The syntax would be something like ```csharp if (nThatVeryLongVariableYourMateNamed.Excludes(0,1,2)) ```
This space for rent
-
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != (0,1,2))
{
//Do something
}Instead of having to do like:
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != 0 &&
nThatVeryLongVariableYourMateNamed != 1 &&
nThatVeryLongVariableYourMateNamed != 2
)
{
//Do something
}-VUNIC
As Pete said, trivial to implement in C#:
public static class SomeExtensions
{
public static bool IsOneOf(this T value, params T[] options)
{
if (options is null || options.Length == 0) return false;
return Array.IndexOf(options, value) != -1;
}public static bool IsNotOneOf(this T value, params T\[\] options) { if (options is null || options.Length == 0) return true; return Array.IndexOf(options, value) == -1; }
}
...
if (nThatVeryLongVariableYourMateNamed.IsNotOneOf(0, 1, 2))
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
-
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != (0,1,2))
{
//Do something
}Instead of having to do like:
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != 0 &&
nThatVeryLongVariableYourMateNamed != 1 &&
nThatVeryLongVariableYourMateNamed != 2
)
{
//Do something
}-VUNIC
Fortran computed GOTO comes pretty close . . . 11 CONTROL STATEMENTS[^] There - that'll flush out the zealots.
Treading on the toes of giants . . .
-
You could do that as an extension method in C# pretty easily. The syntax would be something like ```csharp if (nThatVeryLongVariableYourMateNamed.Excludes(0,1,2)) ```
This space for rent
Not nearly as performant as the original. Though, if avoiding repetition is the OPs goal, a couple of other C# possibilities include: :)
int n = nThatVeryLongVariableYourMateNamed;
if (n == 0 || n == 1 || n == 2)
{
}switch(nThatVeryLongVariableYourMateNamed)
{
case 0:
case 1
case 2
break;
}private static readonly HashSet validValues = new HashSet { 0, 1, 2};
.
.
.
if (validValues.Contains(nThatVeryLongVariableYourMateNamed))
{
}if (new int[] { 0, 1, 2}.Contains(nThatVeryLongVariableYourMateNamed))
{
}In answer to the original question, I think there are some languages that support syntactic sugar for creating/checking sets. Though, none I commonly use. If I recall, in my hazy memory, I think the largely dead PASCAL language used to have such support :) In general, it's not much of a problem. Almost all languages, have a decently concise syntax for creating/checking sets. They simply do away with the fluff of formalizing it as a separate concept in the language.
-
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != (0,1,2))
{
//Do something
}Instead of having to do like:
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != 0 &&
nThatVeryLongVariableYourMateNamed != 1 &&
nThatVeryLongVariableYourMateNamed != 2
)
{
//Do something
}-VUNIC
Put the values in a Hashset.
-
Not nearly as performant as the original. Though, if avoiding repetition is the OPs goal, a couple of other C# possibilities include: :)
int n = nThatVeryLongVariableYourMateNamed;
if (n == 0 || n == 1 || n == 2)
{
}switch(nThatVeryLongVariableYourMateNamed)
{
case 0:
case 1
case 2
break;
}private static readonly HashSet validValues = new HashSet { 0, 1, 2};
.
.
.
if (validValues.Contains(nThatVeryLongVariableYourMateNamed))
{
}if (new int[] { 0, 1, 2}.Contains(nThatVeryLongVariableYourMateNamed))
{
}In answer to the original question, I think there are some languages that support syntactic sugar for creating/checking sets. Though, none I commonly use. If I recall, in my hazy memory, I think the largely dead PASCAL language used to have such support :) In general, it's not much of a problem. Almost all languages, have a decently concise syntax for creating/checking sets. They simply do away with the fluff of formalizing it as a separate concept in the language.
-
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != (0,1,2))
{
//Do something
}Instead of having to do like:
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != 0 &&
nThatVeryLongVariableYourMateNamed != 1 &&
nThatVeryLongVariableYourMateNamed != 2
)
{
//Do something
}-VUNIC
C++ equivalent:
bool contains(int var, std::vector ints) {
for (int x :ints) if (var == x) return true;
return false;
}...
int veryLongVarName = 12;
if (contains(veryLongVarName, { 1, 2, 3 })) {
OutputDebugString(L"Matches! Now we have fire!");
} -
As Pete said, trivial to implement in C#:
public static class SomeExtensions
{
public static bool IsOneOf(this T value, params T[] options)
{
if (options is null || options.Length == 0) return false;
return Array.IndexOf(options, value) != -1;
}public static bool IsNotOneOf(this T value, params T\[\] options) { if (options is null || options.Length == 0) return true; return Array.IndexOf(options, value) == -1; }
}
...
if (nThatVeryLongVariableYourMateNamed.IsNotOneOf(0, 1, 2))
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
Now that's nice. I'm going to have to borrow that :-D
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare Home | LinkedIn | Google+ | Twitter
-
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != (0,1,2))
{
//Do something
}Instead of having to do like:
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != 0 &&
nThatVeryLongVariableYourMateNamed != 1 &&
nThatVeryLongVariableYourMateNamed != 2
)
{
//Do something
}-VUNIC
{
int localVLVYMN = thatVeryLongVariableYourMateNamed;
}As a single block, so that your temp-int is limited in scope. Also spitting on the hungarian notation - I would not tough that code with a polearm :thumbsup:
Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
-
{
int localVLVYMN = thatVeryLongVariableYourMateNamed;
}As a single block, so that your temp-int is limited in scope. Also spitting on the hungarian notation - I would not tough that code with a polearm :thumbsup:
Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
For extra C#7 goodness:
{
ref int localVLVYMN = ref thatVeryLongVariableYourMateNamed;
...
}Now any changes to your alias will be reflected in the original. :) An added benefit for large
struct
s: you avoid making a copy of the value. Ref return values and ref locals (C# Guide) | Microsoft Docs[^]
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
-
For extra C#7 goodness:
{
ref int localVLVYMN = ref thatVeryLongVariableYourMateNamed;
...
}Now any changes to your alias will be reflected in the original. :) An added benefit for large
struct
s: you avoid making a copy of the value. Ref return values and ref locals (C# Guide) | Microsoft Docs[^]
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
Richard Deeming wrote:
Now any changes to your alias will be reflected in the original. :)
More ways to obfuscate my code :-D
Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
-
Richard Deeming wrote:
Now any changes to your alias will be reflected in the original. :)
More ways to obfuscate my code :-D
Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
More job security. :-D
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
-
More job security. :-D
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
-
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != (0,1,2))
{
//Do something
}Instead of having to do like:
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != 0 &&
nThatVeryLongVariableYourMateNamed != 1 &&
nThatVeryLongVariableYourMateNamed != 2
)
{
//Do something
}-VUNIC
-
Wasn't the old visual basic capable to use WITH?
www.robotecnik.com[^] - robots, CNC and PLC programming
-
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != (0,1,2))
{
//Do something
}Instead of having to do like:
int nThatVeryLongVariableYourMateNamed = 0;
if(nThatVeryLongVariableYourMateNamed != 0 &&
nThatVeryLongVariableYourMateNamed != 1 &&
nThatVeryLongVariableYourMateNamed != 2
)
{
//Do something
}-VUNIC
In Python you can use range(). So, for [0,1,2] you would do either;
if nThatVeryLongVariableYourMateNamed not in [0,1,2]:
or
if nThatVeryLongVariableYourMateNamed not in range(3):
or
if nThatVeryLongVariableYourMateNamed not in range(0,3):
or
if nThatVeryLongVariableYourMateNamed not in range(0,3,1):
Dave Find Me On:Web|Youtube|Facebook|Twitter|LinkedIn Folding Stats: Team CodeProject
-
In Python you can use range(). So, for [0,1,2] you would do either;
if nThatVeryLongVariableYourMateNamed not in [0,1,2]:
or
if nThatVeryLongVariableYourMateNamed not in range(3):
or
if nThatVeryLongVariableYourMateNamed not in range(0,3):
or
if nThatVeryLongVariableYourMateNamed not in range(0,3,1):
Dave Find Me On:Web|Youtube|Facebook|Twitter|LinkedIn Folding Stats: Team CodeProject
-
You could do that as an extension method in C# pretty easily. The syntax would be something like ```csharp if (nThatVeryLongVariableYourMateNamed.Excludes(0,1,2)) ```
This space for rent
Copy paste from SOverflow
static class Extensions
{public static bool In(this T item, params T\[\] items) { if (items == null) throw new ArgumentNullException("items"); return items.Contains(item); }
}
class Program
{static void Main() { int myValue = 1; if (myValue.In(1, 2, 3)) // Do Somthing... string ds = "Bob"; if (ds.In("andy", "joel", "matt")) // Do Someting... }
}