อ่าน 10 นาที
ประเภทข้อมูลบูลีน
ใน วิทยาการคอมพิวเตอร์ บู ลีน (บางครั้งย่อว่า Bool ) เป็น ชนิดข้อมูล ที่มีค่าที่เป็นไปได้สองค่า (โดยปกติจะใช้สัญลักษณ์ true และ false ) ซึ่งมีจุดประสงค์เพื่อแสดง ค่าความจริง...
ประเภทข้อมูลบูลีน

ในวิทยาการคอมพิวเตอร์บูลีน (บางครั้งย่อว่าBool ) เป็นชนิดข้อมูลที่มีค่าที่เป็นไปได้สองค่า (โดยปกติจะใช้สัญลักษณ์trueและfalse ) ซึ่งมีจุดประสงค์เพื่อแสดงค่าความจริง สองค่า ของตรรกะและพีชคณิตบูลีนชื่อของมันตั้งตามชื่อของจอร์จ บูลผู้ซึ่งนิยามระบบตรรกะเชิงพีชคณิตเป็นครั้งแรกในช่วงกลางศตวรรษที่ 19 ชนิดข้อมูลบูลีนส่วนใหญ่เกี่ยวข้องกับ คำสั่ง เงื่อนไขซึ่งอนุญาตให้มีการกระทำที่แตกต่างกันโดยการเปลี่ยนการไหลของควบคุม ขึ้นอยู่กับว่า เงื่อนไขบูลีนที่โปรแกรมเมอร์กำหนดนั้น มีค่าเป็นจริงหรือเท็จ มันเป็นกรณีพิเศษของ ชนิดข้อมูลตรรกะทั่วไป— ตรรกะไม่จำเป็นต้องเป็นบูลีนเสมอไป (ดูตรรกะเชิงความน่าจะเป็น )
ทั่วไป
ในภาษาโปรแกรมที่มีชนิดข้อมูลบูลีนในตัว เช่นPascal , C , PythonหรือJavaตัวดำเนินการเปรียบเทียบเช่น `true` >และ `false` ≠มักจะถูกกำหนดให้ส่งคืนค่าบูลีน คำสั่ง แบบมีเงื่อนไขและแบบวนซ้ำสามารถกำหนดขึ้นเพื่อทดสอบนิพจน์ที่มีค่าเป็นบูลีนได้
ภาษาที่ไม่มีชนิดข้อมูลบูลีนโดยเฉพาะ เช่นC90และLispอาจยังคงแทนค่าความจริงด้วยชนิดข้อมูลอื่นCommon Lispใช้ลิสต์ ว่าง สำหรับค่าเท็จ และค่าอื่นใดสำหรับค่าจริง ภาษาโปรแกรม C ใช้ ชนิดข้อมูล จำนวนเต็มโดยที่นิพจน์เชิงสัมพันธ์ เช่นi > jและนิพจน์ตรรกะที่เชื่อมต่อด้วย&&และ||จะถูกกำหนดให้มีค่า 1 ถ้าเป็นจริงและ 0 ถ้าเป็นเท็จ ในขณะที่ส่วนทดสอบของif, while, for, เป็นต้น จะถือว่าค่าที่ไม่ใช่ศูนย์ใดๆ เป็นจริง[ 1 ] [ 2 ]อันที่จริง ตัวแปรบูลีนอาจถูกมองว่า (และนำไปใช้) เป็นตัวแปรตัวเลขที่มีเลขฐานสองหนึ่งหลัก ( บิต ) หรือเป็นสตริงบิตที่มีความยาวหนึ่ง ซึ่งสามารถเก็บค่าได้เพียงสองค่าเท่านั้น การนำบูลีนไปใช้ในคอมพิวเตอร์มักจะแสดงเป็นคำ เต็ม มากกว่าบิต ซึ่งโดยปกติแล้วเป็นเพราะวิธีการที่คอมพิวเตอร์ถ่ายโอนบล็อกข้อมูล
ภาษาโปรแกรมส่วนใหญ่ แม้แต่ภาษาที่ไม่มีประเภทบูลีนที่ระบุอย่างชัดเจน ก็รองรับการดำเนินการทางพีชคณิตบูลีน เช่นการเชื่อม ( AND, &, *) การแยก ( OR, |, +) ความเท่าเทียมกัน ( EQV, =, ==) การเลือก แบบพิเศษ /ไม่เท่าเทียมกัน ( XOR, NEQV, ^, !=, ¬) และการปฏิเสธ ( NOT, ~, !, ¬)
ในบางภาษา เช่นRuby , SmalltalkและAliceค่าtrueและfalseจะอยู่ในคลาส ที่แยกจากกัน เช่น true TrueและFalsefalse ตามลำดับ ดังนั้นจึงไม่มีประเภท Boolean เพียงประเภทเดียว
ในSQLซึ่งใช้ตรรกะสามค่าสำหรับการเปรียบเทียบแบบชัดเจนเนื่องจากการจัดการค่า Null เป็นพิเศษ ชนิดข้อมูล Boolean (ที่แนะนำในSQL:1999 ) จึงถูกกำหนดให้มีค่าความจริงมากกว่าสองค่า ดังนั้นBoolean ใน SQL จึงสามารถจัดเก็บค่าตรรกะทั้งหมดที่ได้จากการประเมินเงื่อนไขใน SQL ได้ อย่างไรก็ตาม คอลัมน์ชนิด Boolean สามารถจำกัดให้มีเพียงค่าความจริงสองค่าTRUEได้FALSE
การใช้งานเฉพาะภาษา
ALGOL และชนิดข้อมูล BOOLEAN ในตัว
หนึ่งในภาษาโปรแกรมแรกๆ ที่กำหนดBOOLEANชนิดข้อมูลอย่างชัดเจนคือALGOL 60 (ปี 1960) โดยมีค่าเป็น trueและfalseและตัวดำเนินการตรรกะที่ใช้สัญลักษณ์ ' ' (และ), ' ' (หรือ), ' ' (บ่งชี้), ' ' (ความเท่าเทียมกัน) และ ' ' (ไม่ใช่) อย่างไรก็ตาม เนื่องจากข้อจำกัดของอุปกรณ์ป้อนข้อมูลและชุดอักขระ ในคอมพิวเตอร์หลายเครื่องในสมัยนั้น คอมไพเลอร์ส่วนใหญ่จึงใช้การแสดงแทนแบบอื่นสำหรับตัว ดำเนิน การหลายตัว เช่นหรือAND'AND'
แนวทางนี้โดย ใช้ ประเภทข้อมูลBOOLEANในตัว (ไม่ว่าจะเป็นแบบดั้งเดิมหรือแบบกำหนดไว้ล่วงหน้า) ได้รับการนำไปใช้ในภาษาโปรแกรมหลายภาษาในภายหลัง เช่นSimula 67 (1967), ALGOL 68 (1970), [ 3 ] Pascal (1970), Ada (1980), Java (1995) และC# (2000) เป็นต้น
C, C++, D, Objective-C, AWK
การเขียนโปรแกรมภาษาC ในยุคแรก (ปี 1972) ไม่ได้มีชนิดข้อมูลบูลีน และจนถึงปัจจุบัน ค่าบูลีนมักจะถูกแทนด้วยจำนวนเต็ม ( intint) ในโปรแกรมภาษา C ตัวดำเนินการเปรียบเทียบ (เช่น>, ==, เป็นต้น) ถูกกำหนดให้ส่งคืนintผลลัพธ์เป็นจำนวนเต็มที่มีเครื่องหมาย (signed integer) คือ 0 (สำหรับเท็จ) หรือ 1 (สำหรับจริง) ตัวดำเนินการตรรกะ (เช่น&&, ||, !, เป็นต้น) และคำสั่งทดสอบเงื่อนไข ( เช่น if, while) ถือว่าศูนย์ (และด้วยเหตุนี้ตัวชี้ NULLหรือตัวจบสตริงว่าง '\0' ด้วย) เป็นเท็จ และค่าอื่นๆ ทั้งหมดเป็นจริง
หลังจากที่ชนิดข้อมูลแบบแจงนับ ( enumerated types enum) ถูกเพิ่มเข้าไปในภาษาซีเวอร์ชันของสถาบันมาตรฐานแห่งชาติอเมริกัน หรือ ANSI C (1989) โปรแกรมเมอร์ภาษาซีหลายคนจึงคุ้นเคยกับการกำหนดชนิดข้อมูลบูลีนของตนเองในลักษณะดังกล่าว เพื่อความอ่านง่าย อย่างไรก็ตาม ตามมาตรฐานของภาษา ชนิดข้อมูลแบบแจงนับนั้นเทียบเท่ากับจำนวนเต็ม ดังนั้นความเหมือนกันโดยปริยายระหว่างบูลีนและจำนวนเต็มจึงยังคงใช้ได้กับโปรแกรมภาษาซี
ภาษา Cมาตรฐาน(ตั้งแต่C99 ) มีชนิดข้อมูลบูลีน เรียกว่า `Boolean` _Boolตั้งแต่C23เป็นต้นมา บูลีนเป็นชนิดข้อมูลหลักที่เรียกว่า `Boolean` boolโดยมีค่าเป็น `true` trueและ `true` false(ก่อนหน้านี้ค่าเหล่านี้ได้มาจากมาโครในไฟล์เฮดเดอร์stdbool.h`<True>` ซึ่งปัจจุบันล้าสมัยแล้ว) ภาษา C รับประกันว่าค่า `true` สองค่าใดๆ จะเปรียบเทียบกันได้เท่ากัน (ซึ่งเป็นไปไม่ได้ก่อนที่จะมีการแนะนำชนิดข้อมูลนี้) ค่าบูลีนยังคงทำงานเหมือนจำนวนเต็ม สามารถเก็บไว้ในตัวแปรจำนวนเต็ม และใช้ได้ทุกที่ที่จำนวนเต็มถูกต้อง รวมถึงในการทำดัชนี การคำนวณทางคณิตศาสตร์ การแยกวิเคราะห์ และการจัดรูปแบบ แนวทางนี้ ( ค่าบูลีนก็คือจำนวนเต็ม ) ได้รับการรักษาไว้ในเวอร์ชันต่อๆ มาของภาษา C โปรดทราบว่านี่ไม่ได้หมายความว่าค่าจำนวนเต็มใดๆ ก็สามารถเก็บไว้ในตัวแปรบูลีนได้
ภาษา C++มีชนิดข้อมูลบูลีนมาboolตั้งแต่C++98 แล้วแต่มีการแปลงค่าอัตโนมัติจากค่าสเกลาร์และค่าพอยเตอร์ที่คล้ายคลึงกับภาษา C มาก แนวทางนี้ถูกนำไปใช้ในภาษาโปรแกรมรุ่นหลังๆ อีกหลายภาษา โดยเฉพาะอย่างยิ่งในภาษาสคริปต์ บาง ภาษา เช่นAWK
ภาษาโปรแกรม Dมีชนิดข้อมูลบูลีนที่ถูกต้อง ชนิดข้อมูลboolนี้boolมีขนาดหนึ่งไบต์และสามารถเก็บค่าได้เพียง true หรือ false เท่านั้น ตัวดำเนินการเพียงอย่างเดียวที่สามารถรับตัวถูกดำเนินการชนิดบูลีนได้คือ: &, |, ^, &=, |=, ^=, !, &&, ||และ?:ค่าสามารถแปลงเป็นชนิดข้อมูลจำนวนเต็มใดๆ ได้โดยปริยาย โดย false จะกลายเป็น 0 และ true จะกลายเป็น 1 ตัวเลข 0 และ 1 สามารถแปลงเป็นค่าบูลีน false และ true ได้โดยปริยาย การแปลงนิพจน์เป็นบูลีนหมายถึงการตรวจสอบค่า 0 หรือ!=0สำหรับชนิดข้อมูลทางคณิตศาสตร์ และค่า nullหรือ!=nullสำหรับตัวชี้หรือการอ้างอิง boolbool
Objective-Cยังมีชนิดข้อมูลบูลีนแยกต่างหากBOOLโดยมีค่าที่เป็นไปได้คือYESหรือNOซึ่งเทียบเท่ากับค่าจริงและเท็จตามลำดับ[ 4 ]นอกจากนี้ ในคอมไพเลอร์ Objective-C ที่รองรับ C99 สามารถใช้ชนิดของ C _Boolได้ เนื่องจาก Objective-C เป็นซูเปอร์เซ็ตของ C
ไปข้างหน้า
ภาษาโปรแกรม Forthไม่มีประเภทบูลีน แต่ใช้จำนวนเต็มปกติ: ค่า 0 (บิตทั้งหมดต่ำ) แทนค่าเท็จ และ -1 (บิตทั้งหมดสูง) แทนค่าจริง ซึ่งทำให้ภาษาสามารถกำหนดตัวดำเนินการตรรกะได้เพียงชุดเดียว แทนที่จะเป็นชุดหนึ่งสำหรับการคำนวณทางคณิตศาสตร์และอีกชุดหนึ่งสำหรับเงื่อนไข[ 5 ]
ฟอร์ทราน
FORTRANเวอร์ชันแรก(1957) และFORTRAN II (1958) ซึ่งเป็นเวอร์ชันต่อมา ไม่มีค่าหรือการดำเนินการเชิงตรรกะ แม้แต่IFคำสั่งเงื่อนไขก็ยังรับนิพจน์ทางคณิตศาสตร์และแยกไปยังหนึ่งในสามตำแหน่งตามเครื่องหมาย ดูIF ทางคณิตศาสตร์อย่างไรก็ตาม FORTRAN IV (1962) ได้ปฏิบัติตามตัวอย่างของ ALGOL 60 โดยให้ชนิดข้อมูลบูลีน ( LOGICAL), ตัวอักษรความจริง ( .TRUE.และ.FALSE.), IFคำสั่งเชิงตรรกะ, ตัวดำเนินการเปรียบเทียบตัวเลขที่มีค่าเป็นบูลีน ( .EQ., .GT., เป็นต้น) และตัวดำเนินการเชิงตรรกะ ( .AND., .OR., และ.NOT.) ในFORMATคำสั่ง จะมีตัวอธิบายรูปแบบเฉพาะ (' L') สำหรับการแยกวิเคราะห์หรือการจัดรูปแบบของค่าเชิงตรรกะ ส่วนขยายทั่วไปก่อนFORTRAN 77คือการขยาย ตัวดำเนินการ .EQ.และ.NE.หรืออาจเพิ่ม.XOR.ตัวดำเนินการสำหรับการเปรียบเทียบนิพจน์บูลีน[ 6 ] Fortran 77 ได้เพิ่ม ตัวดำเนินการ .EQV.และ.NEQV.เพื่อทำให้การดำเนินการเป็นมาตรฐาน Fortran 90 เพิ่มตัวดำเนินการเปรียบเทียบทางเลือก<ได้แก่ , <=, ==, /=, >, และ>=.
ชวา
ในJavaค่าของbooleanชนิดข้อมูลสามารถเป็นได้เพียงอย่างใดอย่างtrueหนึ่งfalseเท่านั้น[ 7 ]
ความสามัคคี
ในUnityค่าของตัวแปรboolean(หรือที่เรียกว่า bool) สามารถเป็นได้ทั้ง true trueหรือ false falseและใช้ในการเขียนสคริปต์
ลิสป์และสเคป
ภาษาLisp (ปี 1958) ไม่เคยมีชนิดข้อมูลบูลีนในตัว แต่โครงสร้างเงื่อนไขต่างๆ เช่นcondจะถือว่าค่าตรรกะเท็จนั้นแทนด้วยลิสต์ว่าง()ซึ่งถูกกำหนดให้เหมือนกับอะตอมพิเศษnilหรือ ; ในขณะที่ นิพจน์ sNILอื่นๆจะถูกตีความว่าเป็นจริงเพื่อความสะดวก ภาษา Lisp สมัยใหม่ส่วนใหญ่จึงกำหนดค่าอะตอมให้มีค่าเป็นเพื่อให้สามารถใช้เป็นสัญลักษณ์ช่วยจำสำหรับค่า จริงได้ttt
แนวทางนี้ ( ค่าใดๆ ก็สามารถใช้เป็นค่าบูลีนได้ ) ได้รับการรักษาไว้ในภาษา Lisp ส่วนใหญ่ ( Common Lisp , Scheme , Emacs Lisp ) และรูปแบบที่คล้ายกันนี้ได้รับการนำไปใช้โดยภาษาสคริปต์ หลายภาษา แม้แต่ภาษาที่มีประเภทบูลีนหรือค่าบูลีนที่แตกต่างกันก็ตาม แม้ว่าค่าใดจะถูกตีความว่าเป็นเท็จและค่าใดเป็นจริงจะแตกต่างกันไปในแต่ละภาษา ตัวอย่างเช่น ใน Scheme ค่า เท็จเป็นอะตอมที่แตกต่างจากรายการว่าง ดังนั้นรายการว่างจึงถูกตีความว่าเป็นจริงในทางกลับกัน Common Lisp ยังมีbooleanประเภทเฉพาะที่ได้มาจากการกำหนดสัญลักษณ์เฉพาะอีก ด้วย [ 8 ]
ปาสคาล, เอดา และ ฮัสเคลล์
ภาษาPascal (1970) ทำให้แนวคิดของประเภทข้อมูลแบบแจงนับที่กำหนดโดยโปรแกรมเมอร์เป็นที่นิยม ซึ่งก่อนหน้านี้มีให้ใช้ในรูปแบบที่แตกต่างกันในCOBOL , FACTและJOVIAL จากนั้นจึงมีการกำหนดประเภทข้อมูล พื้นฐานBooleanเป็นประเภทข้อมูลแบบแจงนับที่กำหนดไว้ล่วงหน้าโดยมีค่าเป็นFALSEและTRUEตามคำจำกัดความ การเปรียบเทียบ การดำเนินการทางตรรกะ และคำสั่งเงื่อนไขทั้งหมดที่ใช้กับ และ/หรือให้Booleanค่าเป็น มิเช่นนั้นBooleanประเภทข้อมูลนี้จะมีคุณสมบัติทั้งหมดที่มีให้สำหรับประเภทข้อมูลแบบแจงนับโดยทั่วไป เช่น การเรียงลำดับและการใช้เป็นดัชนี ในทางตรงกันข้าม การแปลงระหว่างBooleanและจำนวนเต็ม (หรือประเภทอื่นๆ) ยังคงต้องใช้การทดสอบอย่างชัดเจนหรือการเรียกใช้ฟังก์ชัน เช่นเดียวกับใน ALGOL 60 แนวทางนี้ ( Boolean เป็นประเภทข้อมูลแบบแจงนับ ) ถูกนำไปใช้โดยภาษาอื่นๆ ส่วนใหญ่ในภายหลังที่มีประเภทข้อมูลแบบแจง นับ เช่นModula , AdaและHaskell
เพิร์ลและลัว
Perlไม่มีชนิดข้อมูลบูลีน แต่ค่าใดๆ ก็สามารถทำงานเหมือนบูลีนได้ในบริบทของบูลีน (เงื่อนไขของคำสั่งifor , อาร์กิวเมนต์ของ or เป็นต้น) ตัวเลขสตริงและรายการว่างและค่าพิเศษจะมีค่าเป็นเท็จ[ 9 ]ส่วนที่เหลือจะมีค่าเป็นจริง while&&||0"0"""()undef
ภาษา Luaมีชนิดข้อมูลบูลีน แต่ค่าที่ไม่ใช่บูลีนก็สามารถทำงานเหมือนบูลีนได้เช่นกัน ค่าที่ไม่ใช่บูลีnilนจะมีค่าเป็นเท็จ ในขณะที่ค่าชนิดข้อมูลอื่นๆ จะมีค่าเป็นจริง ซึ่งรวมถึงสตริงว่าง""และตัวเลข0ซึ่งมักถูกพิจารณาfalseในภาษาโปรแกรมอื่นๆ
พีแอล/ไอ
PL/Iไม่มีชนิดข้อมูลบูลีน แต่ตัวดำเนินการเปรียบเทียบจะสร้างค่า BIT(1) แทน โดย '0'B แทนค่าเท็จและ '1'B แทนค่าจริง ตัวถูกดำเนิน การ เช่น , &, |, ¬จะถูกแปลงเป็นสตริงบิต และการดำเนินการจะถูกกระทำกับแต่ละบิตนิพจน์องค์ประกอบของIFคำสั่งจะเป็นจริงหากบิตใดบิตหนึ่งเป็น 1
ไพธอนและรูบี้
Pythonตั้งแต่เวอร์ชัน 2.3 เป็นต้นไป มีboolชนิดข้อมูลที่เป็นคลาสย่อยของintชนิดข้อมูลจำนวนเต็มมาตรฐาน[ 10 ]มีค่าที่เป็นไปได้สองค่าคือTrueและFalseซึ่งเป็นเวอร์ชันพิเศษของ 1 และ 0 ตามลำดับ และมีพฤติกรรมเช่นนั้นในบริบททางคณิตศาสตร์ นอกจากนี้ ค่าตัวเลขศูนย์ (จำนวนเต็มหรือเศษส่วน) ค่าว่าง (null None) สตริงว่าง และคอนเทนเนอร์ว่าง (รายการเซตฯลฯ) ถือว่าเป็นค่าบูลีนเท็จ ค่าอื่นๆ ทั้งหมดถือว่าเป็นค่าบูลีนจริงโดยค่าเริ่มต้น[ 11 ]คลาสสามารถกำหนดวิธีการจัดการอินสแตนซ์ในบริบทบูลีนผ่านเมธอดพิเศษ__nonzero__(Python 2) หรือ__bool__(Python 3) สำหรับคอนเทนเนอร์__len__จะใช้ (เมธอดพิเศษสำหรับกำหนดความยาวของคอนเทนเนอร์) หากไม่ได้กำหนดเมธอดการแปลงบูลีนอย่างชัดเจน
ในภาษา Rubyนั้น มีเพียงnilค่า null (ค่าว่างในภาษา Ruby) และfalseอ็อบเจ็กต์พิเศษบางอย่างเท่านั้นที่เป็นเท็จ ส่วนค่าอื่นๆ ทั้งหมด (รวมถึงจำนวนเต็ม 0 และอาร์เรย์ว่าง) จะเป็น จริง
เร็กซ์
Rexxไม่มีชนิดข้อมูลบูลีน แต่ตัวดำเนินการเปรียบเทียบจะสร้างค่า 0 หรือ 1 โดย 0 แทนค่าเท็จและ 1 แทนค่าจริงตัวถูกดำเนินการของ เช่น , &, |, ¬ต้องเป็น 0 หรือ 1 เท่านั้น
คำสั่ง SQL
ค่าบูลีนปรากฏใน SQL เมื่อ ต้องการ เงื่อนไขเช่น ใน ส่วน WHEREในรูปแบบของ述语 (predicate) ซึ่งสร้างขึ้นโดยใช้ตัวดำเนินการต่างๆ เช่น ตัวดำเนินการเปรียบเทียบ ตัว ดำเนินการ INตัวดำเนินการIS (NOT) NULLเป็นต้น อย่างไรก็ตาม นอกเหนือจากTRUEและFALSEแล้ว ตัวดำเนินการเหล่านี้ยังสามารถให้ค่าสถานะที่สามที่เรียกว่าUNKNOWN ได้ เมื่อ ทำการ เปรียบเทียบNULL
มาตรฐาน SQL92 ได้แนะนำ ตัวดำเนินการ IS (NOT) TRUE, IS (NOT) FALSEและIS (NOT) UNKNOWNซึ่งใช้ประเมินเงื่อนไข ซึ่งมีมาก่อนการแนะนำชนิดข้อมูลบูลีนในSQL: 1999
มาตรฐาน SQL:1999 ได้แนะนำ ชนิดข้อมูล BOOLEANเป็นคุณสมบัติเสริม (T031) เมื่อถูกจำกัดด้วย ข้อจำกัด NOT NULL ชนิดข้อมูล BOOLEANใน SQL จะทำงานเหมือนกับ Boolean ในภาษาอื่นๆ ซึ่งสามารถเก็บค่าได้เฉพาะTRUEและFALSE เท่านั้น อย่างไรก็ตาม หากเป็นค่าที่อนุญาตให้เป็น null ซึ่งเป็นค่าเริ่มต้นเหมือนกับชนิดข้อมูล SQL อื่นๆ ทั้งหมด ก็สามารถมีค่า null พิเศษได้เช่นกัน แม้ว่ามาตรฐาน SQL จะกำหนดค่าตัวอักษร สามค่า สำหรับชนิดข้อมูลBOOLEAN ได้แก่ TRUE, FALSEและUNKNOWNแต่ก็ยังระบุว่าNULL BOOLEANและUNKNOWN "อาจใช้แทนกันได้เพื่อหมายถึงสิ่งเดียวกัน" [ 12 ] [ 13 ]สิ่งนี้ทำให้เกิดข้อโต้แย้งบางประการเนื่องจากการระบุตัวตนทำให้ UNKNOWNอยู่ภายใต้กฎการเปรียบเทียบความเท่าเทียมกันสำหรับ NULL กล่าวคือไม่ใช่TRUEแต่เป็น UNKNOWN/NULL [ 14 ] ณปี 2012 มีระบบ SQL หลักเพียงไม่กี่ระบบที่ใช้คุณสมบัติ T031 [ 15 ] Firebird และPostgreSQLเป็นข้อยกเว้นที่น่าสนใจ แม้ว่า PostgreSQL จะไม่ได้ใช้ตัวอักษรUNKNOWN ก็ตาม สามารถใช้แทนได้[ 16 ]UNKNOWN = UNKNOWNNULL
วิธีการจัดการค่าบูลีนแตกต่างกันไปในแต่ละระบบ SQL
ตัวอย่างเช่น ในMicrosoft SQL Serverค่าบูลีนไม่ได้รับการสนับสนุนเลย ไม่ว่าจะเป็นในฐานะชนิดข้อมูลเดี่ยวๆ หรือในรูปแบบจำนวนเต็ม หากใช้คอลัมน์โดยตรงในส่วนWHERE เช่น `boolean_type` จะแสดงข้อความแสดงข้อผิดพลาด "An expression of non-Boolean type specified in the context where a condition is expected" ในขณะที่คำสั่งเช่น ` boolean_type` จะทำให้เกิดข้อผิดพลาดทางไวยากรณ์ ชนิดข้อมูล BITซึ่งสามารถเก็บได้เฉพาะจำนวนเต็ม 0 และ 1 นอกเหนือจากNULLมักใช้เป็นวิธีแก้ปัญหาเพื่อเก็บค่าบูลีน แต่จำเป็นต้องใช้วิธีการแปลงระหว่างจำนวนเต็มและนิพจน์บูลีน SELECTaFROMtWHEREaSELECTcolumnISNOTNULLFROMtUPDATEtSETflag=IIF(colISNOTNULL,1,0)WHEREflag=0
Microsoft Accessซึ่งใช้Access Database Engine (ACE/JET) [ 17 ]ก็ไม่มีชนิดข้อมูล Boolean เช่นกัน คล้ายกับ MS SQL Server แต่ใช้ชนิดข้อมูลBIT [ 18 ]ใน Access เรียกว่าชนิดข้อมูล Yes/No [ 19 ]ซึ่งสามารถมีได้สองค่า คือ Yes (จริง) หรือ No (เท็จ) ชนิดข้อมูล BIT ใน Access ยังสามารถแสดงเป็นตัวเลขได้ด้วย คือ True คือ −1 และ False คือ 0 [ 20 ] ซึ่งแตกต่างจาก MS SQL Server ในสองประการ แม้ว่าทั้งสองจะเป็นผลิตภัณฑ์ของ Microsoft เหมือนกันก็ตาม:
- Access แสดงค่า TRUEเป็น −1 ในขณะที่ SQL Server แสดงค่าเป็น 1
- Access ไม่รองรับสถานะ Null tri-state ซึ่งเป็นสถานะที่ SQL Server รองรับ
PostgreSQLมี ประเภท BOOLEAN ที่แตกต่างกัน ตามมาตรฐาน[ 21 ]ซึ่งอนุญาตให้จัดเก็บเงื่อนไขลงใน คอลัมน์ BOOLEAN โดยตรง และอนุญาตให้ใช้ คอลัมน์ BOOLEANเป็นเงื่อนไขโดยตรงในข้อความ WHERE
ในMySQLบูลีนถือเป็นนามแฝงของ; [ 22 ] TRUEเหมือนกับจำนวนเต็ม 1 และFALSEเหมือนกับจำนวนเต็ม 0 [ 23 ] จำนวนเต็มใดๆ ที่ไม่ใช่ศูนย์ถือเป็นจริงในเงื่อนไข TINYINT(1)
ฉาก
Tableau Softwareมีชนิดข้อมูล BOOLEAN [ 24 ]ค่าตัวอักษรของค่าบูลีนคือTrueหรือ[ 25 ]False
ฟังก์ชัน Tableau INT()จะแปลงค่าบูลีนเป็นตัวเลข โดยส่งค่า 1 กลับมาสำหรับค่าจริง และ 0 กลับมาสำหรับค่าเท็จ[ 26 ]
ทีซีแอล
Tclไม่มีประเภทบูลีนแยกต่างหาก เช่นเดียวกับในภาษา C จะใช้จำนวนเต็ม 0 (เท็จ) และ 1 (จริง—ที่จริงคือจำนวนเต็มที่ไม่ใช่ศูนย์ใดๆ) [ 27 ]
ตัวอย่างการเขียนโค้ด:
ตั้งค่า v เป็น 1 ถ้า{ $v } { แสดงข้อความ"V เป็น 1 หรือ true" }ข้างต้นจะแสดงให้เห็นV คือ 1 หรือจริงเนื่องจากนิพจน์ดังกล่าวมีค่าเท่ากับ 1
ตั้งค่า v "" ถ้า{ $v } .... โค้ดข้างต้นจะทำให้เกิดข้อผิดพลาด เนื่องจากตัวแปรvไม่สามารถประเมินค่าเป็น 0 หรือ 1 ได้
ทรูธี่
ในบางภาษาโปรแกรมนิพจน์ ใดๆ ก็สามารถประเมินค่าได้ในบริบทที่คาดหวังข้อมูลประเภทบูลีน โดยทั่วไป (แม้ว่าจะแตกต่างกันไปตามภาษาโปรแกรม) นิพจน์เช่นเลขศูนย์สตริงว่างรายการว่าง และค่าว่าง (null) จะถูกมองว่าเป็นเท็จ และสตริงที่มีเนื้อหา (เช่น "abc") ตัวเลขอื่นๆ และออบเจ็กต์จะถูกประเมินค่าเป็นจริง บางครั้งกลุ่มของนิพจน์เหล่านี้เรียกว่า เท็จ (falsy) และ จริง (truthy) ตัวอย่างเช่น ในภาษาLisp ค่า nilซึ่งเป็นรายการว่าง จะถูกมองว่าเป็นเท็จ และค่าอื่นๆ ทั้งหมดจะถูกมองว่าเป็นจริง ในภาษา Cเลข 0 หรือ 0.0 เป็นเท็จ และค่าอื่นๆ ทั้งหมดจะถูกมองว่าเป็นจริง
ในJavaScriptสตริงว่าง ( ""), null, undefined, NaN, +0, −0และfalse[ 28 ]บางครั้งเรียกว่าค่าเท็จ (ซึ่งส่วนเติมเต็มคือค่าจริง ) เพื่อแยกความแตกต่างระหว่าง ค่าบูลีน ที่ตรวจสอบประเภท อย่างเคร่งครัด และ ค่าบูลีน ที่แปลงแล้ว (ดูเพิ่มเติม: ไวยากรณ์ JavaScript#การแปลงประเภท ) [ 29 ]ตรงกันข้ามกับ Python คอนเทนเนอร์ว่าง (อาร์เรย์ แผนที่ ชุด) ถือว่าเป็นค่าจริง ภาษาต่างๆ เช่นPHPก็ใช้วิธีนี้เช่นกัน
ดูเพิ่มเติม
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ประเภทข้อมูลบูลีน
ใน วิทยาการคอมพิวเตอร์ บู ลีน (บางครั้งย่อว่า Bool ) เป็น ชนิดข้อมูล ที่มีค่าที่เป็นไปได้สองค่า (โดยปกติจะใช้สัญลักษณ์ true และ false ) ซึ่งมีจุดประสงค์เพื่อแสดง ค่าความจริง...
ทั่วไป
ใน ภาษาโปรแกรม ที่มีชนิดข้อมูลบูลีนในตัว เช่น Pascal , C , Python หรือ Java ตัว ดำเนินการเปรียบเทียบ เช่น `true` > และ `false` ≠ มักจะถูกกำหนดให้ส่งคืนค่าบูลีน คำสั่ง แบบมีเงื่อนไข และ แบบวนซ้ำ สามารถกำหนดขึ้นเพื่อทดสอบนิพจน์ที่มีค่าเป็นบูลีนได้
ALGOL และชนิดข้อมูล BOOLEAN ในตัว
หนึ่งในภาษาโปรแกรมแรกๆ ที่กำหนด BOOLEAN ชนิดข้อมูลอย่างชัดเจนคือ ALGOL 60 (ปี 1960) โดยมีค่า เป็น true และ false และตัวดำเนินการตรรกะที่ใช้สัญลักษณ์ ' ' (และ), ' ' (หรือ), ' ' (บ่งชี้), ' ' (ความเท่าเทียมกัน) และ ' ' (ไม่ใช่) อย่างไรก็ตาม...
C, C++, D, Objective-C, AWK
การเขียนโปรแกรมภาษา C ในยุคแรก (ปี 1972) ไม่ได้มีชนิดข้อมูลบูลีน และจนถึงปัจจุบัน ค่าบูลีนมักจะถูกแทนด้วยจำนวนเต็ม ( int int) ในโปรแกรมภาษา C ตัวดำเนินการเปรียบเทียบ (เช่น > , == , เป็นต้น) ถูกกำหนดให้ส่งคืน int ผลลัพธ์เป็นจำนวนเต็มที่มีเครื่องหมาย (signed...