blob: 326a30625a4d128d1bf093298ea1506722df066d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
if-then-else interlude
======================
It is common to have a sequence of else-if that depend on a common value
that can't be obtained at the beginning of the if's.
One way is to use nested if-else's, but then the indentation gets deep quickly.
Solution with nested if-else's
------------------------------
This can lead to deep indentations.
if read_type() == .greyscale {
int v = read_number()
...
} else {
int r = read_number()
int g = read_number()
int b = read_number()
if (r > 128 && g < r) {
...
} else if (b > 128 && g < b) {
...
} else {
...
}
}
Solution with "interlude" clause
--------------------------------
if read_type() == .greyscale {
int v = read_number()
...
} interlude {
int r = read_number()
int g = read_number()
int b = read_number()
} else if (r > 128 && g < r) {
...
} else if (b > 128 && g < b) {
...
} else {
...
}
Solution with "with" statement
------------------------------
if read_type() == .greyscale {
int v = read_number()
...
} else
with int r = read_number()
with int g = read_number()
with int b = read_number()
if (r > 128 && g < r) {
...
} else if (b > 128 && g < b) {
...
} else {
...
}
As a bonus, this can also be used with loops:
with Sponge sp = get_sponge()
while sp.squeeze() {
...
}
# sp goes out of scope here.
# no risk of accidental usage after loop.
|