MERHABA! Bugünkü dersimiz çok uzun olmayacak ama kesinlikle işinize yarayacak :) Üçlü operatör denen şeyden bahsedeceğiz . Üçlü, " üç bölümden oluşan " anlamına gelir.
if-else
Halihazırda tanıştığınız kontrol akışı ifadesine bir alternatiftir . Bir örnek verelim. Birinin R dereceli bir filme gitmeye karar verdiğini varsayalım (17 yaş altı, refakatçi bir ebeveyn veya yetişkin vasi gerektirir). Mübaşir kapıda yaşını kontrol eder: yaş kontrolünü geçerse girmesine izin verilir; değilse eve gönderilir. Bir sınıf ilan edelim Person
ve bunu bir if-else
ifade kullanarak kontrol edelim:
public class Person {
private int age;
public Person(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse;
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
System.out.println(usherResponse);
}
}
Konsol çıktısı:
"Everything is in order. Come in!"
Konsol çıktısını kaldırırsak kontrolümüz şöyle görünür:
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
Buradaki mantık çok basit: bir koşul kontrol edilir (yaş >= 18) Sonuca göre değişkene usherResponse
yer göstericinin yanıtıyla birlikte iki diziden biri atanır. Bu tür durumlar ("bir koşul - iki olası sonuç") programlamada oldukça yaygındır. İşte bu yüzden üçlü operatör yaratıldı. Kontrolümüzü tek bir kod satırına basitleştirmek için kullanabiliriz:
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
İşte bu operatörün nasıl çalıştığı. Üçlü operatör olarak adlandırılır, çünkü 3 bileşen içerir:
- Bir koşul (
person.getAge() > 18
) - İki olası sonuç ( "Her şey yolunda. Girin!" ve "Bu film sizin yaşınıza uygun değil!" )
person.getAge() > 18 ?
"Bu kişinin yaşı 18'den büyük mü?" Ardından ilk değeri yazıyoruz . Bu değer , koşul şu şekilde değerlendirilirsetrue
kullanılır :
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
Bu kişinin yaşı 18'den büyük mü? Cevabınız evet ise, değişkeni "Her şey yolunda. Girin!"usherResponse
olarak ayarlayın. Daha sonra " :
" sembolü ve ikinci değer gelir . Bu değer , koşul şu şekilde değerlendirilirsefalse
kullanılır :
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
Bu kişinin yaşı 18'den büyük mü? Cevabınız evet ise, değişkeni "Her şey yolunda. Girin!"usherResponse
olarak ayarlayın. . Değilse, değişkeni "Bu film yaşınıza uygun değil!"usherResponse
olarak ayarlayın. Genel olarak, üçlü operatörün mantığı şöyle görünür. durum ? sonuç 1 : sonuç 2 Bu arada, koşulun etrafındaki parantezler gerekli değildir: onları daha iyi okunabilirlik için ekledik. Onlar olmadan da çalışır:
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
Peki ne kullanmalısın? Bir if-else
ifade mi yoksa üçlü operatör mü? Performans açısından hiçbir fark yok. Daha doğrusu belki vardır ama önemsizdir. Buradaki en büyük husus, kodunuzun okunabilirliğidir. Yazdığınız kod sadece doğru çalışmamalı, aynı zamanda okunması kolay olmalıdır . Ne de olsa, diğer programcılara, iş arkadaşlarınıza "miras" kalmış olabilir! Anlaması zorsa, bu onların ve sizin işinizi zorlaştıracaktır (her 5 dakikada bir açıklamalar için size koşarak gelecekler). Genel öneri şudur: koşul basit ve kolayca doğrulanabilirse, üçlü operatörü zarar görmeden kullanabilirsiniz. Bu, kod miktarını ve sayısını azaltmanıza olanak tanır.if-else
ifadeler (ve zaten birçoğu olabilir). Ancak koşul karmaşıksa ve birden çok adım içeriyorsa, bir if-else
ifade kullanmak daha iyidir. Örneğin, üçlü operatör kullanmak bu durumda kötü bir fikir olacaktır:
String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
Burada ne olduğu hemen belli değil! Kodun okunması çok zorlaştı . Ve hepsi karmaşık durum yüzünden:
- 18 yaşından büyük, bileti (veya ücretsiz geçiş hakkı) olan ve küçük çocuğu olmayan biri içeri girebilir.
- Koşulun bir kısmı bile yanlışsa, o zaman yapamaz.
if-else
. Evet, kodumuz daha büyük olacak ama çok daha okunaklı olacak. Ve meslektaşlarınız bu kodu devralırlarsa avuç içi ile yüzleşmeyecekler :) Son olarak, sizin için iyi bir tavsiyede bulunabilirim. Ders sırasında kodun okunabilirliğine değindik. Robert Martin'in bir klasik haline gelen "Clean Code" adlı kitabı bu konuya adanmıştır. Yalnızca işlevsel değil aynı zamanda kolayca okunabilir kodlar yazmanıza yardımcı olacak programcılar için en iyi uygulamaları ve önerileri bir araya getirir.
GO TO FULL VERSION