|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
Ternary operators
Was I the only one that used these on the robot?
For those not in the know, Ternary operators are essentially an inline if statment. Example using if statements, like mama told you to do so: Code:
boolean getState() {
if(this.thing.state) {
return true;
else {
return false;
}
}
Code:
boolean getStateTernary() {
return this.thing.state ? true : false;
}
The layout is: Code:
variable = [boolean condiditon] ? [if its true] : [if its false]; Did anyone else use these? |
|
#2
|
|
Re: Ternary operators
Instead of using the ternary operators or the if statements in your examples, why don't you just return the value of the boolean going into the if or ternary?
Instead if this: Code:
boolean getState() {
if(this.thing.state) {
return true;
else {
return false;
}
}
Code:
boolean getStateTernary() {
return this.thing.state ? true : false;
}
why not just this? Code:
boolean getState() {
return this.thing.state;
}
|
|
#3
|
|||
|
|||
|
Re: Ternary operators
I used them a couple of times in our robot code. It's a little unreadable, but it gets the job done well
|
|
#4
|
||||
|
||||
|
Re: Ternary operators
I would use them if I had a reason to. This year I never did.
and @above how so? (booleanValue ? true : false) is equivalent to booleanValue for all intents and purposes, and booleanValue is more succinct. There's no way the former could cause a memory leak, unless the latter does too. Last edited by Al3+ : 05-04-2010 at 12:29. |
|
#5
|
||||
|
||||
|
Re: Ternary operators
I don't see how this could cause a memory leak. I use this type of statement all the time in C without a problem.
|
|
#6
|
||||
|
||||
|
Re: Ternary operators
never mind about the memory leaks
|
|
#7
|
||||
|
||||
|
Re: Ternary operators
Quote:
@Radical Pi: Yay, can you post some memorable examples of using them? |
|
#8
|
|||
|
|||
|
Re: Ternary operators
Quote:
Code:
kickerJag->Set(jr->GetTrigger() || dsio->GetDigital(11) ? 0.0 : dsio->GetAnalogInRatio(1)); |
|
#9
|
||||
|
||||
|
Re: Ternary operators
I tend to use Ternary operators in printf() statements in C/C++ when trying to print boolean values.
Code:
printf("Some boolean value is : %s\n", some_bool ? "true" : "false");
|
|
#10
|
|||
|
|||
|
Re: Ternary operators
I use these all the time. In my opinion, they make code more readable (so long as the person reading it knows what they are) and clarify the intent of what you are doing in many places.
Some places I like to use them include when the arguments to a method call are dependent on a condition: Code:
wpiRelay.set(isOn
? edu.wpi.first.wpilibj.Relay.Value.kOn
: edu.wpi.first.wpilibj.Relay.Value.kOff);
Code:
return isReversed
? !wpiSolenoid.get()
: wpiSolenoid.get();
Code:
final double csd = isRedFriendly
? redScore - blueScore
: blueScore - redScore;
Code:
m_digitalOut |= ((value ? 1 : 0) << (channel - 1)); |
|
#11
|
||||
|
||||
|
Re: Ternary operators
Quote:
Code:
return isReversed ^ wpiSolenoid.get(); // if reversed, then flip solenoid value |
|
#12
|
|||
|
|||
|
Re: Ternary operators
Yeah, we do all the time. Although, prior to this year I was the only one on the team who knew about them. I distinctly remember explaining them last year, saying that they are the text equivalent of that triangle thing in LabVIEW (bleh!), though apparently no one remembered.
examples from our code: text output: Code:
C.lcd.lines[0]="compressor:"+(comp.getPressureSwitchValue()?"off":"on"); C.lcd.lines[1]="SideKicker: "+(C.sideKickLoaded<0?"released":"loaded"); Code:
roller.set(C.rollerSpeed*(C.rollerForward?1:-1)); Code:
fDrive.set(C.upFront? C.fDrive:0);//if they're up, don't bother bDrive.set(C.upBack ?-C.bDrive:0);//if they're up, don't bother |
|
#13
|
||||
|
||||
|
Re: Ternary operators
A ternary operator statement is kind of like a small switch statement. They can be useful, and if you like them go ahead and use them. But don't fall into the trap of thinking that they are necessarily more efficient. That depends on the language and compiler, and exactly how the if statement and the ternary statement are set up. Just because one piece of code is longer than another does not mean that it will be compiled into less efficient code. In a great many cases both pieces of code will compile into identical or nearly identical object code.
I would tend to argue that they almost never make code easier to understand than a well written if - else. If you know what you are doing then they may not be any more difficult to read, but I don't think the use of a ternary statement will make an unclear if - else statement suddenly clear. Using the cRIO and Java or C++, I think the most important thing to do with the code is to make it easily readable. There is no compelling reason to have a small code size, just good efficient code. Think of how much time you spend tweaking and debugging for any program. But then place this in the context of a robotics competition where finding the problem code and fixing it must often be done in a very short, fixed period of time. Code clarity is essential. So use structures that all of the programmers agree upon ahead of time. A set of coding standards is never a bad idea. (And it will help student programmers get some real world experience.) So use the format that your team understands and wants to use. |
|
#14
|
|||||
|
|||||
|
Re: Ternary operators
I agree 100%. I have heard that code is read on average ten times more often than it is written. Style is personal preference, but would you rather save some keystrokes now, or a debugging headache a month later?
|
|
#15
|
||||
|
||||
|
Re: Ternary operators
i always have three lines of comments after ternary operators explaining them and instructions to yell at me if they dont understand.
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Calling all Hams--Amateur Radio Operators | Covey41 | General Forum | 8 | 09-04-2007 19:45 |
| Do you use ternary operators in your code? | NotQuiteFree | Programming | 14 | 07-04-2004 11:21 |
| How about a Drivers/Operators page and a Human Players page | Anthony S. | CD Forum Support | 4 | 02-06-2001 22:47 |