Existuje speciální nestandardní datový typ Arduino s názvem " boolean ".
Jaké je srovnání se standardním datovým typem C ++ " bool " a jaké jsou důvody pro použití jednoho nebo druhého?
Pokud jsou shodné v použití, proč existují oba a který je v kódu Arduino preferován?
Komentáře
Odpověď
Zatímco ostatní odpovědi poskytují obecně užitečné informace, zdá se, že autoři otázku nečetli příliš pečlivě protože mluví spíše o bool typu než o boolean typ. V rozhraní Arduino API je boolean
alias typu pro bool
, jak je definováno v Arduino.h:
https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125
typedef bool boolean;
Můžete tedy použít typ boolean
stejně jako bool
a jakýkoli standardní programovací odkaz v C ++ vás naučí používat bool
. Z tohoto důvodu jsou další odpovědi, které se mylně odkazují na bool
, stále ještě poněkud užitečné.
Zdá se, že v určitém okamžiku v minulosti lidé z Arduina rozhodli jméno boolean
by bylo pro začátečníky vstřícnější než bool
, snad by bylo konzistentní s jazykem zpracování . Jak je zde však diskutováno:
https://github.com/arduino/Arduino/issues/4673
zbytečné použití nestandardního typu je nyní některými považováno za špatné rozhodnutí, protože jeho použití činí kód méně přenosným a ve skutečnosti neposkytuje žádnou jasnou výhodu oproti bool
. v pracích k odstranění použití boolean
ze všech oficiálních Arduino kódů a dokumentu bool
v odkazu Arduino a někteří si dokonce přejí formální podporu boolean
. Mou radou je tedy použít bool
místo boolean
ve vašem kódu.
Odpověď
Typ logické proměnné je takový, který má pouze 2 možné hodnoty, true
nebo false
. Interně se vytváří jako int
(16bitové celé číslo) nebo uint8_t
typ (8bitové celé číslo).
Můžete přiřadit „val ues „of true
nebo false
pomocí operátoru přiřazení:
bool foo; foo = true; if (foo) { do_something(); }
Interně je true
1
a false
je 0
a číselné hodnoty mohou být nahrazeny stejně.
Booleovské typy v Arduinu a C ++ existují většinou kvůli čitelnosti a nikoli kvůli konkrétní účinnosti nad int
typem.
Odpověď
Oficiální odkaz naleznete zde
Nejlepší je vždy používejte true a false a nepoužívejte čísla.
Níže uvádíme několik příkladů.
Přiřaďte false nebo true logickému objektu:
bool a = true; bool b = false;
Zkontrolujte booleovskou hodnotu:
if (b) { // Executed when b is true } else { // Executed when b is false } if (a && b) { // Executed when a is true and b is true } if (a || b) { // Executed when a is true or b is true }
Pokud b je nepravdivé, bude vůle nepravdivá, jinak a zůstane tak, jak byla
a &= b;
Je-li b pravdivé, bude a pravdivé, jinak a zůstane tak, jak bylo
a |= b;
// Pokud je a pravdivé, bude nepravdivé a naopak.
a = !a;
Komentáře
- Ten poslední by měl být a =! a neměl by ' to? ~ je bitově ne.V závislosti na tom, jak je definována pravda, může být pravda stále pravdivá.
boolean
je nestandardní alias typu probool
nastavený v základní knihovně Arduino, a proto je velmi specifický pro Arduino. Podrobnosti najdete v mé odpovědi.