On Monday, 25 March 2019 at 20:59:41 UTC, Rubn wrote:
I guess obligatory http://jmdavisprog.com/articles/why-const-sucks.html

Good to read a different take on the subject. Jonathan uses a lot of arguments that I recognize (and adds a few that I didn't encounter in my project). I am a firm believer of using the type system and the compiler to aid development. Personally, I found it supplemental to the way I write code (with a strong DDD influence).

I've also tried to use pure, but (ironically) I found it harder to use. I think it's easier to understand when an object will be mutated or not than to predict whether there are side effects.

Would be nice to see the source code for this mahjong game as well.

https://github.com/Zevenberge/Mahjong

I've been learning on the job, so there are a few quirks of earlier times that managed to avoid the blade of refactoring (including a case I discovered yesterday where mutable state could potentially leak). In general, I'm quite happy with it though.

The code for the example in the blog is, among others:
https://github.com/Zevenberge/Mahjong/blob/master/source/engine/flow/turn.d
We are looking at a part of the state machine modelling the various moments (phases) in a mahjong turn, more precisely the action decided by the turn player (e.g. discard or declare a win). A message is sent to the players (UI or AI). The message exposes a read-only view on all game data relevant for making a decision. Manipulations can only be done through predefined methods in the message (conceptually a return message). This means that the turn player can declare a win through a method in the message, but not restart the game, as that would require access to a mutable game object.

Reply via email to