Java - Ternary Operator Nedir?

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

LifeMCServer

Yaratık Tuzağı: Çalışıyor
Katılım
18 Kasım 2016
Mesajlar
695
Elmaslar
470
Puan
15.415
Yaş
26
Konum
İstanbul
Minecraft
LifeMCServer
Facebook
mustafathegamer
X
LifeMCServer

Discord:

!?мυѕтαғα öɴcel#8713

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ı
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.

other threads.jpg


İ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:
Güzel Tanıtım Olmuş. Görseller Yeterince Uygun. Anlatım Biçimi İse Mükemmel, Başarılarınızın Devamını Dileriz.
 
kullanmaktan sıklıkla kaçındığım eğer kullanıcaksam da kodumu refactor ettiğim bir özelliktir :)
 

Uzun zamandır başlığını çok görüp ama ne olduğu hakkında bilgim olmayan bir konuydu. Neyse ki böyle bir konu açmışsınız ki bilgilendim <3
 
Günaydın, bu operatör'ün gerçek adı Conditional Operator ve 1997 yılından beri hem ilk tarayıcılarda javascript 1.0'da hemde java versiyon 1 de kullanılıyordu.
Değerli ziyaretçimiz, içeriği görebilmek için şimdi giriş yapın veya kayıt olun.
Adsız.png
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Hala Discord sunucumuza katılmadın mı?

Büyük bir topluluğun parçası ol, etkinliklere katıl ve özel hediyeler kazanma şansı yakala!

Şimdi Katıl
Üst