Senin, 16 Desember 2013

Boolean tipe data


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