On Tuesday, 28 April 2015 at 19:30:06 UTC, tcak wrote:
Is there any way to define a variable or an attribute as read-only without defining a getter function/method for it?

Thoughts behind this question are:
1. For every reading, another function call process for CPU while it could directly read the value from memory.

2. Repetition of same name for variable and getVariableName. (Some might not agree with this but I like the code when it looks nice.)

an quick attempt:

---
union ReadOnlyOutside(T)
{
    alias value this;
    private T _value;
    public const T value;
}
---

when you declare such a variable inside a struct or a class, the code located in another module won't be able to modify the value:

module1:

---
struct Foo
{
    ReadOnlyOutside!size_t roField;
}
---

module2:

void something(ref Foo foo)
{
    writeln(foo.roField); // OK
    writeln(foo.roField.value); // OK
    foo.roField = 1; // FAIL
    foo.roField.value = 1,// FAIL (because const).
    foo.roField._value = 1,// FAIL (because not visible).
}

Reply via email to