On Sunday, 5 June 2022 at 14:24:39 UTC, Ali Çehreli wrote:
[...]
struct S {
int[] a;
int[] b;
void add(int i) { // <-- Both arrays always same size
a ~= i;
b ~= i * 10;
}
void foo() {
assert(a.length == b.length); // <-- Invariant check
// ...
}
}
void main() {
auto s = S();
s.add(42);
s.foo();
}
The code is written in a way that both arrays will *always*
have equal number of elements.
I think this is what Sean Parent called "incidental data
structure" [1]. I would refactor the code:
struct T {
int a;
int b;
}
struct S {
T [] t;
void add(int i) {
t ~= T (i, i * 10);
}
void foo() {
// Look Ma no assert!
// ...
}
}
void main() {
auto s = S();
s.add(42);
s.foo();
s.a ~= 1; // does not compile
s.foo();
}
```
[1] <https://www.google.de/search?q=incidental+data+structures>