- 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
doinside immediatly invoked function is making a little sense because most point to usedois not to use immediatly invoked functionI have run in to the same issue as Jamesernator and I'm also think that
async dowill fit very well. Likedois a replacement of() =>andasync dois a replacement ofasync () =>