Conditional structures: Difference between revisions
m
→case without a default: the error discussed isn’t syntactic
m (Ursalang: give more of a clue about the joke in the code) |
m (→case without a default: the error discussed isn’t syntactic) |
||
(12 intermediate revisions by 12 users not shown) | |||
Line 2:
{{Control Structures}}
[[Category:Simple]]
[[Category:Flow control]]
;Task:
Line 587 ⟶ 588:
);</syntaxhighlight>
====case expressions====
Using the same example above, we assume that the
<syntaxhighlight lang="ada">Result := (case Op is
Add => A + B,
Line 596 ⟶ 597:
</syntaxhighlight>
Note: some websites (particularly [https://www.radford.edu/nokie/classes/320/abe/operators.html#:~:text=if%20and%20case-,Examples%3A,1%2C%20others%20%3D%3E%200)%3B this one]) contain a different variant of a case expression (<syntaxhighlight lang="ada">case Op of...</syntaxhighlight>). The Ada Reference Manual indicates this is incorrect, and we use the [http://www.ada-auth.org/standards/12rm/html/RM-4-5-7.html formal version] here.
===case with a default alternative===
<syntaxhighlight lang="ada">type Days is (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);
Line 613 ⟶ 615:
===case without a default===
When there is no '''when others''' clause, the compiler will complain about any uncovered alternative. This defends against a common reason for bugs in other languages.
I.e., the following code is
<syntaxhighlight lang="ada">case Today is
Line 625 ⟶ 627:
end case;</syntaxhighlight>
The
<syntaxhighlight lang="ada">case Today is
Line 1,740 ⟶ 1,742:
<syntaxhighlight lang="befunge">& #v_ "0",@ zero
> "X",@ non-zero</syntaxhighlight>
=={{header|Binary Lambda Calculus}}==
Lambda calculus has no conditional structures built in, but the standard representations of booleans can be seen to implement if-then-else: true = \then. \else. then, false = \then. \else. else, which correspond to BLC programs <code>00 00 110</code> and <code>00 00 10</code>.
=={{header|blz}}==
Line 2,283 ⟶ 2,289:
// if condition is true var will be set to 1, else false.
int var = condition ? 1 : 2;
=={{header|Curto}}==
===si-sino===
<syntaxhighlight lang="curto">( condición ) si ( sentencias si verdadero ) entonces
( condición ) si ( sentencias si verdadero ) sino ( sentencias si falso ) entonces</syntaxhighlight>
ejemplo:
: menor-que-diez ( n -- )
10 < si
." Menor que 10"
sino
." Mayor o igual a 10"
entonces ;
</syntaxhighlight>
Line 2,473 ⟶ 2,492:
=={{header|EasyLang}}==
<syntaxhighlight
i = randint 10
if i mod 2 = 0
print i & " is divisible by 2"
elif i mod 3 = 0
print i & " is divisible by 3"
else
print i & " is not divisible by 2 or 3"
.
▲.</syntaxhighlight>
</syntaxhighlight>
=={{header|Efene}}==
Line 3,874 ⟶ 3,895:
=={{header|langur}}==
If and switch
In the shortened forms, you dispense with the keywords (except the first one).
Line 3,898 ⟶ 3,919:
===simple if===
<syntaxhighlight lang="langur">if .x > .y: break</syntaxhighlight>
===switch
Switch
Switch
<syntaxhighlight lang="langur">switch .x, .y, .z {
Line 3,924 ⟶ 3,945:
}
case true: ...
# all are true
Line 3,933 ⟶ 3,954:
}</syntaxhighlight>
===implicit fallthrough===
If a block of a switch
<syntaxhighlight lang="langur">
case true:
# implicit fallthrough
Line 3,946 ⟶ 3,967:
===explicit fallthrough from anywhere===
A fallthrough statement is allowed anywhere within a switch
▲<syntaxhighlight lang="langur">given .x {
<syntaxhighlight lang="langur">switch .x {
case true:
if .y > 100 {
Line 3,957 ⟶ 3,979:
}</syntaxhighlight>
===shortened form switch
A shortened form expects a single action expression per test and is more limited in other ways, as well (no explicit fallthrough, no alternate test expressions, no alternate logical operators). A default section is optional (null by default).
<syntaxhighlight lang="langur">
true: ... ; #
_, >= .z: ...; # .y >= .z
... ) # default</syntaxhighlight>
Line 6,890 ⟶ 6,912:
}}
</syntaxhighlight>
=={{header|RPL}}==
'''IF..THEN'''
'''IF''' <instruction(s)> '''THEN''' <instruction(s)> '''END'''
'''IF..THEN..ELSE'''
'''IF''' <instruction(s)> '''THEN''' <instruction(s)> '''ELSE''' <instruction(s)> '''END'''
Instructions between <code>IF</code> and <code>THEN</code> are not mandatory, but recommended for lisibility. The interpreter considers <code>IF</code> as a null word and performs branching when meeting the word <code>THEN</code>: if stack level 1 is not equal to zero, the instructions between <code>THEN</code> and <code>END</code> will be executed.
<code>IFT</code> and <code>IFTE</code> are stack-based conditonal structures. <code>IFT</code> evaluates the content of stack level 1 only if the content of stack level 2 is not zero, otherwise it is dropped. <code>IFTE</code> evaluates the content of stack level 1 if the content of stack level 2 is zero, otherwise if evaluates the content of stack level 2.
'''CASE..END'''
'''CASE'''
<instruction(s)> '''THEN''' <instruction(s)> '''END'''
<instruction(s)> '''THEN''' <instruction(s)> '''END'''
<span style="color:grey">@ as many branches as needed</span>
<instruction(s)> <span style="color:grey">@ default branch (optional)</span>
'''END'''
=={{header|Ruby}}==
Line 7,363 ⟶ 7,402:
(else 'zero))</syntaxhighlight>
=={{header|SmallBASIC}}==
===if===
<syntaxhighlight lang="basic">
IF foo == 1
PRINT "one"
ELSEIF foo == 2
PRINT "two"
ELSE
PRINT "something else"
ENDIF
</syntaxhighlight>
===Inline if===
<syntaxhighlight lang="basic">ans = iff(x <= 5, 0, 10)</syntaxhighlight>
===select===
<syntaxhighlight lang="basic">
select case x
case 12
print "x is 12"
case 13,14,15
print "x is 13,14,or 15"
case iff(x <= 4, x, x + 1)
print "x <= 4"
case else
print "x is not <=4,12,13,14,15"
end select
</syntaxhighlight>
=={{header|Smalltalk}}==
Line 7,984 ⟶ 8,050:
There are optional <code>elif</code> (else if) and <code>else</code> clauses.
<syntaxhighlight lang="sh">if test 4 -ge 6
elif test 4 -lt 6
▲ echo '4 compares not to 6'
fi</syntaxhighlight>
Line 8,052 ⟶ 8,117:
=={{header|Ursalang}}==
===
Ursalang has a single conditional construct, the familiar `if…then…else`.<syntaxhighlight lang="ursalang">
if energyLevel > 9000 { "That's impossible!!!" } else { "Ok, I guess" }
</syntaxhighlight>As in most C-like languages, conditionals can be chained:<syntaxhighlight>
if color == "red" { "aaaaaah!" }
else if color == "blue" { "oooooh!" }
else { "eeeeeeee!" }
</syntaxhighlight>
Line 8,582 ⟶ 8,651:
=={{header|Wren}}==
The ''if/else'' statement and the ''ternary operator (?:)'' are Wren's basic conditional structures though it can be argued that the ''&&'' and ''||'' operators, which do short-circuit evaluation, should be included under this heading as well.
<syntaxhighlight lang="
if (b) {
System.print(true)
|