Ada seorang kolega saya yang terus menulis:
if (someBool == true)
Itu membuat saya naik tembok! Haruskah saya membuat masalah besar atau hanya menjatuhkannya?
Ada seorang kolega saya yang terus menulis:
if (someBool == true)
Itu membuat saya naik tembok! Haruskah saya membuat masalah besar atau hanya menjatuhkannya?
if (some_flag == true)
tapi implisitif (is_something)
atauif (has_something)
. Perhatikan nama variabelnya.someBool == true
juga boolean, jadi dengan logika yang sama seharusnyaif ((someBool == true) == true)
.$var = (bool) some_expression
. Dan dalam kebanyakan kasus, itu bahkan tidak masalah karena PHP akan melakukan konversi yang diperlukan secara dinamis.Jawaban:
Itu hanya kode yang berlebihan, bukan hidup atau mati. Namun....
Jika itu sering terjadi, itu bisa menjadi masalah dengan bagaimana
someBool
namanya. Nama yang baik bisa sangat membantu menghilangkan kebutuhan untuk itu==true
atau
atau
sebagai contoh.
sumber
someBool == true
kode lama beberapa kali untuk kejelasan. Tetapi jika saya menulis dari awal sayaif (isSomething)
Ketika saya melihat
someBool == true
, saya merasa seperti programmer belum menginternalisasi ide evaluasi , yang merupakan kekurangan yang cukup mendasar.Namun, sudut pandang saya condong karena saya menghabiskan beberapa musim panas dalam pemrograman pengajaran di perguruan tinggi untuk anak-anak, yang sering menulis ungkapan seperti ini karena mereka benar-benar tidak menguasai latihan mental dalam mengevaluasi suatu ekspresi. Begitu mereka mengonsep konsep, redundansi menjadi jelas.
Untuk programmer profesional yang kompeten, ini mungkin bukan masalahnya. Ini mungkin hanya kebiasaan buruk yang mereka kembangkan pada masa-masa awal pemrograman dan tidak pernah benar-benar bergetar. Tapi itu masih akan membuatku sedikit takut jika itu adalah hal pertama yang kulihat seseorang lakukan dalam sebuah wawancara.
sumber
if (c == true) return true; else return false;
, tetapi 99% dari waktu (1% ada di sana karena saya tidak pernah bisa memastikan bahwa saya tidak melewatkan beberapa) saya akan segera melihat dan mengganti semuanya denganreturn c
. Saya berharap sebagian besar programmer yang kompeten harus melakukan hal serupa jika mereka mengembangkan kebiasaan itu sejak awal karier mereka. Apa yang tidak saya harapkan adalah respons yang baik.if (!someCondition) { someCondition = false; }
Saya telah melihat beberapa (er, banyak) redudansi serta beberapa ketidakmungkinan dalam kode kami, tetapi yang ini sangat sederhana namun begitu menjengkelkan untuk berpikir bahwa seseorang benar-benar menulisnya. Beberapa kali, bahkan.if(x) x=true;
yang TIDAK berlebihan, tetapi setara denganx=!!x;
(normalisasi x ke 0/1)Itu membuat saya gila juga, tapi saya akan mengatakan menyebutkan redundansi kepada mereka dengan cara yang konstruktif dan kemudian menjatuhkannya bahkan jika mereka tidak setuju.
Atau Anda dapat mencoba pendekatan ini:
Anda: Dapatkah Anda mulai menggunakan konvensi kode berikut untuk mengevaluasi Boolean?
Mereka: Mengapa kita melakukan itu? Paruh kedua dari pernyataan itu berlebihan, akan selalu dievaluasi menjadi benar.
Anda: Oleh George, Anda benar. Saya konyol. Mari kita pergi dengan versi tanpa semua redundansi. Bagaimana tentang?
sumber
true=true
tidak dikompilasi, Anda tidak dapat menetapkan untuktrue
;-)if(somebool == false)
atau!=
, tetapi selalu menentang yang salah dan tidak benar. Saya menemukan itu berlebihan, tetapi karena standar pengkodean bersikeras bahwaif()
terlihat seperti fungsi memanggil spasi antara parens membantu saya membacanya. Sendiri, bool adalah bool, tetapiif (somePointer)
tidak bisa terbang; Saya lebih sukaif (somePointer != NULL)
karena pointer bukan bool.Saya pikir, jika sesuatu yang sepele adalah masalah terbesar Anda dengan rekan kerja Anda, Anda harus menganggap diri Anda cukup beruntung.
sumber
Anda pasti harus menghentikan kebiasaan buruk ini. Dengan lembut ...
Sangat mudah lupa untuk menulis tanda sama dengan ganda, mengubah kode menjadi:
Dalam C # misalnya ini hanya akan menghasilkan peringatan, bukan kesalahan. Jadi, kecuali jika Anda memperlakukan peringatan sebagai kesalahan kode akan berjalan, tetapkan variabel ke true dan selalu masukkan kondisi.
sumber
if (answer = 42) {}
itu tidak bisa dikompilasi karena ekspresinya bukan bool.Saya setuju dengan Anda, tapi saya akan berperan sebagai advokat iblis di sini:
Bergantung pada bahasa dan nama variabel, x == true tepat:
Pertimbangkan situasi berikut dalam bahasa dengan pengetikan statis dan ketik paksaan untuk tipe integral:
Seseorang yang membaca bagian kode ini mungkin tidak segera menyadari bahwa tindakan yang Diijinkan adalah variabel boolean - itu juga bisa berupa bilangan bulat, mewakili jumlah tindakan yang diizinkan. Jadi dengan menambahkan == true, menjadi jelas bahwa x adalah boolean, dan bukan bilangan bulat yang dipaksa ke boolean:
sumber
actionsAreAllowed
.if (x) { ...
Anda sudah menyatakan bahwa itux
adalah boolean atau dapat dikonversi menjadi boolean. Apa yang Anda sebut itu tidak relevan.Bagaimana dengan bool yang dapat dibatalkan?
sumber
Biasanya, Anda tidak ingin mempermasalahkan konvensi pengkodean kecuali jika konvensi tersebut menghambat proyek secara signifikan. Saya telah melihat banyak argumen yang memanas meningkatkan hal-hal sekecil wilayah kode dan menggarisbawahi.
Yang sedang berkata, saya tidak melihat masalah dengan menambahkan
== true
pernyataan bersyarat. Sebagai soal fakta, saya memiliki kebiasaan menggunakan== false
sebagai lawan dari tanda seru terkemuka saat menguji kondisi negatif. Saya pikir itu lebih mudah dibaca.Jika ada konvensi yang mapan, saya katakan ikuti saja kecuali ada alasan untuk berubah. Namun, itu tidak benar-benar layak mengangkat masalah besar.
sumber
(9 == True)
mengevaluasi false dalam Python dan saya akan membayangkan serupa di C ++.Ack. Saya pria itu. Rasa malu, rasa malu. Begitulah cara saya belajar, dan itulah cara saya "memformat otomatis" di kepala saya. Satu-satunya saat saya menggunakan sintaks yang disukai Joel adalah ketika variabel bool memiliki awalan kata kerja seperti "is." Saya membutuhkan kata kerja, baik itu "adalah," "bisa," "lakukan," atau saya butuh == untuk memberikan kata kerja "sama dengan." Saya mungkin tidak akan pernah menghentikan kebiasaan itu, jadi saya akan mengerti jika Anda tidak mengatakan 'halo' kepada saya di jalan.
sumber
ingatkan saya tentang "kode kegilaan boolean", seperti ini
Dari pada:
sumber
Secara pribadi, saya sangat tidak suka cara mengatakan "tidak" dalam bahasa berbasis C. Tanda seru kecil itu terlalu mudah untuk dilupakan.
Karena itu saya menuliskannya secara lengkap:
Setelah membaca itu sebentar, saya juga ingin simetri
Jadi anggap saja ini sebagai artefak dari penggunaan C
!
alih-alihnot
.sumber
not
operator, dan begitu juga C (setelah Anda menyertakan header standar<iso646.h>
). Jika Anda tidak ingin (atau tidak bisa) menggunakan header ini (atau jika Anda terjebak dengan Java atau C #), saya sarankan menempatkan spasi setelah tanda seru:if (! condition)
. Ini membuatnya agak lebih mencolok.not
bukan pilihan.Tergantung pada bahasanya, tapi biasanya itu ide yang buruk ...
Di C, jangan pernah lakukan ini. Terlalu mudah untuk menemukan situasi di mana nilai yang Anda uji tidak salah (tidak nol), tetapi juga tidak sama dengan nilai tunggal yang didefinisikan sebagai "benar".
Di Ruby, lakukan ini hanya jika Anda benar-benar yakin bahwa Anda ingin gagal dalam segala hal kecuali Boolean benar.
Dalam C ++ dan bahasa statis lainnya dengan tipe bool, itu berlebihan, dan dapat menyebabkan kesalahan pemrograman ketika Anda mis-jenis
=
bukan==
, atau promosi kesalahan seperti yang disebutkan di komentar.sumber
if (b == true) {
tidak hanya berlebihan. Hal ini juga sedikit berisiko, karena Anda mungkin tidak sengaja ditugaskantrue
untukb
.if (b == true)
, danb
bukan bool, jenis konversi salah arah. Abool
adalah tipe integral yang biasanya dipromosikan ke tipe integral yang sesuai dengan nilai 1. Jika Anda menulis, katakan,int b(2); if (b == true)
kemudiantrue
menjadiint
dengan nilai 1 untuk tujuan perbandingan, daripadab
dipaksa menjadi tipebool
, yang akan memberikan hasil yang tepat.==
.Anda pikir itu buruk? Bagaimana tentang:
sumber
aku lebih memilih
atau
juga, tetapi saya khawatir bahwa mengemukakannya akan membuat orang kesal, jadi saran saya adalah melupakannya. Maaf!
sumber
if (!bNotVal)
atauif (bNotVal)
bahkan di tempat pertama. Ugh negatif dalam nama membuat semuanya lebih sulit dibaca.Anda harus memberi tahu dia bahwa dia melakukan kesalahan.
-nya
if (true == someBool) {
}
jika dia pernah lupa satu = dia dalam masalah besar dalam gaya tulisannya.
sumber
Bagaimana tentang
MENGAPA ITU STRING ?!
sumber
if(preg_match('/title/', implode($_POST))){
. PHP, cukup kata, saya perlu mencari pekerjaan yang lebih baik.x
berasal dari input pengguna (file konfigurasi atau layanan web, misalnya). Namun, saya biasanya mengijinkan nilai truish lainnya, jadi akhirnya lebih sepertiif x.lower().strip() in ["true", "yes", "on", "1"]
Sebenarnya, jika itu nullable, pengujian untuk x == true akan diperlukan. :)
sumber
Saya menulis kode seperti itu!
Inilah alasannya:
"if bla == true" berbunyi seperti kalimat, sedangkan "jika bla" tidak dalam banyak kasus. Kedengarannya salah, ketika MEMBACA kode aktual
Juga kompilator memperingatkan tentang tugas di blok if, jadi benar-benar tidak ada bahaya dalam menggunakan == true. (membingungkan dengan =)
Juga apakah orang-orang yang tidak menulis "== true", menggunakannya "! ()" Untuk "== false"? Saya merasa itu sangat jelek. Dan jika Anda menggunakan "== false", hanya sangat konsisten untuk juga menggunakan "== true", alih-alih memiliki dua cara berbeda untuk memverifikasi kebenaran.
sumber
Ingatlah bahwa Anda bekerja sebagai bagian dari tim, jadi Anda harus menyelesaikannya bersama. "Bermain baik dengan orang lain" masih merupakan sifat kepribadian yang penting bahkan setelah sekolah dasar :)
sumber
Secara umum akan menghilangkan '== true', tetapi bahkan tidak ada gunanya membahasnya kecuali Anda memasukkannya ke dalam standar pengkodean tim Anda.
sumber
Meskipun saya setuju terutama sebagai pengembang C #, saya tidak bisa mengatakan ini selalu terjadi. Sebagai contoh, dalam Javascript, === akan melakukan coalescence tipe. Jadi dengan asumsi var x = 3 maka:
sementara
Saya kira itu berbeda dari == karena bahkan di JS saya tidak akan menggunakan if (x == true) tetapi hanya sesuatu untuk dipikirkan.
Sentuhan semacam ini pada titik lain yang muncul di kantor saya:
Dalam C #, bool b; akan cukup dan akan menginisialisasi b ke false . Namun, lebih eksplisit untuk menulis baris di atas dan lagi pula harus dihapus oleh kompiler selama optimasi.
Jadi saya kira maksud saya adalah itu tidak selalu begitu jelas apa yang merupakan dan tidak praktik yang baik dan banyak itu bermuara pada preferensi serta fitur bahasa / keanehan.
sumber
bool b;
hanya menginisialisasi ke false ketikab
bidang. Anda harus menginisialisasi variabel lokal secara eksplisit.true
atau hanya "benar". Misalnya, string apa pun yang tidak kosong dianggap== true
tetapi tidak=== true
dalam beberapa bahasa.Ah ya, tapi bagaimana jika variabelnya nullable? (bool?)
Beberapa bahasa (C #) akan membutuhkan dan memberikan atau membandingkan dengan 'benar'.
sumber
Yang muda tahu aturannya, tetapi yang tua tahu pengecualiannya;)
Terbaru
C#
, jika Anda berurusan dengannull-able bool
, maka Anda harus:Jika tristate bukan masalah, maka biasanya tidak ada alasan untuk membandingkan sesuatu dengan
true
/True
. Namun, dalamPython
dan beberapa bahasa lain sepertiC/C++
Anda dapat melakukanif
pada ekspresi non-bool. Bahasa-bahasa ini memiliki aturan unik untuk menafsirkan bilangan bulat, pointer, daftar, dll. Baik benar atau salah. Terkadang Anda tidak menginginkannya. Misalnya, dalam cuplikan Python ini:Di sini
z
seharusnyaTrue
, tetapiz2
harusFalse
. Sekarang, suatuClojure
bahasa mendekati ini dengan cara lain -and
fungsi di sana tidak harus mengevaluasi ke abool
, tetapiif
dapat mengatasinya.Terlepas dari bahasanya, setiap kali Anda menemukan diri Anda membandingkan sesuatu dengan
True
atauFalse
, mungkin ada baiknya berkomentar.sumber
notExceptButHasX
,exceptNotButIsntY
,doNotUnlessIsExceptZ
? Bagaimana hal itu membuat keterbacaan dalam masalah Anda? Jika x, y, z diberi nama seperti "isEnabled", "isEffective", "hasProperty", maka pernyataan Anda menjadiisEnabled || isEffective || hasProperty
yang jauh lebih mudah dibaca daripada membandingkan dengantrue
ataufalse
.Pengkodean seperti itu akan menggosok saya dengan cara yang salah sebelumnya juga. Meskipun pengenal contoh Anda dinamai "someBool", menggunakan gaya pengkodean itu secara tidak sengaja pada variabel yang tidak dijamin sebagai boolean dapat memiliki perilaku yang tidak diinginkan. Jika nilai "someBool" tidak sepenuhnya "benar" atau "salah", hasilnya akan salah.
Saya menemukan bug yang sangat halus tahun lalu yang disebabkan oleh gaya pengkodean yang sulit untuk diidentifikasi karena mata seseorang mengabaikan konstruksi tersebut. Anda akan berpikir, "Bagaimana mungkin itu salah?" Hal yang sama berlaku untuk ekspresi yang dipahami dengan baik sebagai "(var)" atau "(! Var)", yang Anda baca atau kode mereka tanpa memverifikasi perilaku mereka.
Jadi saya telah memperkenalkan beberapa standar pengkodean untuk mengurangi keberadaan bug seperti itu dalam basis kode dan kemungkinan bug halus seperti itu akan secara tidak sengaja merayap di suatu waktu di masa mendatang.
Dengan membersihkan kode yang tidak sesuai dengan gaya baru, saya telah mengidentifikasi dan memperbaiki beberapa contoh bug halus semacam itu.
sumber
Harus menggunakan ini sepanjang waktu di ActionScript 2 (diakui sekarang bahasa mati), karena:
Jadi hampir selalu yang terbaik adalah spesifik.
sumber
Saya setuju. Ini adalah konstruksi yang berlebihan, khususnya dalam bahasa yang diketik dengan kuat.
Untuk menambahkan penyalahgunaan boolean lain, saya telah menemukan konstruksi semacam ini beberapa kali dalam Javascript, (khususnya di beberapa fungsi rakasa mirip spageti, seperti dalam 100+ baris):
Tampaknya, karena kurangnya definisi tipe yang ketat dalam bahasa ini, beberapa programmer lebih suka tidak harus bermain-main dengan
false|undefined
nilai - nilai.sumber
Saya memiliki seorang kolega yang akan memiliki beberapa kode seperti ini:
Dan kemudian, untuk semacam tes / debugging, dia akan berharap untuk tidak memanggil blok ini sehingga dia akan mengubahnya menjadi:
Dan kemudian sesekali dia akan mengubahnya menjadi:
Yang terburuk adalah, jenis debugging ini menular pada saya pada kesempatan dan sangat buruk bagi pengembang lain untuk membaca!
sumber
Saya akan mengatakan konsistensi adalah raja dalam basis kode. Jadi, Anda harus menggunakan gaya, yang sebagian besar digunakan di organisasi Anda. Cobalah menjadikan gaya yang Anda sukai menjadi bagian dari pedoman koding perusahaan resmi. Jika sudah ada dalam pedoman, ikuti saja.
(Yang dikatakan, itu juga akan sangat mengganggu saya - tetapi mungkin tidak cukup untuk membuat masalah besar dari itu).
sumber
Saya lebih suka tidak menempatkan ekstra == true, tapi kadang-kadang saya tidak sengaja memasukkannya dan tidak menyadarinya. Orang tersebut mungkin tidak memperhatikan dan menempatkannya secara tidak sengaja. Saya membaca ulang kode saya dan terkadang memperhatikan bahwa saya menempatkan ekstra == true jadi saya menghapusnya == true. Kadang-kadang saya tidak menyadarinya dan dengan senang hati akan menyambut seseorang yang mengatakan bahwa saya meletakkannya secara berlebihan.
sumber
bagaimana tentang:
Yap, saya sudah melihatnya.
sumber