부울 데이터 유형
Boolean data type컴퓨터 과학에서 부울(Boolean, 때로는 Bool로 단축됨)은 논리학과 부울대수의 두 가지 진리 값을 나타내기 위한 두 가지 가능한 값(보통 참과 거짓으로 표시됨) 중 하나를 가진 데이터 유형이다.19세기 중반에 처음으로 논리학의 대수학 체계를 정의한 조지 불(George Boole)의 이름을 따서 지은 것이다.부울 데이터 유형은 주로 프로그래머가 지정한 부울 조건이 참인지 거짓인지에 따라 제어 흐름을 변경하여 다른 작업을 허용하는 조건문과 연관된다.이것은 좀 더 일반적인 논리 데이터 유형의 특별한 경우(확률론적 논리 참조)—논리가 항상 Boolean일 필요는 없다.
제너럴리티스
Pascal 및 Java와 같이 부울 데이터 유형이 내장된 프로그래밍 언어에서 다음과 같은 비교 연산자>
그리고≠
일반적으로 부울 값을 반환하도록 정의된다.조건부 및 반복 명령을 정의하여 부울 값 식을 테스트할 수 있다.
C90 및 Lisp와 같이 명시적 부울 데이터 유형이 없는 언어는 여전히 일부 다른 데이터 유형에 의한 진실 값을 나타낼 수 있다.Common Lisp은 false에 빈 리스트를 사용하고 true에 다른 값을 사용한다.C 프로그래밍 언어는 다음과 같은 관계식 표현에서 정수 유형을 사용한다.i > j
그리고 논리적인 표현들은&&
그리고
test parts는 true일 경우 값 1을, false일 경우 0을 가지는 것으로 정의된다. 반면에 테스트 부분은if
,while
,for
, 등, 0이 아닌 값을 참으로 처리한다.[1][2]실제로 부울 변수는 1개의 이진수(비트)를 가진 숫자 변수 또는 두 개의 값만 저장할 수 있는 길이 1의 비트 문자열로 간주(및 구현)할 수 있다.컴퓨터에서의 불레앙의 구현은 대부분 컴퓨터가 정보의 블록을 전송하는 방식에서 기인하는 것이 아니라 완전한 단어로 표현된다.
대부분의 프로그래밍 언어, 심지어 명시적 부울 유형이 없는 언어들도 접속사 ()와 같은 부울 대수 연산을 지원한다.AND
,&
,*
), 분리 (OR
,
,+
), 등가(등가)EQV
,=
,==
), 배타적 또는/비배타적 (XOR
,NEQV
,^
,!=
,¬
(), 그리고 부정(-)NOT
,~
,!
,¬
).
루비, 스몰토크, 앨리스와 같은 몇몇 언어에서 참된 가치와 거짓된 가치는 분리된 계급에 속한다.True
그리고False
각각 하나의 부울 유형이 없다.
Nulls에 대한 특별 취급 때문에 명시적 비교를 위해 3개의 값 논리를 사용하는 SQL에서, 부울 데이터 유형(SQL:1999에 소개)도 3개 이상의 진리 값을 포함하도록 정의되어 있어 SQL Booleans가 SQL의 술어 평가에 따른 모든 논리적 값을 저장할 수 있다.부울 유형의 열은 다음과 같이 제한될 수 있다.TRUE
그리고FALSE
그래도
ALGOL 및 기본 제공 부울 유형
One of the earliest programming languages to provide an explicit boolean data type is ALGOL 60 (1960) with values true and false and logical operators denoted by symbols '' (and), '' (or), '' (implies), '' (equivalence), 및 ' ' (not).그러나 당시의 많은 컴퓨터에 대한 입력 장치와 문자 집합 제한 때문에, 대부분의 컴파일러는 다음과 같은 많은 연산자를 위해 대체 표현을 사용했다.AND
또는'AND'
.
부울이 내장된 (원시적이거나 다른 사전 정의된) 데이터 유형으로 이루어진 이 접근법은 다른 언어들 중에서도 Simula 67 (1967), ALGOL 68 (1970),[3] Pascal (1970), Ada (1980), Java (1995), C# (2000)과 같은 많은 후기 프로그래밍 언어에 의해 채택되었다.
포트란
FORTRAN의 첫 번째 버전(1957)과 그 후속 버전인 FORTRAN II(1958)는 논리적 값이나 연산이 없으며, 조건부 조차도 없다.IF
문장은 부울 데이터 유형(Boolean data type)을 제공하여 ALGOL 60의 예에 따라 부호에 따라 산술 식을 취하고 부호에 따라 세 위치 중 하나로 분기한다. 그러나 산술 IF. FORTRAN IV(1962)를 참조한다.LOGICAL
)), 진실 리터럴 (Luth Literals).TRUE.
그리고.FALSE.
)), 부울 값 숫자 비교 연산자 (.EQ.
,.GT.
, 등), 그리고 논리 연산자 (등).NOT.
,.AND.
,.OR.
. in.FORMAT
문장, 특정 형식 설명자(')L
')는 논리적 값의 구문 분석 또는 서식을 위해 제공된다.[4]
리스프 앤 스킴
Lisp(1958) 언어는 부울 데이터 유형이 내장되어 있지 않다.대신 다음과 같은 조건부 구성cond
논리적 값이 false로 빈 리스트에 표시된다고 가정하다.()
, 이것은 특수 원자와 동일하다고 정의된다.nil
또는NIL
; 반면에 다른 s-값은 참으로 해석된다.편의상, 대부분의 현대적인 Lisp 방언들은 원자를 사전 정의한다.t
가치가 있다t
하도록t
진실의 니모닉 표기법으로 사용될 수 있다.
이 접근법(모든 값을 부울 값으로 사용할 수 있음)은 대부분의 Lisp 사투리(Common Lisp, Scheme, Emacs Lisp)에서 유지되었으며, 유사한 모델은 많은 스크립팅 언어에 의해 채택되었으며, 심지어 부울 유형 또는 부울 값이 구별되는 경우도 있었다. 이 값은 거짓으로 해석되고 언어에 따라 참이 다르지만 말이다.예를 들어 Scheme에서 false 값은 빈 리스트와 구별되는 원자이므로, 후자는 true로 해석된다.반면에 Common Lisp은 또한 전용을 제공한다.boolean
기호의 전문화로 파생된 유형.[5]
파스칼, 에이다, 하스켈
Pascal(1970년) 언어는 프로그래머 정의 열거형의 개념을 도입했다.빌트인Boolean
그런 다음 데이터 유형을 값이 있는 미리 정의된 열거형 형식으로 제공했다.FALSE
그리고TRUE
. 정의에 따라 모든 비교, 논리 연산 및 조건문을 적용 및/또는 산출했다.Boolean
가치그렇지 않으면 더Boolean
형식은 주문 및 인덱스로 사용하는 것과 같이 일반적으로 열거된 형식에 사용할 수 있는 모든 시설을 가지고 있었다.대조적으로, 변환Boolean
s 및 정수(또는 다른 유형)는 여전히 ALGOL 60에서와 같이 명시적 시험이나 함수 호출을 필요로 했다.이 접근법(Boolean은 열거형이다)은 모둘라, 에이다, 하스켈과 같이 열거형들을 가진 대부분의 후기 언어들에 의해 채택되었다.
C, C++, 목표-C, AWK
언어 C(1972)의 초기 구현은 부울 유형을 제공하지 않았으며, 오늘날까지 부울 값은 일반적으로 정수로 표현된다.int
s) C 프로그램에서.비교 연산자 (>
,==
, 등)은 서명된 정수(등)를 반환하도록 정의된다.int
) 결과, 0(거짓의 경우) 또는 1(참의 경우) 중 하나.논리 연산자(&&
,
,!
, 등) 및 상태-상태-표시 문(등)if
,while
)은 0이 거짓이고 다른 모든 값이 참이라고 가정한다.
열거된 유형 이후(enum
s)는 미국 국립표준연구소 버전의 ANSI C(1989)에 추가되었고, 많은 C 프로그래머들은 가독성 이유로 그들 자신의 부울 유형을 정의하는 데 익숙해졌다.그러나 열거된 형식은 언어 표준에 따른 정수와 동등하다. 따라서 불레앙과 정수 사이의 효과적인 정체성은 여전히 C 프로그램에 유효하다.
표준 C(C99 이후)는 부울 유형을 제공하며, 부울 유형은 다음과 같다._Bool
. 머리글 포함stdbool.h
보다 직관적인 이름을 사용할 수 있다.bool
그리고 상수true
그리고false
. 언어는 어떤 두 개의 참된 가치도 동등하게 비교될 것을 보장한다(유형의 도입 전에는 달성할 수 없었다).부울 값은 여전히 정수로 작동하고 정수 변수에 저장할 수 있으며 인덱싱, 산술, 구문 분석 및 형식을 포함하여 정수가 유효할 모든 곳에서 사용된다.이 접근법(부울 값은 정수에 불과하다)은 모든 이후 버전의 C에서 유지되었다.이는 어떤 정수 값도 부울 변수에 저장할 수 있다는 것을 의미하지는 않는다는 점에 유의하십시오.
C++에는 별도의 부울 데이터 유형이 있음bool
그러나 C의 값과 매우 유사한 스칼라 및 포인터 값으로부터의 자동 변환.이 접근법은 특히 AWK와 같은 일부 스크립팅 언어에 의해서도 채택되었다.
목표-C에는 별도의 부울 데이터 유형도 있음BOOL
, 가능한 값 포함YES
또는NO
, 각각 참과 거짓의 등가물.[6]또한 C99를 지원하는 Objective-C 컴파일러에서는 C가_Bool
목표-C는 C의 상위 집합이기 때문에 유형을 사용할 수 있다.
자바
Java에서 부울 데이터 유형의 값은 다음 중 하나일 수 있다.true
또는false
.[7]
펄과 루아
Perl에는 부울 데이터 유형이 없다.대신, 모든 값은 부울 컨텍스트에서 부울로 동작할 수 있다(조건:if
또는while
진술, 논거&&
또는
, 등).갯수0
, 현악기 "0"
그리고""
, 빈 목록()
, 그리고 특별한 가치undef
허위로 [8]평가하다다른 모든 것들은 사실로 평가된다.
Lua는 부울 데이터 유형을 가지고 있지만, 부울이 아닌 값은 부울로 동작할 수도 있다.비가치nil
다른 모든 데이터 유형 값은 true로 평가되는 반면, false로 평가한다.여기에는 빈 문자열이 포함된다.""
그리고 그 숫자와0
, 그것은 매우 자주 고려된다.false
타국어로
PL/I
PL/I에는 부울 데이터 유형이 없다.대신 비교 연산자는 BIT(1) 값을 생성하며, '0'B는 거짓을 나타내고 '1'B는 참을 나타낸다.의 피연산자(예:&
,
,¬
는 비트 문자열로 변환되고 각 비트마다 연산이 수행된다.원소-표현IF
만약 조금이라도 1이라면 진술은 진실이다.
렉시
Rexx에는 부울 데이터 유형이 없다.대신 비교 연산자는 0 또는 1을 생성하며, 0은 거짓을 나타내고 1은 참을 나타낸다.의 피연산자(예:&
,
,¬
, 0 또는 1이어야 한다.
Tcl
Tcl에는 별도의 부울 유형이 없다.C에서와 마찬가지로 정수 0(거짓)과 1(참, 사실 0이 아닌 정수)이 사용된다.[9]
코딩의 예:
{$v } {이(가) "V is 1 or true"로 표시되는 경우 v 1을 설정하십시오. }
위의 내용은 표현이 1로 평가되기 때문에 나타날 것이다.
v "을(를) {$v }인 경우 ....
위 내용은 변수를 나타내는 오류를 렌더링할 것이다.v는 0 또는 1로 평가할 수 없다.
파이톤, 루비, 자바스크립트
2.3 버전부터 Python은bool
의 하위종류인 활자.int
, 표준 정수 유형.[10]두 가지 가능한 값이 있다.True
그리고False
각각 1과 0의 특수 버전이며 산술 맥락에서와 같이 동작한다.또한 숫자 값 0(정수 또는 분수), null 값(분수)None
)), 빈 문자열 및 빈 컨테이너(목록, 세트 등)는 부울 거짓으로 간주되며, 다른 모든 값은 기본적으로 부울 참으로 간주된다.[11]클래스는 특수 방법을 통해 부울 컨텍스트에서 인스턴스를 처리하는 방법을 정의할 수 있음__nonzero__
(피톤 2) 또는__bool__
(피톤 3)컨테이너의 경우,__len__
(용기의 길이를 결정하는 특별한 방법)은 명시적 부울 변환 방법이 정의되지 않은 경우 사용된다.
루비에서는 대조적으로,nil
(Ruby의 null 값) 및 특수false
개체는 거짓이며, 다른 모든 개체(정수 0 및 빈 배열 포함)는 참이다.
JavaScript에서 빈 문자열(""
),null
,undefined
,NaN
, +0, -0 및false
[12] 엄격히 유형 검사된 불레앙과 강요된 불레앙을 구별하기 위해 때때로 위조(보완물이 트루티)라고 불린다.[13]Python과는 반대로, 빈 용기(array, Maps, Sets)는 truthy로 간주된다.PHP와 같은 언어들도 이 접근법을 사용한다.
차세대 쉘
차세대 쉘은Bool
유형. 두 가지 가능한 값이 있다.true
그리고false
.Bool
와 교환할 수 없다Int
필요한 경우 명시적으로 변환해야 한다.표현식의 부울 값이 필요한 경우(예:if
진술), 그리고Bool
메소드를 호출한다. Bool
기본 제공 유형에 대한 방법이 정의되어 반환됨false
0의 숫자 값에 대해null
값, 빈 문자열, 빈 컨테이너(목록, 세트 등), 0이 아닌 종료 코드를 사용하여 종료된 외부 프로세스, 기타 값Bool
진실로 돌아오다다음에 대한 유형Bool
정의된 메서드는 부울 컨텍스트에서 사용될 수 있다.부울 컨텍스트에서 식을 평가할 때 적절하지 않은 경우Bool
방법을 정의하면 예외가 발생한다.
SQL
Booleans는 WHERE 조항과 같이 조건이 필요할 때 SQL에 비교 연산자, IN 연산자, IS (NOT) NULL 등과 같은 연산자를 사용하여 생성되는 술어의 형태로 나타난다.그러나, TRUE와 FALSE를 제외하고, 이들 연산자는 와 비교했을 때 알 수 없는 제3의 상태(Unknown)를 산출할 수도 있다.
SQL92 표준은 술어를 평가하는 IS (NOT) TRUE, IS (NOT) FALSE, IS (NOT)NOWND 연산자를 도입하였는데, 이는 SQL:1999에 부울 타입이 도입되는 것을 앞지른 것이다.
SQL:1999 표준에서는 선택적 기능(T031)으로 BOOLAN 데이터 유형을 도입하였다.NOT NULL 제약조건에 의해 제한되면 SQL BOOLN은 TRUE 및 FALSE 값만 저장할 수 있는 다른 언어의 Booleans처럼 동작한다.그러나 다른 모든 SQL 데이터 유형과 마찬가지로 기본값인 null이 가능한 경우, 특수 null 값도 가질 수 있다.SQL 표준은 TRUE, FALSE 및 UnNOWND의 부울 유형에 대해 3 리터럴을 정의하지만, NULL BOOLN과 UnNOWND는 "정확히 동일한 것을 의미하기 위해 서로 교환하여 사용될 수 있다"[14][15]고 명시되어 있다.이것은 NULL에 대한 동일 비교 규칙에 대한 식별 주체를 알 수 없기 때문에 약간의 논란을 일으켰다. 더 정확히 말하면UNKNOWN = UNKNOWN
TRUE가 아니라 Unknown/NULL이다.[16] 2012년 현재 T031 기능을 구현하는 주요 SQL 시스템은 거의 없다.[17]파이어버드와 포스트그레Postgre는 예외지만 SQL은 주목할 만한 예외임SQL은 알 수 없는 리터럴을 구현하지 않는다.NULL
대신 사용할 수 있다.[18]
부울 값의 처리는 SQL 시스템마다 다르다.
예를 들어 Microsoft SQL Server에서 부울 값은 독립 실행형 데이터 유형으로도, 정수로도 전혀 지원되지 않는다.예를 들어 WHERE 절에서 열이 직접 사용되는 경우 "조건이 예상되는 컨텍스트에서 지정된 비부울 유형의 표현" 오류 메시지가 표시된다.SELECT a FROM t WHERE a
, 다음과 같은 문장이 있는 동안SELECT column IS NOT NULL FROM t
구문 오류를 산출하다NULL과 별도로 정수 0과 1만 저장할 수 있는 BIT 데이터 타입은 일반적으로 부울 값을 저장하는 해결책으로 사용되지만 다음과 같은 해결책이 필요하다.UPDATE t SET flag = IIF(col IS NOT NULL, 1, 0) WHERE flag = 0
정수와 부울 식 사이를 변환한다.
액세스 데이터베이스 엔진(ACE/JET)을 사용하는 마이크로소프트 엑세스에도 부울 데이터 유형이 없다.[19]MS SQL Server와 마찬가지로 BIT 데이터 유형을 사용한다.[20]액세스에서 예(참) 또는 아니오(거짓)의 두 가지 값을 가질 수 있는 예/아니오 데이터 유형으로[21] 알려져 있다.Access의 BIT 데이터 형식도 숫자로 나타낼 수 있다. True는 -1이고 False는 0이다.[22]이는 MS SQL Server와 두 가지 면에서 다르다.
- 액세스 권한은 SQL Server에서 1인 동안 -1로 TRUE를 나타냄
- 액세스가 SQL Server에서 지원하는 Null tri-state를 지원하지 않음
PostgreSQL은 표준과 같이 고유한 BOOLN 유형을 가지고 있어 [23]술어를 BOOLAN 열에 직접 저장할 수 있으며 WHERE 절에서 BOOLAN 열을 술어로 직접 사용할 수 있다.
MySQL에서 BOOLN은 의 별칭으로 처리된다.TINYINT(1)
;[24]TRUE는 정수 1과 같고 FALSE는 정수 0과 같다.[25]0이 아닌 정수는 조건에서 참이다.
탁아우
Tableau Software는 BOOLAN 데이터 유형을 가지고 있다.[26]부울 값의 리터럴은True
또는False
.[27]
더 테이블라우INT()
함수는 부울을 숫자로 변환하여 True에 대해 1을 반환하고 False에 대해 0을 반환한다.[28]
포스
포스(프로그래밍 언어)는 부울 유형이 없으며 정규 정수를 사용한다: 값 0(모든 비트 낮음)은 거짓을 나타내고 -1(모든 비트 높음)은 참을 나타낸다.이를 통해 언어는 수학 계산용과 조건용 논리 연산자 중 하나만 정의할 수 있다.[29]
참고 항목
참조
- ^ Kernighan, Brian W; Ritchie, Dennis M (1978). The C Programming Language (1st ed.). Englewood Cliffs, NJ: Prentice Hall. p. 41. ISBN 0-13-110163-3.
- ^ Plauger, PJ; Brodie, Jim (1992) [1989]. ANSI and ISO Standard C Programmer's reference. Microsoft Press. pp. 86–93. ISBN 1-55615-359-7.
- ^ "Report on the Algorithmic Language ALGOL 68, Section 10.2.2" (PDF). August 1968. Archived (PDF) from the original on 6 April 2008. Retrieved 30 April 2007.
- ^ 디지털 장비 회사, DECSystem10 FORTRAN IV 프로그래머 참조 매뉴얼.수리 언어 핸드북에 재인쇄됨.2011-11-16에 액세스한 웨이백 머신에 온라인 버전 보관 2011-08-14.
- ^ "CLHS: Type BOOLEAN".
- ^ "Guides and Sample Code". developer.apple.com. Archived from the original on 7 September 2011. Retrieved 1 May 2018.
- ^ "Java Booleans". W3Schools Online Web Tutorials. Retrieved 2021-02-17.
- ^ "perlsyn - Perl Syntax / Truth and Falsehood". Archived from the original on 26 August 2013. Retrieved 10 September 2013.
- ^ "PEP 285 -- Adding a bool type". 4 May 2011. Archived from the original on 28 March 2018. Retrieved 28 March 2018.
- ^ van Rossum, Guido (3 April 2002). "PEP 285 -- Adding a bool type". Archived from the original on 1 May 2013. Retrieved 15 May 2013.
- ^ "Expressions". Python v3.3.2 documentation. Archived from the original on 22 May 2013. Retrieved 15 May 2013.
- ^ "ECMAScript Language Specification" (PDF). p. 43. Archived from the original (PDF) on 2015-04-12. Retrieved 2011-03-12.
- ^ "The Elements of JavaScript Style". Douglas Crockford. Archived from the original on 17 March 2011. Retrieved 5 March 2011.
- ^ C. Date (2011). SQL and Relational Theory: How to Write Accurate SQL Code. O'Reilly Media, Inc. p. 83. ISBN 978-1-4493-1640-2.
- ^ ISO/IEC 9075-2:2011 제4.5조
- ^ Martyn Prigmore (2007). Introduction to Databases With Web Applications. Pearson Education Canada. p. 197. ISBN 978-0-321-26359-9.
- ^ Troels Arvin, BOOLAN 데이터 유형 구현 조사 웨이백 머신에 2005-03-09 보관
- ^ "PostgreSQL: Documentation: 10: 8.6. Boolean Type". www.postgresql.org. Archived from the original on 9 March 2018. Retrieved 1 May 2018.
- ^ "Migrate an Access database to SQL Server". support.microsoft.com. Retrieved 2020-10-19.
- ^ o365devx. "SQL data types (Access desktop database reference)". docs.microsoft.com. Retrieved 2020-10-19.
- ^ "Introduction to data types and field properties". support.microsoft.com. Retrieved 2020-10-19.
- ^ "Boolean Data - MS-Access Tutorial". sourcedaddy.com. Retrieved 2020-10-19.
- ^ "Boolean Type". 27 October 2016.
- ^ "MySQL :: MySQL 8.0 Reference Manual :: 12.1.1 Numeric Type Overview". dev.mysql.com. Archived from the original on 2016-09-22.
- ^ "MySQL :: MySQL 8.0 Reference Manual :: 9.1.6 Boolean Literals". dev.mysql.com.
- ^ "Data Types". help.tableau.com. Retrieved 2020-10-19.
- ^ "Formatting Calculations in Tableau". help.tableau.com. Retrieved 2020-10-19.
- ^ "Boolean makes Tableau faster - true or false?". TAR Solutions. 2020-09-11. Retrieved 2020-10-19.
- ^ "4. Decisions, Decisions..." Forth Inc. 2022-02-11. Retrieved 2022-02-11.