On Friday, 9 February 2018 at 16:44:32 UTC, Seb wrote:
Forget inout, it's seldomly used and there have even attempts to remove it from the language.

inout rox. I think this is more of a documentation discoverability problem. We should be having people read the spec, which is written toward compiler authors [!], when they want to just know how to use it.

Here's the basic rules of thumb:

If you don't need to change a variable:

1) use immutable when declaring a new variable

immutable myvar = "never gonna change";

2) if you are returning a member variable or function argument, use inout on both

class myclass {
   Object member;
   inout(Object) getMember() inout {
       return member;

inout(char)* identity(inout(char)* s) {
   return s;

inout is like const, just paired return value to arg, so notice that inout will appear twice in the typical signature when you use it.

3) use const when declaring function parameters. Exception: if you need to store the passed reference or pass it to another thread, then immutable may be the better choice.

void inspect(const char[] data) {}

Implicit conversion flowcharts are useful for a deeper understanding but are unnecessary for most effective use...

Reply via email to