CodeGym /Java Blogu /Rastgele /Üçlü operatör
John Squirrels
Seviye
San Francisco

Üçlü operatör

grupta yayınlandı
MERHABA! Bugünkü dersimiz çok uzun olmayacak ama kesinlikle işinize yarayacak :) Üçlü operatör denen şeyden bahsedeceğiz . Üçlü operatör - 1Üçlü, " üç bölümden oluşan " anlamına gelir. if-elseHalihazı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 Personve bunu bir if-elseifade 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 usherResponseyer 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!" )
Önce koşulu yazıyoruz, ardından bir soru işareti koyuyoruz.

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 Üçlü operatör - 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-elseifade 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-elseifadeler (ve zaten birçoğu olabilir). Ancak koşul karmaşıksa ve birden çok adım içeriyorsa, bir if-elseifade 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.
Burada açıkça kullanmak daha iyidir 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. Üçlü operatör - 4Yalnı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.
Yorumlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION