Can some one explain how the below function evaluates, appreciate your help in advance!!
if(true, false, false, true, false, 30, 40)
Discussion posts and replies are publicly visible
the if() function can handle if/else if/else functionality inherently. If given more than 3 parameters (if/then/else), the subsequent odd-numbered parameters [except the final one] will each be evaluated as a new condition.
ri!colorIndex = 1,
ri!colorIndex = 2,
ri!colorIndex = 3,
For example, the above code will evaluate to "Red" for an input of 1, "Green" for an input of 2, "Blue" for an input of 3, and for any other input value, it will return the default return value of "Something else..."
NOTE: as mentioned down-thread, this functionality is not officially supported or documented, so use it with caution if at all. (/edit)
Ajoy said:if(true, false, false, true, false, 30, 40)
This will return false.
The function evaluates the first input - In your case this is "true". Since it evaluates to true, it returns the 2nd input. The 3rd input would be returned if the 1st input evaluated to false.
test this by changing the second input from "false" to "Appian"
Is this a supported "feature" as it does not appear to be mentioned on the help page?
I'm with you, Gavin - if it's not in the documentation then it is not officially supported. I've encountered a similar 'bending' of the index() function where you can provide a list of values as way of navigating a tree-structure, and having asked Appian Engineering about this I had the same response - the documentation says it only takes 3 parameters and that's how far the official support will take you.
Appian can go one of three ways about this:
1. Fully document it
2. Alter if() so it no longer behaves this way
3. Do nothing and leave this question in Limbo
Given the fact that at least some portion of Appian code out there, who knows how much, runs because someone figured out if() works this way, I would think option 2 might break an untold number of applications. Appian wouldn't want to do this, so I like option 1 and really like the odds of option 3 happening.
Well to be fair, I was describing how it *does work*, especially given the context of the original question. That's not to say whether it's officially documented / supported / not supported / etc. I agree that anyone who uses this functionality should do so with caution.
As an aside, I'd consider the error message you get when entering an invalid number of parameters fairly official:
Agreed - it's used this way in at least a few places in a legacy application I've inherited, in a way that would be a pretty big pain to need to retroactively clean up. I personally hope they'll just make this functionality official, because all-in-all it's a far less messy way of doing if/then/else functionality, as opposed to the traditional style of using infinite levels of nesting, which just looks nasty.
Thank you! Mike, it was really informative
Thank you, Rob.
I remember code I made one time that wound up with dozens of close parenthesis at the end.
Unfortunately, you can get yourself into highly unreadable space either way when you need an if() to decide which of two if functions you need to run.
firstCondition = true,
if( secondCondition = true, "output", "other output"),
if( thirdCondition = true, "something different", "something completely diffferent")
/*or equally valid*/
firstCondition = true,
if ( secondCondition = true, "output, "other output"),
thirdCondition = true,
"something completely different"
) /*Wait....so the first one needs an if() all to itself but not the second one? Yep*/
It just feels like there's always going to be a way to make this painful to anyone who has to maintain your code.
© 2023 Appian. All rights reserved.