Difference between revisions of ";"
m ((a clear all break instead of several (in fact any arbitrary number) of breaks). Thanks to Kai for showing me how to.) |
(complete review) |
||
Line 1: | Line 1: | ||
{{;}} | {{;}} | ||
− | |||
− | |||
<div style="float:left; margin: 0 25px 20px 0; padding:50px; font-size:500%; font-family: Georgia; background-color: #f9f9f9; border: 2px solid #777777; clear:both;">;</div> | <div style="float:left; margin: 0 25px 20px 0; padding:50px; font-size:500%; font-family: Georgia; background-color: #f9f9f9; border: 2px solid #777777; clear:both;">;</div> | ||
− | The semicolon | + | The '''semicolon''' <syntaxhighlight lang="pascal" enclose="none">;</syntaxhighlight> is used to ''separate'' statements, in contrast to other programming language where its purpose is to ''terminate'' a statement. |
+ | In a block a semicolon without a preceding (qualified) statement indicates an '''empty statement'''. | ||
− | + | == necessity == | |
+ | Since language constructs only in their entirety constitute statements, semicolons may not split their components. | ||
+ | Most notably <syntaxhighlight lang="pascal" enclose="none">;</syntaxhighlight> can not appear immediately before an [[Else|<syntaxhighlight lang="pascal" enclose="none">else</syntaxhighlight>]] that is part of an [[If and Then|<syntaxhighlight lang="pascal" enclose="none">if … then</syntaxhighlight> branch]]. | ||
+ | However, <syntaxhighlight lang="pascal" enclose="none">;</syntaxhighlight> in front of an [[End|<syntaxhighlight lang="pascal" enclose="none">end</syntaxhighlight>]] usually is not necessary. | ||
− | + | As a demonstration, that a single semicolon can make the difference, consider the following listings: | |
− | < | + | <syntaxhighlight lang="pascal" highlight="2"> |
+ | case c of | ||
+ | 0: if false then c := 42; | ||
+ | else c := -1; | ||
+ | end; | ||
+ | </syntaxhighlight> | ||
+ | If <syntaxhighlight lang="pascal" enclose="none">c</syntaxhighlight> is zero, it remains zero, but becomes <syntaxhighlight lang="pascal" enclose="none">-1</syntaxhighlight> otherwise. | ||
+ | <syntaxhighlight lang="pascal" highlight="2"> | ||
+ | case c of | ||
+ | 0: if false then c := 42 | ||
+ | else c := -1; | ||
+ | end; | ||
+ | </syntaxhighlight> | ||
+ | Here, <syntaxhighlight lang="pascal" enclose="none">c</syntaxhighlight> only becomes <syntaxhighlight lang="pascal" enclose="none">-1</syntaxhighlight> only if it's been zero before. | ||
+ | As a consequence, and general advice, always put everything in compound statements (i.e. embrace your statements by [[Begin|<syntaxhighlight lang="pascal" enclose="none">begin</syntaxhighlight>]] and <syntaxhighlight lang="pascal" enclose="none">end</syntaxhighlight>) where it's allowed, in order to mitigate such issues. | ||
− | + | == other remarks == | |
− | + | In the [[ASCII]] character set the semicolon takes the value <syntaxhighlight lang="pascal" enclose="none">59</syntaxhighlight> ([[Hexadecimal|hexadecimal]] <syntaxhighlight lang="delphi" enclose="none">$3B</syntaxhighlight>). | |
− | < | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | <syntaxhighlight lang=" | ||
− | |||
− | |||
− | |||
− | |||
− | </syntaxhighlight> | ||
− | + | Historically empty statements were used in conjunction with [[Label|labels]]. | |
− | + | Originally labels can only defined where a statement exists. | |
− | + | If for instance a whole list of statements had to be bypassed, but no qualified statement followed thereafter, the empty statement still provided the possibility. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | Also historically, [[Case|<syntaxhighlight lang="pascal" enclose="none">case</syntaxhighlight>-statements]] had to list all possible values the selector variable theoretically could have. | ||
+ | Now, if a value or range did not imply any action, yet had to be listed inside the <syntaxhighlight lang="pascal" enclose="none">case</syntaxhighlight>-statement in order to fulfill this requirement, an empty statement is the shortest possible way to implement the situation. | ||
{{Symbols}} | {{Symbols}} |
Revision as of 00:42, 20 October 2018
│
English (en) │
suomi (fi) │
français (fr) │
The semicolon ;
is used to separate statements, in contrast to other programming language where its purpose is to terminate a statement.
In a block a semicolon without a preceding (qualified) statement indicates an empty statement.
necessity
Since language constructs only in their entirety constitute statements, semicolons may not split their components.
Most notably ;
can not appear immediately before an else
that is part of an if … then
branch.
However, ;
in front of an end
usually is not necessary.
As a demonstration, that a single semicolon can make the difference, consider the following listings:
case c of
0: if false then c := 42;
else c := -1;
end;
If c
is zero, it remains zero, but becomes -1
otherwise.
case c of
0: if false then c := 42
else c := -1;
end;
Here, c
only becomes -1
only if it's been zero before.
As a consequence, and general advice, always put everything in compound statements (i.e. embrace your statements by begin
and end
) where it's allowed, in order to mitigate such issues.
other remarks
In the ASCII character set the semicolon takes the value 59
(hexadecimal $3B
).
Historically empty statements were used in conjunction with labels. Originally labels can only defined where a statement exists. If for instance a whole list of statements had to be bypassed, but no qualified statement followed thereafter, the empty statement still provided the possibility.
Also historically, case
-statements had to list all possible values the selector variable theoretically could have.
Now, if a value or range did not imply any action, yet had to be listed inside the case
-statement in order to fulfill this requirement, an empty statement is the shortest possible way to implement the situation.
single characters |
|
character pairs |
|