Saya telah bekerja dengan Java beberapa tahun, tetapi sampai saat ini saya belum menemukan konstruk ini:
int count = isHere ? getHereCount(index) : getAwayCount(index);
Ini mungkin pertanyaan yang sangat sederhana, tetapi bisakah seseorang menjelaskannya? Bagaimana saya membacanya? Saya cukup yakin saya tahu cara kerjanya.
- jika
isHere
benar,getHereCount()
disebut, - jika
isHere
falsegetAwayCount()
disebut.
Benar? Apa sebutan konstruk ini?
java
syntax
ternary-operator
conditional-operator
mainstringargs
sumber
sumber
Jawaban:
Ya, itu adalah bentuk steno dari
Ini disebut operator kondisional . Banyak orang (secara keliru) menyebutnya operator ternary , karena itu satu-satunya operator ternary (tiga argumen) di Jawa, C, C ++, dan mungkin banyak bahasa lainnya. Namun secara teoritis mungkin ada operator ternary lain, sedangkan hanya ada satu operator kondisional .
Nama resmi diberikan dalam Spesifikasi Bahasa Jawa :
Perhatikan bahwa kedua cabang harus mengarah ke metode dengan nilai pengembalian:
Jadi, jika
doSomething()
dandoSomethingElse()
merupakan metode batal, Anda tidak dapat mengompres ini:dalam hal ini:
Kata-kata sederhana:
sumber
the
dalam cetak miringthe ternary operator
, dan itu yang dia maksud adalah salah, bukan ituternary operator
salah. The ternary operator menyiratkan bahwa, sebagai Michael mengatakan, itu adalah satu-satunya, yang pada gilirannya dapat menyebabkan satu untuk menganggap tidak ada operator ternary lainnya, yang adalah apa yang Michael katakan adalah salah, dan saya setuju, itu akan menjadi asumsi yang salah.Yang lain telah menjawab ini sampai tingkat yang wajar, tetapi seringkali dengan nama "operator ternary".
Menjadi pedant seperti saya, saya ingin memperjelas bahwa nama operator adalah operator kondisional atau "operator kondisional?:". Ini merupakan operator ternary (dalam hal ini memiliki tiga operan) dan hal itu terjadi untuk menjadi satu-satunya operator terner di Jawa saat ini.
Namun, speknya cukup jelas bahwa namanya adalah operator kondisional atau "operator kondisional?", Yang sama sekali tidak ambigu. Saya pikir itu lebih jelas untuk memanggilnya dengan nama itu, karena itu menunjukkan perilaku operator sampai batas tertentu (mengevaluasi suatu kondisi) daripada hanya berapa banyak operan yang dimilikinya.
sumber
&&
operator kondisional dan, dan operator||
kondisional, atau hanya menggunakan "operator kondisional" untuk?:
.Menurut Spesifikasi Sun Java , itu disebut Operator Bersyarat. Lihat bagian 15.25. Anda benar tentang apa yang dilakukannya.
Operator bersyarat? : menggunakan nilai boolean dari satu ekspresi untuk memutuskan yang mana dari dua ekspresi lain yang harus dievaluasi.
Operator bersyarat secara sintaksis asosiatif (mengelompokkan kanan-ke-kiri), sehingga a? B: c? D: e? F: g artinya sama dengan a? B: (c? D: (e? F : g)).
Operator bersyarat memiliki tiga ekspresi operan; ? muncul di antara ekspresi pertama dan kedua, dan: muncul di antara ekspresi kedua dan ketiga.
Ekspresi pertama harus dari tipe boolean atau Boolean, atau kesalahan waktu kompilasi terjadi.
sumber
berarti:
sumber
Tidak sepenuhnya benar, tepatnya:
Itu "dikembalikan" sangat penting. Itu berarti metode harus mengembalikan nilai dan nilai itu harus diberikan di suatu tempat.
Juga, itu tidak persis sama dengan sintaksis dengan versi if-else. Sebagai contoh:
Jika dikodekan dengan if-else akan selalu menghasilkan lebih banyak bytecode.
sumber
Ternary, bersyarat; tomat, tomatoh. Apa yang benar-benar berharga adalah inisialisasi variabel. Jika (seperti saya) Anda suka menginisialisasi variabel di mana mereka didefinisikan, operator ternary kondisional (karena keduanya) memungkinkan Anda untuk melakukan itu dalam kasus di mana ada persyaratan tentang nilainya. Terutama terkenal di bidang terakhir, tetapi berguna di tempat lain juga.
misalnya:
Tanpa operator itu - dengan nama apa pun - Anda harus membuat field non-final atau menulis fungsi hanya untuk menginisialisasi itu. Sebenarnya, itu tidak benar - masih dapat diinisialisasi menggunakan if / else, setidaknya di Java. Tapi saya menemukan pembersih ini.
sumber
Jika kondisinya
true
kemudian mengevaluasi ekspresi pertama. Jika kondisinyafalse
, evaluasi ekspresi kedua.Ini disebut Operator Bersyarat dan merupakan jenis Operasi Ternary .
sumber
Konstruk ini disebut Operator Ternary dalam Teknik dan Programing Ilmu Komputer.
Dan Wikipedia menyarankan penjelasan berikut:
Tidak hanya di Jawa, sintaks ini tersedia dalam PHP, Objective-C juga.
Di tautan berikut ini memberikan penjelasan berikut, yang cukup bagus untuk memahaminya:
Ini mungkin dapat dibaca untuk beberapa kondisi logis yang tidak terlalu rumit atau lebih baik menggunakan blok If-Else dengan kombinasi yang diinginkan dari logika kondisional.
Kita dapat menyederhanakan blok If-Else dengan operator ternary ini untuk satu baris pernyataan kode.
Sebagai contoh:
Mungkin sama dengan yang berikut ini:
Jadi, jika kami merujuk pada pernyataan Anda:
Ini sebenarnya setara 100% dari blok If-Else berikut :
Itu dia!
Semoga ini bisa membantu seseorang!
Bersulang!
sumber
Benar. Ini disebut dengan operator ternary . Beberapa juga menyebutnya operator bersyarat .
sumber
Operator Ternary (? :)
sumber
Anda mungkin tertarik pada proposal untuk beberapa operator baru yang mirip dengan operator bersyarat. Operator null-safe akan mengaktifkan kode seperti ini:
Ini akan menjadi sangat nyaman di mana auto-unboxing terjadi.
Ini telah dipilih untuk dipertimbangkan lebih lanjut di bawah "Project Coin" JDK 7.
sumber
Sebenarnya butuh lebih dari 3 argumen. Sebagai contoh jika kita ingin memeriksa apakah angka positif, negatif atau nol kita dapat melakukan ini:
yang lebih baik daripada menggunakan if, else if, else.
sumber
Ini adalah operator bersyarat, dan ini lebih dari sekadar cara penulisan pernyataan singkat.
Karena itu adalah ekspresi yang mengembalikan nilai, itu dapat digunakan sebagai bagian dari ekspresi lainnya.
sumber
Ya kamu benar. ?: biasanya disebut "operator kondisional ternary", sering disebut sebagai "operator ternary". Ini adalah versi singkat dari standar jika / jika kondisional.
Operator Bersyarat Ternary
sumber
Saya kebetulan sangat suka operator ini, tetapi pembaca harus dipertimbangkan.
Anda selalu harus menyeimbangkan kekompakan kode dengan waktu yang dihabiskan untuk membacanya, dan dalam hal ini memiliki beberapa kekurangan yang cukup parah.
Pertama-tama, ada kasus Penanya Asli. Dia hanya menghabiskan satu jam memposting tentang itu dan membaca tanggapan. Berapa lama lagi penulis akan menulis setiap:? Seandainya sepanjang masa hidupnya. Tidak satu jam untuk memastikan.
Kedua, dalam bahasa mirip-C, Anda terbiasa mengetahui bahwa conditional adalah hal pertama dalam barisan. Saya perhatikan ini ketika saya menggunakan Ruby dan menemukan garis-garis seperti:
Jika saya sudah lama menjadi pengguna Ruby, saya mungkin tidak akan memiliki masalah dengan baris ini, tetapi berasal dari C, ketika Anda melihat "callMethodWh Apapun" sebagai hal pertama dalam baris tersebut, Anda berharap akan dieksekusi. The?: Kurang samar, tetapi masih cukup tidak biasa untuk membuang pembaca.
Keuntungannya, bagaimanapun, adalah perasaan yang sangat keren di perut Anda ketika Anda dapat menulis pernyataan 3-baris jika dalam 1 spasi. Tidak dapat menyangkal itu :) Tapi jujur, tidak selalu lebih mudah dibaca oleh 90% orang di luar sana hanya karena 'kelangkaannya.
Ketika itu benar-benar tugas yang didasarkan pada Boolean dan nilai-nilai saya tidak punya masalah dengan itu, tetapi dapat dengan mudah disalahgunakan.
sumber
Ekspresi bersyarat dalam gaya yang sama sekali berbeda, tanpa eksplisit jika dalam pernyataan.
Sintaksnya adalah: ekspresi boolean? ekspresi1: ekspresi2;
Hasil dari ekspresi kondisional ini adalah
ekspresi1 jika ekspresi boolean benar;
jika tidak hasilnya adalah ekspresi2.
Misalkan Anda ingin menetapkan jumlah variabel num1 dan num2 yang lebih besar ke maks. Anda cukup menulis pernyataan menggunakan ekspresi kondisional: max = (num1> num2)? num1: num2;
Catatan: Simbol? dan: tampil bersama dalam ekspresi kondisional. Mereka membentuk operator bersyarat dan juga disebut operator ternary karena menggunakan tiga operan. Ini adalah satu-satunya operator ternary di Jawa.
dikutip dari: Intro to Java Programming edisi ke-10 oleh Y. Daniel Liang halaman 126 - 127
sumber