Boolean values: Difference between revisions
slight goof |
→{{header|BASIC}}: Added C++ |
||
Line 16: | Line 16: | ||
QuickBasic has no keywords for true and false. Boolean expressions evaluate to 0 when false, and a non-zero value when true. Numbers also work in place of boolean expressions following those rules. |
QuickBasic has no keywords for true and false. Boolean expressions evaluate to 0 when false, and a non-zero value when true. Numbers also work in place of boolean expressions following those rules. |
||
=={{header|C++}}== |
|||
In C++, there are the constants <code>true</code> and <code>false</code> to represent those values. However, there are numerous implicit conversions to <code>bool</code>, therefore in conditions (and other contexts expecting boolean values), any of the following can be used: |
|||
* any integer type, where 0 converts to false, and any other value converts to true (note that in C++, character types are also integer types, therefore this also applies to characters) |
|||
* any floating point type, where again, 0 gives false and everything else gives true |
|||
* any enumeration type, again 0 gives false, anything else true |
|||
* any pointer type, where the null pointer gives false and any other pointer gives true |
|||
* any user-defined type with an implicit conversion operator either to <code>bool</code> or to a built-in type which itself can be converted to <code>bool</code> (i.e. any of the above). The C++ standard library contains one such implicit conversion: the implicit conversion of a stream <code>s</code> to <code>bool</code> gives <code>!s.fail()</code> |
|||
=={{header|E}}== |
=={{header|E}}== |
Revision as of 22:12, 10 July 2009
You are encouraged to solve this task according to the task description, using any language you may know.
Show how to represent the boolean states "true" and "false" in a language. If other objects represent "true" or "false" in conditionals, note it.
Ada
Ada has a predefined discrete type with the specification: <lang Ada> type Boolean is (False, True);</lang> with Boolean lattice and relational operations defined on it. See RM A.1.
AWK
In awk, any nonzero numeric value or any nonempty string value is true. Any other value (zero or the null string "") is false. [...] the string constant "0" is actually true, because it is non-null. [1]
BASIC
QuickBasic has no keywords for true and false. Boolean expressions evaluate to 0 when false, and a non-zero value when true. Numbers also work in place of boolean expressions following those rules.
C++
In C++, there are the constants true
and false
to represent those values. However, there are numerous implicit conversions to bool
, therefore in conditions (and other contexts expecting boolean values), any of the following can be used:
- any integer type, where 0 converts to false, and any other value converts to true (note that in C++, character types are also integer types, therefore this also applies to characters)
- any floating point type, where again, 0 gives false and everything else gives true
- any enumeration type, again 0 gives false, anything else true
- any pointer type, where the null pointer gives false and any other pointer gives true
- any user-defined type with an implicit conversion operator either to
bool
or to a built-in type which itself can be converted tobool
(i.e. any of the above). The C++ standard library contains one such implicit conversion: the implicit conversion of a streams
tobool
gives!s.fail()
E
E defines two basic objects true
and false
, and the boolean
guard which accepts them. All builtin operations which take booleans (e.g. the if
control structure) coerce the input to boolean.
<lang e>? if (true) { "a" } else { "b" }
- value: "a"
? if (false) { "a" } else { "b" }
- value: "b"
? if (90) { "a" } else { "b" }
- problem: the int 90 doesn't coerce to a boolean</lang>
No objects in the standard library coerce to boolean, but user-written objects may choose to do so; they can then be used in place of booleans.
<lang e> ? def bowlian { > to __conformTo(guard) { > if (guard == boolean) { return true } > } > } > if (bowlian) { "a" } else { "b" }
- value: "a"</lang>
Java
Java has true and false keywords, representing the only values of type boolean. There are also object wrappers Boolean.TRUE and Boolean.FALSE, of type Boolean which may be un-boxed into booleans (auto-unboxed in Java 1.5+). There are no automatic conversions from any other types into boolean, and it is a compile-time error to use any type other than boolean or Boolean in a place that expects a boolean (e.g. if-statement condition, while-statement condition, operand of a logical operator, etc.).
Perl
The values in Perl that are false are: 0 (as a number (including 0.0), or as the string '0' (but not the string "0.0"), the empty string "", the empty list (), and undef.
Everything else is true.
Perl has no special "true" or "false" keywords. [2]
Python
Python has a boolean data type with the only two possible values denoted by True
and False
.
The boolean type is a member of the numeric family of types, and when used in a numeric, but not boolean context, True
has the value one and False
the value zero. Conversely, when numbers are used in a boolean context, zero is False and anything other than zero is True.
In a boolean context, Python extends what is meant by true and false by accepting empty collection types, such as an empty dict or an empty list as being False, and non-empty collection types as being True, so in an if statement one might branch on a list which would be the same as testing if the list had any contents.
A user-created class that defines a .__nonzero__() method to return False, or whose .__len__() method returns 0 will be treated as False
, otherwise the class/instance is treated as True
.
None is also False
in a boolean context.
Some examples: <lang python>>>> True True >>> not True False >>> # As numbers >>> False + 0 0 >>> True + 0 1 >>> False + 0j 0j >>> True * 3.141 3.141 >>> # Numbers as booleans >>> not 0 True >>> not not 0 False >>> not 1234 False >>> bool(0.0) False >>> bool(0j) False >>> bool(1+2j) True >>> # Collections as booleans >>> bool([]) False >>> bool([None]) True >>> 'I contain something' if (None,) else 'I am empty' 'I contain something' >>> bool({}) False >>> bool("") False >>> bool("False") True >>> </lang>
Ruby
The only values in Ruby that are false are: false
and nil
. They have synonyms FALSE
and NIL
.
Everything else (including the number 0
and the empty string) is true. Constants true
(and TRUE
) exist.
false
, nil
and true
are singleton instances of classes FalseClass
, NilClass
and TrueClass
respectively.
[3]
Tcl
True values: 1, true, yes, on
False values: 0, false, no, off
Any of these values may be abbreviated, and upper-case spellings are also acceptable. [4]
Any other value gives an error. In an interactive tclsh session:
% if {""} then {puts true} else {puts false} expected boolean value but got ""
Test for the boolean value of a string can be stuff like
if {[string is false $string]} ...
which will test for "no" or "NO" or "0" or "False" or ...