Sol Reklam

Java - Ternary Operator Nedir?

Durum
Mesaj gönderimine kapalı.

LifeMCServer

Yaratık Tuzağı: Çalışıyor

Discord:

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

Katılım
18 Kasım 2016
Mesajlar
698
Elmaslar
470
Puanlar
15.415
Yaş
24
Yer
İstanbul
Minecraft
LifeMCServer
Facebook
mustafathegamer
Twitter
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ı
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:

Dolu Akbil

Birisi mi Spawnlandı?

Discord:

Dolu Akbil#1453

Katılım
12 Aralık 2019
Mesajlar
8
Elmaslar
4
Puanlar
0
Minecraft
DoluAkbil
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.
 

portlek

Zombi Geldi, Beni Yedi

Discord:

portlek#5502

Katılım
1 Ağustos 2019
Mesajlar
263
Elmaslar
197
Puanlar
1.460
Yaş
26
Yer
iskanbuldotnet
Minecraft
poturtek
kullanmaktan sıklıkla kaçındığım eğer kullanıcaksam da kodumu refactor ettiğim bir özelliktir :)
 
S

Silinen üye 79251

Ziyaretçi

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
 

webkit

Koydum Çalışma Masasını
Katılım
27 Kasım 2018
Mesajlar
65
Elmaslar
44
Puanlar
2.060
Durum
Mesaj gönderimine kapalı.
Neden altınlarını Discord sunucumuzda kazmıyorsun? TIKLA VE KATIL!
Yukarı