Java Puzzle 08 – Ternary

Merhaba Arkadaslar,
Bu bolumde Ternary Operator/Conditional Operator ‘un trik bir noktasini inceleyecegiz. Ternary ; uclu anlamina gelmektedir.

Oncelikle ternary operator’un calisma mantigini hatirlayacak olursak ;

variable x = (expression) ? value if true : value if false

TernaryExample.java

package _08.ternary;

public class TernaryExample {

	public static void main(String[] args) {
		int point = 75;
		String result = point < 50 ? "Fail" : "Success";
		System.out.println(result);

		String result2 = point < 50 ? "F" : point > 90 ? "A" : "B";
		System.out.println(result2);
	}
}

Ornegimizi calistirdigimizda

Success
B

TernaryDarkCorner.java

package _08.ternary;

public class TernaryDarkCorner {
	@SuppressWarnings("unused")
	public static void main(String[] args) {
		char x = 'X';
		int i = 0;

		System.out.print(true ? x : 0);
		System.out.print(false ? i : x);
	}
}

Birinci System.out.print ifadesinde expression true oldugu icin x degiskenin degeri ,
ikinci System.out.print ifadesinde expression false oldugu icin  i degiskeninin degeri degil x degiskenin degeri yazilacak. Buraya kadar bir problem yok.

Ornegimizi calistirdigimizda XX yerine X88 yazdigini goruruz.
Birinci System.out.print X yazarken ikinci System.out.print 88 degerini yaziyor.
88 , x ‘in unicode degeridir (58) 16 = (88)10

Peki bu farklilik neden kaynaklanmaktadir?

Conditional Expression tipi, hangi overloaded metodun cagrilacaginda rol oynar!

Birinci System.out.print ifadesinde  ? x kullanildigi icin ve x degiskeni char tipinde oldugu icin;

PrintStream.print(char)

Ikinci System.out.print ifadesinde ise ? i kullanildigi icin ve i degiskeni int tipinde oldugu icin

PrintStream.print(int)

metodu cagrilacaktir.

Bu tarz durumlardan kacinmak icin, ikinci ve ucuncu operandlarin tiplerinin ayni olmasina ozen gosterelim.Kafa karisikligina neden olacak sekilde mixed-type hesaplamalardan uzak durmaya calisalim.

Yazimi burada sonlandiriyorum.
Herkese bol Javali gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *