Fine, so we have the following code
Routes.get("/customer',
basicAuthentication
{
log.write("Inline logging dude")
next()
},
{
response.send(customer)
}
)
It's very pretty, I like the way that these blocks fall off each other. Let's compare it to
app.get('/customer',
basicAuthentication,
function(req, res, next) {
log.write("Logging")
next()
},
function(req, res) {
res.send(customer)
}
)
What's the difference? Well for my money, I prefer the latter because I have req, res and next completely local to the function that is handling that particular step.
Sticking them as "members of the container class" doesn't give you a clear indication of scope or intent, they're further away from the real action and make the code slightly more opaque when you're skimming it over in a monday morning tweet.
Indidentally is this one of the reasons I'm not enjoying Ruby/Rails - lots of methods are springing into existence in the global scope "because", "magic", I prefer the explicit and the local over the magic and distant.
Yeah - it's a trade-off and personal preference - having now experienced the far end of the spectrum in the Rails world and the other end in the JS world (CommonJS means it's pretty hard to get magic global functions in your JS), I'm pretty hardline on "knowing where stuff comes from"
Kotlin's way of building up DSLs is an interesting compromise between the two and I'm not saying I don't like it - it's still far better than global magic.