- Katılım
- 18 Kasım 2016
- Mesajlar
- 698
- Elmaslar
- 470
- Puanlar
- 15.415
- Yaş
- 24
- Yer
- İstanbul
- Minecraft
- LifeMCServer
- mustafathegamer
- LifeMCServer
Java - Ternary Operator Nedir?
Ternary operator, bir koşul ifadesidir ve bir sonuç döndürür.
Kısaca kendisi if else'nin kısayolu gibidir.
Ternary Operator Formatı
İlk kısım, bir boolean veya boolean döndüren bir methodun sonucu olmak zorunda. Boolean true ise soru işaretinden sonraki ilk kısım döndürülecek, false ise de ikinci kısım döndürülecektir.
Ternary Operator Örneği
Ternary operatorsüz kod:
Ternary operatürlü kod:
Bu kod
İkinci kodun daha kısa olduğunu ve değişkeni
Ternary özelliğine girdiğiniz iki ihtimalden koşul baz alınarak sadece birisi seçilir, yürütülür ve sonucu döndürülür. Tıpkı ifteki gibi. Diğer kısım yürütülmeyeceğinden sonuç hesaplanmaz, bunun için bir JUnit testi:
Bu kodda, 12 sayısı 10 sayısından büyük olduğu için ilk koşul gerçekleşecektir. İlk koşul
Ternary Return
Ternary operatorünü
Fakat bu methodu tek satırda tutmak ve eğer CommandSender konsol ise, veya oyuncu olup operator (OP) ise, veyahut
İşte bunun için örnek bir kod:
Evet, bu bir ternary return örneği. Fakat bir şey farkettiniz mi? Sonuç boolean olduğu için, yukarıda ternary operator yerine direk koşulu döndürebiliriz. Yani
Böylece tek örnekte hem ternary return'ı hemde redundant ternary operator'ü göstermiş oldum.
Ternary Constructor Super Inovacation
Bir obje oluştrucusunda, extendlenen classdaki oluşturucuyu çağıracaksanız, fakat oluşturucuya girilen parametrelere göre extendlenen classdaki oluşturucuya verdiğiniz parametreleri değiştirmek istiyorsunuz diyelim.
Şuanda aklıma başka örnek gelmediği için biraz gereksiz bir örnek verdim, fakat mesela burada ternary operator kullanmayıp if else kullansaydık, super'den öncesine koymamız gerekeceğinden ve Java'da bir oluşturucuda ilk iş extendlediğimiz classın oluşturucusunu çağırma zorunluluğu olduğundan, hata verecekti, fakat ternary operator kullandığımız için vermiyor.
Nested Ternary Operator
İki ternary operatürünü birleştirmekte mümkün, fakat okunabilirliği azalttığı için pek önermem.
Okunabilirliği arttırmak için parantez içine alabilirsiniz.
Fakat yine de fazla okunabilir olmadığından iç içe ternary operator kullanımı önerilmemekte.
İlginizi Çekebilecek Diğer Konularım
Windows 10 2004 "Vibranium" 20H1 | Gelecek Özellikler
VPS, VDS, Dedicated, vCPU, vRAM ve Trafik Nedir?
Minecraft Sunucu Başlatma Dosyası | Türkçe Karakter Destekli, Optimizeli! 2.0.4-BETA
Windows üzerinde Linux kullanmak (Windows 10)
İşlemci Seçerken Nelere Dikkat Edilmeli?
Minecraft 1.14 Sunucular İçin Eklenti Önerileri [Survival]
Tüm Konularım
Ternary operator, bir koşul ifadesidir ve bir sonuç döndürür.
Kısaca kendisi if else'nin kısayolu gibidir.
Ternary Operator Formatı
booleanExpression ? expression1 : expression2
İlk kısım, bir boolean veya boolean döndüren bir methodun sonucu olmak zorunda. Boolean true ise soru işaretinden sonraki ilk kısım döndürülecek, false ise de ikinci kısım döndürülecektir.
Ternary Operator Örneği
Ternary operatorsüz kod:
Java:
final int num = 8;
String msg = null;
if (num > 10)
msg = "Sayı 10'dan yüksek";
else
msg = "Sayı 10 veya daha düşük bir sayı";
Ternary operatürlü kod:
Java:
final int num = 8;
final String msg = num > 10 ? "Sayı 10'dan yüksek" : "Sayı 10 veya daha düşük bir sayı";
Bu kod
num
değişkeninde barınan sayı eğer 10'dan yüksek ise msg
değişkenini Sayı 10'dan yüksek
yazısına eşitliyor, eğer 10 veya daha düşük bir sayı ise de Sayı 10 veya daha düşük bir sayı
yapıyor.İkinci kodun daha kısa olduğunu ve değişkeni
null
yapmadan direkt aynı satırda belirleyip final
kullanabildiğimizi farketmişsinizdir. İşte bu tür yerlerde ternary operator dediğimiz özelliği kullanmamız bizim avantajımıza oluyor.Ternary özelliğine girdiğiniz iki ihtimalden koşul baz alınarak sadece birisi seçilir, yürütülür ve sonucu döndürülür. Tıpkı ifteki gibi. Diğer kısım yürütülmeyeceğinden sonuç hesaplanmaz, bunun için bir JUnit testi:
Java:
@Test
public void whenConditionIsTrue_thenOnlyExpression1IsEvaluated() {
final int exp1 = 0, exp2 = 0;
final int result = 12 > 10 ? ++exp1 : ++exp2;
assertThat(exp1).isEqualTo(1);
assertThat(result).isEqualTo(1);
assertThat(exp2).isEqualTo(0);
}
Bu kodda, 12 sayısı 10 sayısından büyük olduğu için ilk koşul gerçekleşecektir. İlk koşul
exp1
değişkenini bir arttıracak ve bu işlemin sonucunu result
değişkenine atayacaktır. Bu durumda exp1
ve result
1 olurken, exp2
değişkeni değişmeyecek yani 0 kalacaktır.Ternary Return
Ternary operatorünü
return
ile birlikte de kullanabilirsiniz. Mesela, örnek olarak diyelim ki Bukkit üzerinde bir CommandSender'ın istenen yetkiye sahip olup olmadığını kontrol etmek için method yaptınız diyelim.Fakat bu methodu tek satırda tutmak ve eğer CommandSender konsol ise, veya oyuncu olup operator (OP) ise, veyahut
*
yetkisine sahip ise, istenen spesifik yetkiye sahip olmasa bile true
döndürmek istiyorsunuz.İşte bunun için örnek bir kod:
Java:
public static final boolean hasPermission(final CommandSender sender,
final String permission) {
return sender instanceof ConsoleCommandSender ||
sender.isOp() ||
sender.hasPermission("*") ||
sender.hasPermission(permission) ? true : false;
}
Evet, bu bir ternary return örneği. Fakat bir şey farkettiniz mi? Sonuç boolean olduğu için, yukarıda ternary operator yerine direk koşulu döndürebiliriz. Yani
? true : false
kısmı bu durumda gereksiz oluyor.Böylece tek örnekte hem ternary return'ı hemde redundant ternary operator'ü göstermiş oldum.
Ternary Constructor Super Inovacation
Bir obje oluştrucusunda, extendlenen classdaki oluşturucuyu çağıracaksanız, fakat oluşturucuya girilen parametrelere göre extendlenen classdaki oluşturucuya verdiğiniz parametreleri değiştirmek istiyorsunuz diyelim.
Java:
public class User {
private final int id;
private final String username;
public User(final int id,
final String username) {
this.id = id;
this.username = username;
}
public int getId() { return id; }
public String getUserName() { return username; }
}
public class Member extends User {
public Member(final User user,
final String nickname) {
super(nickname == null ? user.getUserName() : nickname);
}
}
Şuanda aklıma başka örnek gelmediği için biraz gereksiz bir örnek verdim, fakat mesela burada ternary operator kullanmayıp if else kullansaydık, super'den öncesine koymamız gerekeceğinden ve Java'da bir oluşturucuda ilk iş extendlediğimiz classın oluşturucusunu çağırma zorunluluğu olduğundan, hata verecekti, fakat ternary operator kullandığımız için vermiyor.
Nested Ternary Operator
İki ternary operatürünü birleştirmekte mümkün, fakat okunabilirliği azalttığı için pek önermem.
Java:
final int num = 8;
final String msg = num > 10 ? "Sayı 10'dan yüksek" : num == 10 ? "Sayı 10'a eşit" : "Sayı 10'dan düşük";
Okunabilirliği arttırmak için parantez içine alabilirsiniz.
Java:
final int num = 8;
final String = num > 10 ? "Sayı 10'dan yüksek" : (num == 10 ? "Sayı 10'a eşit" : "Sayı 10'dan düşük");
Fakat yine de fazla okunabilir olmadığından iç içe ternary operator kullanımı önerilmemekte.
İlginizi Çekebilecek Diğer Konularım
Windows 10 2004 "Vibranium" 20H1 | Gelecek Özellikler
VPS, VDS, Dedicated, vCPU, vRAM ve Trafik Nedir?
Minecraft Sunucu Başlatma Dosyası | Türkçe Karakter Destekli, Optimizeli! 2.0.4-BETA
Windows üzerinde Linux kullanmak (Windows 10)
İşlemci Seçerken Nelere Dikkat Edilmeli?
Minecraft 1.14 Sunucular İçin Eklenti Önerileri [Survival]
Tüm Konularım
Son düzenleme: