Haruskah operator ternary digunakan di luar pernyataan penugasan?

9

Sunting Ini bukan pertanyaan apakah operator ternary berbahaya atau tidak . Ini tentang apakah ada atau tidak ada konsensus tentang apakah harus digunakan di luar pernyataan penugasan. / Edit

Berdasarkan boolean, saya ingin memanggil satu dari dua fungsi yang berbeda (tanpa nilai balik). Saya menulis sedikit javascript ini:

(condition) ? doThis(arg) : doThat(arg)

Yang menurut saya terlihat lebih bersih daripada menulis pernyataan if-else:

if(condition) {
    doThis(arg);
}
else {
    doThat(arg);
}

Rekan-rekan saya sangat percaya bahwa pernyataan terner hanya boleh digunakan dalam pernyataan penugasan. Saya tidak dapat menemukan panduan gaya yang membahas ini, mungkin karena bahasa seperti Java dan C # tidak mengizinkan ini sama sekali (kompiler mereka membutuhkan operator ternary untuk mengembalikan nilai). Haruskah ini dianggap sebagai penggunaan pernyataan terner yang buruk? Mengapa?

BobbyA
sumber
Ingatlah bahwa Jason Voorhees dapat ditugaskan untuk mempertahankan kode Anda itu.
David Hammen
2
@gnat - bukan duplikat dari pertanyaan itu, yaitu tentang penggunaan umum?: dalam ekspresi, sedangkan ini khusus tentang menggunakannya sebagai pengganti jika-kalau tidak ada nilai tunggal yang dihitung.
Jules
Sementara saya dalam dua pikiran tentang kelayakan duplikat yang diusulkan, pertanyaan ini masih didasarkan pada pendapat, jadi saya tidak melihat ada gunanya membukanya kembali.
Ixrec
Menurut Anda mengapa ini terlihat lebih bersih? Melanggar konvensi seperti ini adalah kebalikan dari bersih.
JacquesB

Jawaban:

10

Secara umum, operator bersyarat dimaksudkan untuk membuat pernyataan if dengan suatu nilai . w = x ? y : z. Jadi, jika Anda menggunakannya untuk efek samping, itu kontra-intuitif. Valid, tetapi kontra-intuitif; dan ingat bahwa Anda sedang menulis kode untuk dibaca oleh rekan setim Anda.

asthasr
sumber
Sepertinya ini benar. Hampir setiap contoh penggunaan yang saya temukan, termasuk Wikipedia menggunakan operator untuk melakukan penugasan bersyarat.
BobbyA
3

Beberapa kasus, yang bukan tugas, di mana saya menemukan operator ternary berguna:

Dalam argumen fungsi: menurut pendapat saya

f( e1, .. cond ? em : dm, .. en);

lebih sedikit kesalahan daripada

if ( cond) f( e1, .. em, .. en); else f( e1, .. dm, .. en);

Ketika Anda ingin memanggil satu fungsi atau lainnya dengan argumen yang identik: sekali lagi saya temukan

(cond ? f : g)( /* long and complex argument list */);

lebih sedikit kesalahan daripada

if ( cond) f( /* long and complex argument list */);
else g( /* long and complex argument list */);

Seperti yang saya lihat, hal utama dalam setiap kasus adalah bahwa? form memiliki pengulangan yang lebih sedikit. Pengulangan membuka kemungkinan untuk mengubah satu instance dan lupa untuk mengubah yang lainnya.

dmuir
sumber
5
Namun dalam kasus ini, Anda masih menggunakan operator ternary untuk mengembalikan nilai, yang, menurut jawaban syrion di atas, adalah penggunaan yang diharapkan.
BobbyA
@ BobbyA bagaimana dengan fungsi void?
mundur