Saya hanya ingin membalik boolean berdasarkan apa yang sudah ada. Jika itu benar - buatlah itu salah. Jika itu salah - buatlah itu benar.
Ini kutipan kode saya:
switch(wParam) {
case VK_F11:
if (flipVal == true) {
flipVal = false;
} else {
flipVal = true;
}
break;
case VK_F12:
if (otherVal == true) {
otherValVal = false;
} else {
otherVal = true;
}
break;
default:
break;
}
c++
c
boolean
boolean-logic
John T
sumber
sumber
Jelas Anda membutuhkan pola pabrik!
: D
sumber
Jika Anda tahu nilainya 0 atau 1, Anda bisa melakukannya
flipval ^= 1
.sumber
^
adalah operator atau eksklusif .0^1
adalah1
, dan1^1
adalah0
. Ini sama dengan menambahkan jika Anda mengabaikan bit carry. Atau Anda dapat menganggapnya sebagai - jika salah satu bit bernilai 1, hasilnya adalah kebalikan dari bit lainnya. Atau Anda dapat menganggapnya sebagai mengajukan pertanyaan: Apakah kedua bit ini berbeda?Solusi termudah yang saya temukan:
sumber
x = !x;
tidak hanya lebih pendek, tetapi juga lebih terbaca.longVariableName ^= true;
jelas lebih pendek darilongVariableName = !longVariableName;
Dan setiap programmer harus tahu XOR.a ^= b
artinyaa = a ^ b
, dimana^
berarti XOR. Notasia °= b
untuka = a ° b
setiap operator°
sangat umum di antara sintaks C / C ++ / C #.gRackWidget->modules->first().lights[PATTERN1_LIGHT + i].value = !gRackWidget->modules->first().lights[PATTERN1_LIGHT + i].value;
Tentu saja, hal terbersih untuk dilakukan adalah memperluasnya ke beberapa baris dan menggunakan variabel sementara untuk menyimpan objek, tetapigRackWidget->modules->first().lights[PATTERN1_LIGHT + i].value ^= 1
jauh lebih mudah dibaca, lebih sedikit rawan kesalahan, dan lebih sedikit karakter daripada kode asli .Hanya untuk informasi - jika alih-alih bilangan bulat, bidang wajib Anda adalah satu bit dalam tipe yang lebih besar, gunakan operator 'xor' sebagai gantinya:
sumber
Sepertinya ini gratis untuk semua ... Heh. Berikut variasi lain, yang menurut saya lebih masuk kategori "pintar" daripada sesuatu yang saya rekomendasikan untuk kode produksi:
Saya kira kelebihannya adalah:
Dan kerugian yang sama jelasnya adalah
Ini mendekati solusi @ korona yang menggunakan?: Tetapi diambil satu langkah (kecil) lebih jauh.
sumber
Hanya karena cara bola aneh favorit saya untuk beralih bool tidak terdaftar ...
bekerja juga. :)
(ya
x = !x;
lebih jelas dan lebih mudah dibaca)sumber
Solusi codegolf'ish akan lebih seperti:
sumber
Saya lebih suka solusi John T, tetapi jika Anda ingin menggunakan semua kode golf, pernyataan Anda secara logis direduksi menjadi ini:
sumber
hal yang sama berlaku untuk
sumber
Jelas Anda membutuhkan solusi fleksibel yang dapat mendukung tipe yang menyamar sebagai boolean. Hal berikut memungkinkan untuk itu:
Anda kemudian dapat mengkhususkan ini untuk berbagai jenis yang mungkin berpura-pura menjadi boolean. Sebagai contoh:
Contoh penggunaan konstruksi ini:
Tidak, saya tidak serius.
sumber
Untuk bilangan bulat dengan nilai 0 dan 1 Anda dapat mencoba:
MWE di C:
sumber
Hanya karena saya suka mempertanyakan kode. Saya mengusulkan agar Anda juga dapat menggunakan terner dengan melakukan sesuatu seperti ini:
Contoh:
sumber