# Erleichterung der if-Anweisung



## Schwede (5. Mai 2009)

so wie die Überschrift schon sagt, wollte ich euch fragen ob man diese Anweisung

```
if (a%2==0)
{
     return false;
} else
{
return true;
}
```
viel einfacher schreiben kann oder ob es eine andere Anweisung gibt die das gleiche leistet?

ich weis das das für fast alle hier total einfach ist aber da ich mich erst heute mit java auseinandersetze, komm ich einfach nicht darauf.


----------



## faetzminator (5. Mai 2009)

```
return a%2 != 0;
```


----------



## r0bbe (5. Mai 2009)

ansonsten kannst du im Allgemeinen if abfragen auch folgendermaßen abkürzen


```
public static void main(String[] args) {
		int i = 3;
		int j = 4;
		
		// lang
		if (i > j) {
			System.out.println("größer");
		}
		else {
			System.out.println("kleiner");
		}

		// kurz
		System.out.println(i > j ? "größer" : "kleiner");		
	}
```

Kann man sich sogar ganz gut merken if (?) then.. : else 
Die lange Version wird aber empfohlen, weil es übersichtlicher ist!


----------



## The_S (6. Mai 2009)

r0bbe hat gesagt.:


> Kann man sich sogar ganz gut merken if (?) then.. : else
> Die lange Version wird aber empfohlen, weil es übersichtlicher ist!



Nachteil der "kürzeren" (auch tertiärer/ternärer Operator), dass er nicht für alles funktioniert, sondern nur für Zuweisungen. Ansonsten würde ich keinesfalls behaupten, dass ein vollständig ausgeschriebener if-else-Block empfohlen ist - hängt immer ganz von der jeweiligen Situation ab.


----------



## cover1012 (6. Mai 2009)

es geht auch:


```
return((a%2==0)? true:false)
```


----------



## maki (6. Mai 2009)

Mein Vorschlag:

```
private boolean isEven(int value) {
    return (value % 2) == 0;
}
```


----------



## diggaa1984 (6. Mai 2009)

wär ja (nur) brauchbar, wenn ers an mehreren Stellen benötigt


----------



## maki (6. Mai 2009)

diggaa1984 hat gesagt.:


> wär ja (nur) brauchbar, wenn ers an mehreren Stellen benötigt


Nicht wirklich, kann man auch machen wenn es nur ein einziges mal verwendet wird.

Worum es dabei geht ist nicht Redundanz zu vermeiden (ist aber auch eine gute Sache), sondern den Code Aussagekräftig zu machen.


----------



## cover1012 (6. Mai 2009)

> es geht auch:
> 
> 
> ```
> ...



der Vorteil dieser Schreibweise ist, dass du nicht nur das Ergebnis des Vergleichs zurückgeben kannst sondern auch sowas machen kannst:


```
int a = 0;
return( (a%2==0)?  (a = 1):(a = 2) );
```

wenn der Vergleich true wird 1 zurückgegeben, sonst 2


----------



## SlaterB (6. Mai 2009)

?
return (a%2==0)?  1 : 2;


----------



## cover1012 (6. Mai 2009)

SlaterB hat gesagt.:


> ?
> return (a%2==0)?  1 : 2;



Ja,klar. Ich wollte ja nur die Funktionsweise verdeutlichen.


----------



## r0bbe (6. Mai 2009)

The_S hat gesagt.:


> Ansonsten würde ich keinesfalls behaupten, dass ein vollständig ausgeschriebener if-else-Block empfohlen ist - hängt immer ganz von der jeweiligen Situation ab.




in welchen Situationen würdest du denn z.B. den ternären Operator (Danke ) verwenden?
ich vermute z.B. in meinem beispiel? ehrlich gesagt find das auch übersichtlicher, weil kompakter.
man muss es halt wissen, sonst wirkt es kryptisch.

wollte aber lieber weitergeben was man mir beigebracht hat.


----------



## The_S (7. Mai 2009)

r0bbe hat gesagt.:


> in welchen Situationen würdest du denn z.B. den ternären Operator (Danke ) verwenden?
> ich vermute z.B. in meinem beispiel?



z. B. Oder wenn ich z. B. irgendwo Werte zuweise


```
BigDecimal bigD = aCoolMethod();
myObject.setBigD(bigD == null ? BigDecimal.ZERO : bigD);
```

Ist aber natürlich geschmackssache.


----------

