CodeGym /Blog Java /rawak /Operator ternary
John Squirrels
Tahap
San Francisco

Operator ternary

Diterbitkan dalam kumpulan
Hai! Pelajaran hari ini tidak akan terlalu lama, tetapi ia pasti berguna :) Kita akan bercakap tentang apa yang dipanggil pengendali ternary . Operator ternary - 1Ternary bermaksud " terdiri daripada tiga bahagian ". Ia adalah alternatif kepada if-elsepernyataan aliran kawalan yang telah anda temui. Mari kita beri contoh. Katakan seseorang memutuskan untuk menonton filem bertaraf R (bawah 17 tahun memerlukan ibu bapa atau penjaga dewasa yang menemani). Pengantar menyemak umurnya di pintu: jika dia lulus semakan umur, dia dibenarkan masuk; jika tidak, dia dihantar pulang. Mari kita isytiharkan Personkelas dan semak ini menggunakan if-elsepernyataan:

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);

   }
}
Output konsol:

"Everything is in order. Come in!"
Jika kami mengalih keluar keluaran konsol, maka semakan kami kelihatan seperti ini:

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
Logiknya sangat mudah di sini: satu syarat disemak (umur >= 18) Berdasarkan keputusan, pembolehubah usherResponsediberikan satu daripada dua rentetan dengan tindak balas usher. Situasi sedemikian ("satu syarat - dua kemungkinan hasil") adalah sangat biasa dalam pengaturcaraan. Dan itulah sebabnya pengendali ternary dicipta. Kami boleh menggunakannya untuk memudahkan semakan kami kepada satu baris kod:

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);

}
Begini cara pengendali ini berfungsi. Ia dipanggil pengendali ternary, kerana ia melibatkan 3 komponen:
  • Satu syarat ( person.getAge() > 18)
  • Dua kemungkinan hasil ( "Semuanya teratur. Masuk!" dan "Filem ini tidak sesuai untuk umur anda!" )
Mula-mula, kita tulis syarat, diikuti dengan tanda soal.

person.getAge() > 18 ?
"Adakah umur orang ini lebih daripada 18?" Kemudian kita tulis nilai pertama . Nilai ini digunakan jika keadaan dinilai kepadatrue :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
Adakah umur orang ini melebihi 18 tahun? Jika ya, tetapkan usherResponse pembolehubah kepada "Semuanya teratur. Masuk!" Seterusnya :simbol " " dan nilai kedua . Nilai ini digunakan jika keadaan dinilai kepadafalse :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
Adakah umur orang ini melebihi 18 tahun? Jika ya, tetapkan usherResponse pembolehubah kepada "Semuanya teratur. Masuk!" . Jika tidak, tetapkan usherResponse pembolehubah kepada "Filem ini tidak sesuai untuk umur anda!" Secara umum, inilah rupa logik pengendali ternary. syarat ? hasil 1 : hasil 2 Operator ternary - 2 Ngomong-ngomong, tanda kurung di sekeliling keadaan tidak diperlukan: kami menambahkannya untuk kebolehbacaan yang lebih baik. Ia juga berfungsi tanpa mereka:

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);

}
Jadi apa yang patut anda gunakan? Satu if-elsekenyataan atau pengendali ternary? Dari segi prestasi, tiada bezanya. Lebih tepat, mungkin ada, tetapi ia tidak penting. Pertimbangan terbesar di sini ialah kebolehbacaan kod anda. Kod yang anda tulis bukan sahaja mesti berfungsi dengan betul, tetapi juga mudah dibaca . Lagipun, ia mungkin "diwarisi" oleh pengaturcara lain, rakan sekerja anda! Jika sukar untuk difahami, ia akan merumitkan kerja mereka dan kerja anda (mereka akan datang kepada anda untuk mendapatkan penjelasan setiap 5 minit). Cadangan umum adalah ini: jika syaratnya mudah dan mudah disahkan, anda boleh menggunakan operator ternary tanpa bahaya. Ini membolehkan anda mengurangkan jumlah kod dan bilanganif-elsepenyata (dan mungkin sudah ada banyak daripadanya). Tetapi jika keadaannya rumit dan melibatkan beberapa langkah, lebih baik menggunakan if-elsepernyataan. Sebagai contoh, menggunakan operator ternary adalah idea yang tidak baik dalam kes ini:

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
Ia tidak serta-merta jelas apa yang berlaku di sini! Kod telah menjadi sangat sukar untuk dibaca. Dan semua kerana keadaan yang kompleks:
  • Jika seseorang berumur lebih daripada 18 tahun, mempunyai tiket (atau pas percuma), dan tidak mempunyai anak kecil, dia boleh masuk.
  • Jika satu bahagian syarat itu palsu, maka dia tidak boleh.
Di sini jelas lebih baik untuk digunakan if-else. Ya, kod kami akan menjadi lebih besar, tetapi ia akan menjadi lebih mudah dibaca. Dan rakan sekerja anda tidak akan menghadapi tapak tangan jika mereka mewarisi kod ini :) Akhirnya, saya boleh mengesyorkan yang baik untuk anda. Kami menyentuh tentang kebolehbacaan kod semasa pelajaran. Buku Robert Martin "Kod Bersih", yang telah menjadi klasik, didedikasikan untuk topik ini. Operator ternary - 4Ia menghimpunkan amalan terbaik dan cadangan untuk pengaturcara, yang akan membantu anda menulis kod yang bukan sahaja berfungsi, tetapi juga mudah dibaca.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION