- expression-oriented programming one of the great advances of FP
- expressions plug together like legos, making more malleable programming experience in-the-small
Write in an expression-oriented style, scoping variables as locally as possible:
let x = do {
let tmp = f();
tmp * tmp + 1
};
Use conditional statements as expressions, instead of awkward nested ternaries:
let x = do {
if (foo()) { f() }
else if (bar()) { g() }
else { h() }
};
Especially nice for templating languages like JSX:
return (
<nav>
<Home />
{
do {
if (loggedIn) {
<LogoutButton />
} else {
<LoginButton />
}
}
}
</nav>
)
- key refactoring principles:
do { <expr>; }
equivalent to<expr>
(do { <stmt> };)
equivalent to{ <stmt> }
- this semantic transparency is demonstrated by the semantics:
- Return the result of evaluating Body.
How to avoid either parsing conflict in statement context with do
-while
, or dangling-else type of ambiguity:
do do f(); while (x);
I have several alternatives I intend to explore here.
@isiahmeadows your approch to use
do
inside immediatly invoked function is making a little sense because most point to usedo
is not to use immediatly invoked functionI have run in to the same issue as Jamesernator and I'm also think that
async do
will fit very well. Likedo
is a replacement of() =>
andasync do
is a replacement ofasync () =>