DEV Community

State transitions (i.e. Elm messages/React actions etc.): Past or imperative tense?

Nimmo on March 01, 2019

Do you have an opinion over which helps either you or your colleagues reason about your applications better? Past tense: DetailsUpdated Imperativ...
Collapse
 
skaterdad profile image
Mike • Edited

I personally use the imperative tense.

Since messages in Elm are a declarative, I feel it makes sense to name the action according to what it will do. It would feel strange seeing a past-tense name when reading the code which actually triggers an action.

 [ button [ onClick StartGame ] [ text "Start Game" ]

vs

 [ button [ onClick GameStarted ] [ text "Start Game" ]
Collapse
 
nimmo profile image
Nimmo

The string passed to text in the second example would still be "Start Game" of course. But yes, that in itself is a good example of the trade-off being made if you're using past-tense for messages.

Collapse
 
skaterdad profile image
Mike

Thanks for catching that. Fixed the code block.

Thread Thread
 
nimmo profile image
Nimmo

I feel the same re: naming the action according to what it will do, for what it's worth. I'm just starting to wonder if perhaps it makes more sense to name them based on how they're used, you know what I mean?

By the time the application is processing the message, the message in question has already been sent by the user; so when you look at it in the debugging tools (in debug mode of course), it feels like it makes more sense to be in past tense. Hmm...

Thread Thread
 
skaterdad profile image
Mike

I get your point, but it's only in the dev tools or logs where that comes up.

Most of my time is spent reading the source code, so I optimize for that.

If a new person from your team reads your .elm file for the first time, the imperative message names make the intention of the code more clear.

What might be neat is if the dev tools could accept a function that lets you translate Msg names to a "display name". Then you get the best of both styles.

Thread Thread
 
nimmo profile image
Nimmo

I'm really thinking out loud here btw, rather than actively trying to convince you (or me) that this is a change worth making.

Collapse
 
tamcarre profile image
Tam CARRE • Edited

My approach:

button [ onClick StartGameClicked ] [ text "Start Game" ]
Enter fullscreen mode Exit fullscreen mode

GameStarted is a lie, and StartGame implies that the view is somehow responsible for telling the update what to do. I prefer the view to be a pure description of the UI with messages describing what has happened. The view dispatches a StartGameClicked event, which is purely factual, and the update is free to create a new model based on this in whatever way it wants to.

Collapse
 
dwayne profile image
Dwayne Crooks

I like the advice given in this talk,

and/or in this comment.