Kami memiliki tugas untuk kelas kami di mana kami harus membuat permainan Tic-tac-toe . Orang-orang suka menyulitkan diri mereka sendiri, jadi mereka menulis permainan rumit yang termasuk menu. Di akhir permainan, Anda harus memiliki opsi untuk bermain lagi atau keluar dari program. Saya menggunakan int
variabel untuk itu, tapi saya perhatikan beberapa teman sekelas menggunakan BOOL.
Apakah ini lebih efisien? Apa bedanya, antara menyimpan jawaban yang seharusnya hanya menyimpan dua nilai int
daripada menyimpannya dalam bool? Apa tujuan pasti dari variabel-variabel ini?
int
adalah untuk menyimpan bilangan bulat dan tujuan daribool
adalah untuk menyimpan nilai boolean (true
ataufalse
). Menggunakanbool
IMO mencerminkan penggunaannya jauh lebih baik daripada menggunakanint
.typedef int Bool
menjelaskan bahwa mereka menggunakan boolean. Dukungan C ++ terintegrasi untukbool
ke dalam bahasa, seperti yang dilakukan C99 dengan_Bool
kata kunci (agak jelek) .bool
", ini tentang mengapa kita memiliki nama yang berbeda untuk tipe yang serupa (sepertilength_t
) dan mengapa penting bagi kompiler untuk memeriksa tipe.Jawaban:
Saat memilih jenis variabel dan nama variabel, Anda ingin niat Anda sejelas mungkin. Jika Anda memilih jenis
bool
(boolean), jelas hanya ada dua nilai yang dapat diterima:true
ataufalse
. Jika Anda menggunakan tipeint
(integer), tidak jelas lagi bahwa maksud variabel itu hanya bisa 1 atau 0 atau nilai apa pun yang Anda pilih untuk maksudtrue
danfalse
. Plussizeof(int)
biasanya akan kembali menjadi 4 byte, sementarasizeof(bool)
akan mengembalikan 1.sumber
Tampaknya dalam semua (sampai sekarang) jawaban yang dikumpulkan tidak ada yang menangkap fakta bahwa OP berbicara tentang
BOOL
tidakbool
.Karena pertanyaan ini ditandai C ++, harus dicatat bahwa:
int
adalah bilangan bulat yang berkisar dariINT_MIN
hinggaINT_MAX
- makro<climits>
yang nilainya tergantung pada arsitektur mesin hosting. Dalam C ++ nilai-nilai ini juga dapat diakses sepertistd::numeric_limits<int>::min()
dan...:max()
masing - masing). Perilaku operator boolean diterapkan untukint
memperlakukan0
sebagai salah dan yang lainnya benar .BOOL
hanyalah sebuah petunjuk yang menyarankan perilaku boolean untuk int. Ini didefinisikan<cstddef>
sebagaiBOOL
jadi tidak lebih dari gula sintaksis, untuk apa-oleh kompiler-itu tidak lebih dari sebuah int. Ini adalah sesuatu yang digunakan programmer C, tetapi programmer C ++ harus menghindari, karena C ++ memilikinyabool
.bool
adalah jenis bahasa yang tidak terpisahkan yang nilai-nilai yang didukungnya adiltrue
danfalse
. Ketika dikonversiint
true
menjadi 1 danfalse
menjadi 0.Aspek penting adalah lebih aman terhadap kesalahan pemrograman:
tidak mungkin dikodekan dengan tipe bool yang tepat:
Menggunakan
BOOL
alih-alihbool
hanya kebiasaan buruk yang diwarisi dari masa lalu yang gemilang tidak ada yang benar-benar masih bisa dilupakan, sehingga menciptakan masalah lama untuk hari esok yang kurang mulia.Guru bahasa harus serius memikirkannya!
sumber
Tipe Bool lebih kecil dari tipe Int, sehingga menggunakan lebih sedikit ruang dalam memori. Bergantung pada sistem yang Anda kompilasi pada / untuk, Int bisa 4 - 8 byte, sedangkan Bool adalah 1 byte (seperti yang dapat dilihat dalam artikel MSDN ini )
Padukan ini dengan beberapa aspek KISS dan desain program yang bagus, dan menjadi jelas mengapa lebih baik menggunakan bool untuk menyimpan variabel yang hanya akan memiliki 2 nilai.
Mengapa terlalu mempersulit hal-hal dengan objek yang dapat menyimpan berbagai nilai, ketika Anda yakin bahwa Anda hanya perlu menyimpan 1 dari 2 nilai yang berbeda?
Apa yang terjadi dalam sistem yang menggunakan int, jika Anda menyimpan 75 di sana? Jika Anda telah menambahkan persyaratan tambahan
atau
maka Anda dilindungi untuk situasi ini. Tetapi jika Anda belum melakukannya, maka Anda tidak.
Anda juga dapat memiliki case (tergantung pada bagaimana Anda mengubah nilai int) di mana Anda memiliki buffer overrun, dan nilai "reset" kembali ke 0 atau batas bawah int Anda (yang bisa berada di suatu tempat di wilayah -127 hingga −9.223.372.036.854.775.808, tergantung pada arsitektur target Anda ) apa yang terjadi pada kode Anda?
Namun, jika Anda menggunakan bool, Anda bisa menggunakan sesuatu seperti ini:
Atau bahkan:
atau bahkan:
Bergantung pada kompiler Anda, mungkin ada optimisasi yang dapat dilakukan pada kode yang menggunakan Bools untuk menyimpan nilai true / false yang dipetakan. Padahal, mungkin tidak ada optimasi yang dapat dilakukan untuk Ints yang digunakan untuk menyimpan nilai true / false yang dipetakan.
Kita juga harus ingat bahwa C ++ (bersama dengan C, Assembly dan FORTRAN) digunakan untuk menulis kode yang sangat efisien, kecil dan cepat. Jadi, akan lebih baik menggunakan Bool dalam hal ini - terutama jika Anda ditandai pada penggunaan variabel, memori, cache atau waktu prosesor.
Pertanyaan serupa adalah: mengapa saya menyimpan integer (nilai) dalam float? Jawaban: Anda tidak boleh, karena tidak ada gunanya.
Singkat cerita: Sebagai guru / tutor / dosen / profesor Anda untuk membahas ukuran berbagai jenis nilai dengan Anda (jika Anda melewatkannya), dan mengapa mereka penting dalam Pengembangan Perangkat Lunak.
Saya harap ini membantu sebagai titik awal (saya juga berharap itu tidak dianggap sebagai hal yang terlalu besar)
sumber
return value >= 0;
untuk contoh pertama.Tujuannya di sini adalah kejelasan niat. Jenis kembali adalah bagian dari antarmuka fungsi dan
bool
memberitahu Anda lebih banyak tentang apa yang diharapkan dari fungsi daripada sebuahint
tidak.Bahkan
BOOL
lebih ekspresif daripadaint
, meskipun itu jenis yang sama itu setidaknya menunjukkan niat Anda.Namun, tidak satupun dari mereka yang saya rekomendasikan:
sumber
Dalam pemrograman Anda ingin mewakili sesuatu dari kehidupan nyata dalam kode. Meskipun int dan bool dapat melakukan hal yang sama, ide subyacent sama sekali berbeda: ketika menggunakan bool jawabannya mungkin ya atau tidak; dan itu saja, itulah tujuannya. Dengan bilangan bulat, Anda mungkin mewakili jumlah tanpa titik desimal. Dan dengan semangat yang sama, mengapa Anda memilih integer ketika double dapat melakukan hal yang sama? Jika integer lebih masuk akal daripada dobel saat memodelkan masalah, maka Anda dapat memilih int.
sumber
Karena pada akhirnya, Anda akan mengubah bilangan bulat Anda menjadi boolean: "jika (i = 1) maka mainkan game lain". Dalam situasi ini (i = 1) dikonversi menjadi benar atau salah: a boolean.
sumber
if (i = 1)
mungkin hal yang sangat salah untuk dimiliki dalam kode seseorang.