# Alternative if Schreibweise mit ?



## Hellas (9. Jun 2008)

Hallo,

hat mir jemand einen link zum üben bzw. kann mir jemand sagen wie man die alternative if Schreibweise nennt wenn man mit dem ?-zeichen abfragt?


----------



## ARadauer (9. Jun 2008)

das ist der tertiäre operator

und das ist praktisch eine funktion die den entsprechenden if oder else wert zurück gibt

String test = (x==3)?"if wert":"else wert";


----------



## Der Müde Joe (9. Jun 2008)

das heist ternärer Operator und geht so:

Bedingung ? Truecase : Falsecase;

und würd ich nicht benutzen...(rein aus lesbarkeit und sideeffects)

EDIT:
und noch ein link
siehe SlaterB....


----------



## SlaterB (9. Jun 2008)

und der Link weils so schön ist
http://www.galileocomputing.de/open...02_008.htm#mje51e58f0ade3ac620d9dd0c75496a539


----------



## ARadauer (9. Jun 2008)

ah ternärer... ok

und zum thema nicht verwenden.

also, wir haben sowas


```
String ausgabe = (x.getName==null)?"":x.getName();
```
häufig in userem code, ich halte das nicht für unleserlich...


----------



## SlaterB (9. Jun 2008)

für 'häufig' ists aber zuviel,
da geht auch
String ausgabe = Helper.formatName(x,"");


----------



## Der Müde Joe (9. Jun 2008)

naja ich benutze es auch (sehr selten)....vor allem in genau solchen Util Dingen.
aber ist eben gefährlich..zB

```
public class X {

	public static void main(String[] args) {
		boolean b = true;
		Number number = b ? new Integer(3) : new Float(3);

		System.out.println(number);

		if (b) {
			number = new Integer(3);
		} else {
			number = new Float(3);
		}
		System.out.println(number);
	}
}
```


----------



## Marco13 (9. Jun 2008)

:shock: Ich hätte nicht gedacht, dass so ein Furzprogramm mich so puzzlen könnte  :shock: 
Was zum ... passiert da? Geht da irgendwas beim Autoboxing schief?  ???:L 

Zum eigentlichen Thema: Ich finde, man kann den ?:-Operator verwenden, wenn es "elegant" ist, und/oder damit deutlicher wird, was gemacht wird.

```
String s = null;
if (someBoolean) 
{
    s = "Jupp";
}
else 
{
    s = "Nö";
}
```
vs.

```
String s = someBoolean ?  "Jupp" : "Nö";
```


----------



## AlArenal (9. Jun 2008)

Full ACK to Marco.

Wenn es superkurz und völlig eindeutig ist, kann man den ternären Opa benutzen. Für alle anderen Fälle trägt er nicht eben zur Übersichtlichkeit bei und ist demnach zu meiden.


----------



## Der Müde Joe (9. Jun 2008)

Marco13 hat gesagt.:
			
		

> :shock: Ich hätte nicht gedacht, dass so ein Furzprogramm mich so puzzlen könnte  :shock:
> Was zum ... passiert da? Geht da irgendwas beim Autoboxing schief?  ???:L



ist per Definition so


> Otherwise, binary numeric promotion (§5.6.2) is applied to the operand types, and the type of the conditional expression is the promoted type of the second and third operands. Note that binary numeric promotion performs unboxing conversion (§5.1.8) and value set conversion (§5.1.13).



von
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.25

EDIT:
ist übrigens von Java Puzzlers ;-)
(mit CharSequence: String und StringBuffer würds ohne Probleme hinhauen)


----------



## Hellas (9. Jun 2008)

um Codelesbarkeit zu erschweren wegen Reversing gut geeignet ;-)


----------

