JavaRush /Blog Java /Random-MS /Operator ternary di Jawa

Operator ternary di Jawa

Diterbitkan dalam kumpulan
hello! Kuliah hari ini tidak akan terlalu lama, tetapi pasti berguna :) Kami akan bercakap tentang pengendali ternary yang dipanggil . Operator ternary - 1"Ternary" bermaksud "tiga kali ganda". Ini adalah alternatif kepada operator bersyarat if-else, yang anda sudah biasa. Mari kita beri contoh. Katakan seseorang memutuskan untuk pergi ke pawagam untuk menonton filem dengan rating 18+. Pengawal memeriksa umurnya di pintu masuk: jika dia memenuhi had umur, dia membenarkan dia memasuki dewan; jika tidak, dia menghantarnya pulang. Mari buat kelas Mandan semak dengan if-else:
public class Man {

   private int age;

   public Man(int age) {
       this.age = age;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public static void main(String[] args) {

       Man man = new Man(22);

       String securityAnswer;

       if (man.getAge() >= 18) {
           securityAnswer = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }

       System.out.println(securityAnswer);

   }
}
Output konsol:

"Все в порядке, проходите!"
Jika kami mengalih keluar output ke konsol, ujian kami kelihatan seperti ini:
if (man.getAge() >= 18) {
           securityAnswer = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }
Di sini, sebenarnya, logik mudah berfungsi: satu syarat diperiksa (umur >= 18). Bergantung pada ini, securityAnswersatu daripada dua baris dengan tindak balas pengawal ditugaskan kepada pembolehubah. Situasi sedemikian, "satu syarat - dua kemungkinan keputusan," berlaku sangat kerap dalam pengaturcaraan. Oleh itu, pengendali ternary yang sama telah dicipta untuk mereka. Dengan itu, kami boleh memudahkan pengesahan kami kepada satu baris kod:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = (man.getAge() >= 18) ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
Beginilah rupa kerja operator ini. Ia dipanggil ternary (triple) kerana 3 komponen mengambil bahagian dalam kerjanya:
  • Satu syarat ( man.getAge() >= 18)
  • Dua kemungkinan hasil ( "Tidak mengapa, teruskan!" dan "Filem ini tidak sesuai untuk umur anda!" )
Pertama, syarat ditulis dalam kod, diikuti dengan tanda soal.
man.getAge() >= 18 ?
"Adakah umur seseorang itu lebih daripada atau sama dengan 18?" Berikut adalah hasil pertama. Ia menyala jika keadaan kembali true, iaitu benar:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!"
Adakah umur seseorang itu lebih daripada atau sama dengan 18? Jika ya, berikan pembolehubah securityAnswer nilai "Semuanya baik, masuk!" . Ini diikuti oleh :pengendali “ ”, selepas itu keputusan kedua ditulis. Ia menyala jika keadaan kembali false, iaitu, ia adalah palsu:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";
Adakah umur seseorang itu lebih daripada atau sama dengan 18? Jika ya, berikan pembolehubah securityAnswer nilai "Semuanya baik, masuk!" . Jika tidak, tetapkan pembolehubah securityAnswer nilai "Filem ini tidak sesuai untuk umur anda!" Beginilah rupa logik umum pengendali ternary. syarat ? keputusan 1: hasil 2 Operator ternary - 2Sebenarnya, tidak perlu meletakkan tanda kurung di sekeliling keadaan: kami melakukan ini untuk kebolehbacaan yang lebih baik. Ia akan berfungsi tanpa mereka:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
Apakah yang perlu anda gunakan: if-else, atau pengendali ternary? Dari segi prestasi tidak banyak perbezaan. Lebih tepat lagi, ia mungkin wujud, tetapi ia tidak penting. Di sini persoalannya lebih berkaitan dengan kebolehbacaan kod anda. Ia amat penting dalam pengaturcaraan: kod yang anda tulis mestilah bukan sahaja berfungsi dengan betul, tetapi juga mudah dibaca. Lagipun, ia boleh "diwarisi" kepada pengaturcara lain, rakan sekerja anda! Dan jika sukar untuk difahami, ia akan merumitkan kerja mereka dan kerja anda - mereka akan menghubungi anda untuk mendapatkan penjelasan setiap 5 minit. Pengesyoran umum mungkin berbunyi seperti ini: jika keadaannya mudah dan mudah untuk diperiksa, anda boleh menggunakan operator ternary tanpa bahaya. Dengan cara ini anda akan mengurangkan jumlah kod dan bilangan semakan if-else, yang mungkin sudah banyak. Tetapi jika keadaannya kompleks dan berbilang peringkat, lebih baik digunakan if-else. Sebagai contoh, dalam kes ini adalah idea yang tidak baik untuk menggunakan pengendali ternary:
String securityAnswer = (man.getAge() >= 18 && (man.hasTicket() || man.hasCoupon()) && !man.hasChild())  ? "Come in!" : "You can not pass!";
Jadi anda tidak akan faham dengan serta-merta apa yang berlaku di sini! Kod telah menjadi sangat sukar untuk dibaca. Dan semua kerana keadaan yang sukar:
  • Jika seseorang berumur lebih atau sama dengan 18 tahun + mempunyai tiket (atau mempunyai kupon untuk kemasukan percuma) + tidak mempunyai anak kecil bersama mereka - maka mereka boleh lulus.
  • Jika sekurang-kurangnya satu bahagian syarat mengembalikan palsu, maka ia tidak boleh.
Di sinilah ia jelas lebih baik untuk digunakan if-else. Ya, saiz kod kami akan lebih besar, tetapi ia akan berkali-kali lebih mudah dibaca. Dan tiada seorang pun daripada rakan sekerja anda akan memegang kepala mereka jika mereka mewarisi kod sedemikian :) Akhirnya, saya boleh mengesyorkan buku itu kepada anda. Dalam kuliah tersebut kami menyentuh topik kebolehbacaan kod. Buku klasik "Kod Bersih" oleh Robert Martin didedikasikan untuknya. Operator ternary - 3Ia mengandungi amalan terbaik dan cadangan untuk pengaturcara yang akan membolehkan anda menulis bukan sahaja berfungsi, tetapi juga kod yang mudah dibaca. Terdapat ulasan buku ini di JavaRush.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION