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>

Reply via email to