Dalam
ilmu komputer , Boolean atau logis tipe data adalah tipe data , memiliki dua
nilai (biasanya dilambangkan benar dan salah), dimaksudkan untuk mewakili
nilai-nilai kebenaran dari logika dan aljabar Boolean . Hal ini dinamai George
Boole , yang pertama kali didefinisikan sistem aljabar logika di pertengahan
abad 19. Tipe data Boolean adalah hasil utama dari pernyataan bersyarat , yang
memungkinkan tindakan yang berbeda dan mengubah aliran kontrol tergantung pada
apakah programmer-ditentukan boolean kondisi bernilai benar atau salah.
Generalisasi
Dalam
bahasa pemrograman yang telah built-in Boolean tipe data, seperti Pascal dan
Java , para operator perbandingan seperti > dan ≠ biasanya didefinisikan
untuk mengembalikan nilai Boolean. Bersyarat dan perintah berulang dapat
didefinisikan untuk menguji ekspresi Boolean bernilai.
Bahasa
tanpa Boolean tipe data eksplisit, seperti C90 dan Lisp , mungkin masih
mewakili nilai-nilai kebenaran dengan beberapa jenis data lainnya. Lisp
menggunakan daftar kosong untuk palsu, dan nilai lain untuk benar. C
menggunakan bilangan bulat tipe, di mana ekspresi relasional seperti i > j
dan ekspresi logis dihubungkan dengan && dan || didefinisikan memiliki
nilai 1 jika benar dan 0 jika salah, sedangkan bagian uji if , while , for ,
dll, memperlakukan setiap nilai bukan nol sebagai benar. Memang, sebuah variabel Boolean dapat dianggap
(dan diimplementasikan) sebagai variabel numerik dengan satu digit biner (bit)
, yang dapat menyimpan hanya dua nilai. Perlu dicatat bahwa pelaksanaan boolean
di komputer kemungkinan besar direpresentasikan sebagai penuh kata , bukan
sedikit, ini biasanya disebabkan oleh blok pengalihan cara komputer informasi.
Kebanyakan
bahasa pemrograman, bahkan mereka yang tidak memiliki tipe Boolean eksplisit,
memiliki dukungan untuk operasi aljabar Boolean seperti hubungannya ( AND ,
& , * ), disjungsi ( OR , | , + ), kesetaraan ( EQV , = , == ) , eksklusif
atau / non-kesetaraan ( XOR , NEQV , ^ , != ), dan tidak ( NOT , ~ , ! ).
Dalam
beberapa bahasa, seperti Ruby , Smalltalk , dan Alice yang "benar"
dan "palsu" nilai-nilai milik memisahkan kelas-misalnya True dan
False , resp.-sehingga tidak ada satu Boolean "jenis."
Dalam
SQL , yang menggunakan logika tiga-nilai untuk perbandingan eksplisit karena
perlakuan khusus dari Nulls , tipe data Boolean (diperkenalkan pada SQL: 1999 )
juga didefinisikan untuk memasukkan lebih dari dua nilai kebenaran, sehingga
SQL "boolean" bisa menyimpan semua nilai-nilai logis yang dihasilkan
dari evaluasi predikat di SQL. Sebuah kolom tipe Boolean juga dapat dibatasi
untuk hanya TRUE dan FALSE sekalipun. Dalam
kalkulus lambda model komputasi, nilai Boolean dapat direpresentasikan sebagai
booleans Gereja .
ALGOL, Java, dan C #
Salah
satu bahasa yang paling awal untuk memberikan Boolean tipe data eksplisit
adalah ALGOL 60 (1960) dengan nilai-nilai benar dan salah dan operator logika
dilambangkan dengan simbol '
'(Dan),' '(Atau),' '(Berarti),'
'(Kesetaraan), dan' '(Tidak).
Karena keterbatasan perangkat input waktu, namun, sebagian besar kompiler
digunakan representasi alternatif untuk yang terakhir, seperti AND atau 'AND' .
Pendekatan
ini ("Boolean adalah built-in terpisah primitif tipe data ") diadopsi
oleh banyak bahasa kemudian, seperti ALGOL 68 (1970), [3] Java , dan C # .
Fortran
Versi
pertama dari FORTRAN (1957) dan penggantinya FORTRAN II (1958) tidak memiliki
nilai-nilai logis atau operasi, bahkan kondisional IF pernyataan mengambil
ekspresi aritmatika dan bercabang ke salah satu dari tiga lokasi sesuai dengan
tandanya, lihat aritmatika IF . FORTRAN IV (1962), bagaimanapun, mengikuti
ALGOL 60 contoh dengan menyediakan tipe data Boolean ( LOGICAL ), literal
kebenaran ( .TRUE. dan .FALSE. ), Boolean bernilai operator perbandingan numerik
( .EQ. , .GT. , dll), dan operator logika ( .NOT. , .AND. , .OR. ). Dalam
FORMAT pernyataan, karakter kontrol tertentu (' L ') diberikan untuk parsing atau
format nilai-nilai logis.
Lisp dan Scheme
The
Lisp Bahasa (1958) pernah memiliki built-in tipe data Boolean. Sebaliknya,
konstruksi kondisional seperti cond menganggap bahwa nilai logis
"false" diwakili oleh daftar kosong () , yang didefinisikan sebagai
sama dengan atom khusus nil atau NIL , sedangkan yang lain -ekspresi s ditafsirkan
sebagai "benar" . Untuk kenyamanan, kebanyakan dialek modern Lisp
predefine atom t memiliki nilai t , sehingga seseorang dapat menggunakan t
sebagai notasi mnemonic untuk "benar".
Pendekatan
ini ("nilai apapun dapat digunakan sebagai nilai Boolean") dipertahankan
di sebagian dialek Lisp ( Common Lisp , Scheme , Emacs Lisp ), dan model yang
sama diadopsi oleh banyak bahasa scripting , bahkan yang yang memiliki tipe
Boolean berbeda atau nilai-nilai Boolean, meskipun nilai-nilai yang ditafsirkan
sebagai "palsu" dan yang "benar" bervariasi dari bahasa ke
bahasa. Dalam Skema, misalnya, "palsu" nilai adalah atom yang berbeda
dari daftar kosong, jadi yang terakhir ditafsirkan sebagai "benar".
Pascal, Ada, dan Haskell
The
Pascal Bahasa (1978) memperkenalkan konsep programmer-didefinisikan tipe
enumerated . Built-in Boolean tipe data yang kemudian diberikan sebagai tipe
enumerasi yang telah ditetapkan dengan nilai-nilai FALSE dan TRUE . Menurut
definisi, semua perbandingan, operasi logis, dan pernyataan bersyarat
diterapkan dan / atau menghasilkan Boolean nilai. Jika tidak, Boolean tipe
memiliki semua fasilitas yang tersedia untuk tipe enumerated secara umum -
seperti pemesanan dan digunakan sebagai indeks. Di sisi lain, konversi antara
Boolean dan bilangan bulat (atau jenis lainnya) masih diperlukan tes eksplisit
atau panggilan fungsi, seperti pada ALGOL 60. Pendekatan ini ("Boolean
adalah tipe enumerasi") diadopsi oleh kebanyakan bahasa kemudian yang
telah disebutkan jenis, seperti Modula , Ada dan Haskell .
C, C + +, Objective-C, AWK,
Perl
Implementasi
awal C bahasa (1972) tidak memberikan tipe Boolean, dan sampai hari ini
nilai-nilai Boolean biasanya diwakili oleh bilangan bulat ( int s) dalam
program C. Operator perbandingan (' > ',' == ', dll) didefinisikan untuk
mengembalikan integer ditandatangani ( int ) hasil, baik nol (untuk false) atau
1 (untuk true). Logical operator (' && ',' || '', ! ', dll) dan
kondisi-pengujian pernyataan (' if ',' while ') menganggap bahwa nol adalah palsu
dan semua nilai-nilai lain adalah benar. Satu masalah dengan pendekatan ini
adalah bahwa tes if(t==TRUE){...} dan if(t) tidak setara.
Setelah
tipe enumerated ( enum s) yang ditambahkan ke dalam versi ANSI C (1989), banyak
programmer C terbiasa mendefinisikan jenis Boolean mereka sendiri seperti itu,
karena alasan mudah dibaca. Namun, tipe enumerated yang setara dengan bilangan
bulat sesuai dengan standar bahasa, maka identitas yang efektif antara boolean
dan integer masih berlaku untuk program C.
Standard
C (sejak C99 ) dan beberapa dialek C seperti Objective-C memberikan definisi
dari tipe Boolean sebagai tipe integer dan macro untuk "palsu" dan
"benar" sebagai 0 dan 1, masing-masing. Dengan demikian nilai-nilai
logis dapat disimpan dalam variabel integer, dan digunakan di mana saja
bilangan bulat akan berlaku, termasuk dalam pengindeksan, aritmatika, parsing,
dan format. Pendekatan ini ("nilai-nilai Boolean hanya bilangan
bulat") telah dipertahankan dalam semua versi C.
C +
+ memiliki tipe data Boolean terpisah ( 'bool' ), tetapi dengan konversi
otomatis dari skalar dan pointer nilai-nilai yang sangat mirip dengan C.
Pendekatan ini diadopsi pula oleh banyak bahasa kemudian, terutama oleh
beberapa scripting yang seperti AWK .
Objective-C
juga memiliki tipe terpisah Boolean data ( 'BOOL' ), dengan nilai yang mungkin
menjadi YES atau NO , setara benar dan palsu masing-masing.
Perl
memiliki banyak nilai-nilai false : angka nol, string "0" dan
"", daftar kosong "()", dan nilai khusus undef . Segala
sesuatu yang lain mengevaluasi untuk true .
Python, Ruby, dan JavaScript
Dalam
Python dari versi 2.3 ke depan, ada bool jenis yang merupakan subclass dari int
, standar tipe integer. Ini memiliki dua kemungkinan nilai: True dan False
, yang "versi khusus" dari 1 dan 0 masing-masing dan berperilaku
seperti dalam konteks aritmatika. Selain itu, nilai numerik dari nol (integer
atau pecahan), nilai nol ( None ), kosong tali , dan kontainer kosong (yaitu
daftar , set , dll) dianggap Boolean false; semua nilai-nilai lain dianggap
Boolean benar dengan default. Kelas dapat menentukan bagaimana kasus mereka
diperlakukan dalam konteks Boolean melalui metode khusus __nonzero__ (Python 2)
atau __bool__ (Python 3). Untuk kontainer, __len__ (metode khusus untuk
menentukan panjang kontainer) digunakan jika metode konversi Boolean eksplisit
tidak didefinisikan.
Di
Ruby , di sisi lain, hanya nil (nilai null Ruby) dan khusus false obyek adalah
"false", segala sesuatu yang lain (termasuk integer 0 dan array
kosong) adalah "benar".
Dalam
JavaScript , string kosong ( "" ), null , undefined , NaN , 0, -0 dan
false kadang-kadang disebut "falsy", dan mereka melengkapi ,
"truthy", untuk membedakan antara ketat ketik diperiksa dan dipaksa
boolean. [10] Bahasa seperti PHP juga menggunakan pendekatan ini.
SQL
The
SQL: 1999 standar memperkenalkan tipe data Boolean sebagai fitur opsional
(T031). Bila dibatasi oleh NOT NULL kendala, SQL Boolean berperilaku seperti
boolean dalam bahasa lain. Dalam SQL Namun, tipe Boolean adalah nullable secara
default seperti semua tipe data SQL lain, yang berarti dapat memiliki khusus
nol nilai juga. Meskipun standar SQL mendefinisikan tiga literal Boolean untuk
tipe-TRUE, FALSE dan UNKNOWN-, ia juga mengatakan bahwa NULL Boolean dan
UNKNOWN "dapat digunakan secara bergantian berarti hal yang sama". Hal
ini menyebabkan beberapa kontroversi karena subjek identifikasi UNKNOWN dengan
kesetaraan aturan perbandingan untuk NULL. Lebih tepatnya UNKNOWN = UNKNOWN tidak
BENAR tapi UNKNOWN / NULL. Pada 2012 beberapa sistem SQL utama
mengimplementasikan fitur T031. [14] PostgreSQL adalah pengecualian, meskipun
tidak melaksanakan UNKNOWN literal, NULL dapat digunakan sebagai gantinya. (PostgreSQL
tidak menerapkan IS Operator UNKNOWN, yang merupakan bagian dari fitur
orthogonal, F571.) Dalam implementasi SQL lain berbagai solusi ad hoc yang digunakan,
seperti bit , byte , dan karakter untuk mensimulasikan nilai Boolean.
Tidak ada komentar:
Posting Komentar