Typ logiczny, typ boolowski (ang. boolean) – uporządkowany zbiór wartości logicznych, składający się z dokładnie dwóch elementów: prawda (true, 1, +) i fałsz (false, 0, -), wraz z towarzyszącymi im zdefiniowanymi operatorami standardowymi[1]. Nazwa pochodzi od angielskiego pioniera logiki, matematyka George'a Boole'a[1].
Zastosowanie
Typ logiczny stosuje się jako:
- wynik funkcji (zachodzi, bądź nie zachodzi),
- flagę,
- warunek instrukcji warunkowej,
- warunek wyjścia/kontynuowania pętli,
- warunek wykonania skoku.
Różnice pomiędzy typem logicznym a typem liczbowym
Ze względu na to, iż każdą funkcję logiczną da się zapisać funkcją dającą jako wynik liczbę naturalną (fałsz - 0, prawda - liczba większa od zera), zaś operatory logiczne da się zapisać za pomocą mnożenia i dodawania, w niektórych językach programowania, np. w C (do C99), typ logiczny nie występował. Są jednak przyczyny, dla których typ logiczny jest stosowany:
- brak zakresu (nie ma efektu przekroczenia zakresu poprzez sumowanie dwóch warunków prawdziwych),
- oszczędność pamięci,
- większa czytelność kodu.
Typy logiczne w językach programowania
Języki programowania | Typ logiczny |
---|---|
C (od C99), C++, C#, Python | bool |
Pascal, Object Pascal/Delphi, Java, Lua | boolean |
Przykłady zastosowania
Pascal
{ definicja zmiennej typu logicznego }
var
zmienna_log : Boolean;
{ deklaracja funkcji zwracającej typ logiczny }
function parzysta(l : Integer) : Boolean;
begin
parzysta := ((l mod 2) = 0);
end;
{ użycie powyższych w programie }
begin
zmienna_log := parzysta(4);
end.
C99
#include <stdbool.h>
int main()
{
bool b = false;
b = true;
}
C++
Przykłady konwersji między bool a innymi typami:
#include <string>
int main()
{
using std::string;
// niejawne konwersje do bool
bool a = 'a'; // char -> bool [true]
bool b = 0.0; // double -> bool [false]
bool c = -1; // int -> bool [true]
bool d = 0; // int -> bool [false]
bool e = &a; // bool * -> bool [true]
bool f = &string::clear; // void (string::*)() -> bool [true]
// niejawne konwersje z bool
int i = false; // bool -> int [0]
double j = true; // bool -> double [1.0]
}
C#
using System;
namespace TypLogiczny
{
public class Parzysta
{
//metoda zwracająca typ logiczny:
// true (prawda), jeśli liczba podana jako argument jest parzysta,
// false (fałsz) w przeciwnym przypadku.
static bool CzyParzysta(int i)
{
return (i % 2) == 0;
}
static void Main()
{
for(int i = 0; i <=25; i++)
{
if(CzyParzysta(i)) //wartość logiczna jako warunek instrukcji warunkowej if
{
Console.WriteLine("Liczba {0} jest parzysta", i);
}
else
{
Console.WriteLine("Liczba {0} jest nieparzysta", i);
}
}
}
}
}
PHP
function returnbool($arg) { return !!$arg; }
$b = returnbool(1); // zwraca prawdę (true)
// tak; true jest równoznaczne z 1
echo 'Test 1: ', ($b == 1) ? 'tak' : 'nie', '<br />';
// nie; true nie jest identyczne z 1
echo 'Test 2: ', ($b === 1) ? 'tak' : 'nie', '<br />';
Java
class LogicDataType{
public static void main(String[] args){
boolean a = true, b = false;
System.out.println("\"a\" wynosi " + a + ", natomiast \"b\" wynosi " + b + '.');
}
}
Delphi XE2/Object Pascal
unit LogicDataType;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TLogicDataTypes = class(TForm)
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
LogicDataTypesForm: TLogicDataTypes;
a, b : boolean;
implementation
{$R *.dfm}
procedure LogicDataTypesForm.FormShow(Sender: TObject);
begin
a := true;
b := false;
Application.MessageBox('''a'' wynosi ' + BoolToStr(a) + ', ''b'' wynosi ' + BoolToStr(b) + '.', '''a'' i ''b''!');
end;
end.