Monday, 5 April 2010
There's been an explosion in the ASCII factory.
« Nifty app: Nocturne | Main | Scala / TestNG gotcha with result type inference »I always thought this sentence was reserved for Perl, but I recently discovered that this can unfortunately also be applied to Scala. Scala supports operator overloading (although technically it's not), so we see the good and the bad sides of this.
Representing the good side, you have the parser/combinators library that comes with scala. It implements a DSL that looks very natural if you're already familiar with the BNF form.
The dubious honour for representing the bad side in this case goes to the Dispatch library. I was looking for a library that would allow me to make some calls to a restful service (couchdb in this case), and came upon it.
It has some of the worst abuses of operator I've seen in a while. Look at the following lines you can find in the introduction docs:
import dispatch._
val http = new Http
val req = :/("example.com") / "path"
val rhead = req <:> Map("Cache-control" -> "no-cache")
http(req / "somefile.xml" <> { _ \\ "book" })
val rauth = req as ("user", "secret")
val rquery = req <<? Map("key" -> "value")
val rform = req << Map("key" -> "value")
http(req >~ { _.getLines.foreach(println) })
val rsec = req.secure
Now, I left out the comments above each line that explain what the code does, but that is my whole point. There is now no longer any way for someone not already very familiar with Dispatch to have any idea whatsoever about what that code does. Even if I were to write code using this library, I'm certain that I'd have trouble figuring out what it exactly does again only a week later.
It really feels to me that the author of this library has an innate hatred against the alphabetic part of his keyboard. There's i.m.o. no other justification for letting "<<?" mean "add a query string to the request".
Even a javastyle req.setQuery(Map(...)) would have been much better, rememberable and readable.
If libraries like Dispatch represent how idiomatic scala will be written, I'll be looking for another language to succeed java.
A small bonus :)
("@ , There's been
°!& 0 an explosion
#^a /|\ at the ASCII
`;< | factory!!!!
@a / \
Technorati Tags: scala dispatch operator overloading
Posted by at 10:29 PM in Java
[Trackback URL for this entry]
