4 ms·
I hate such kind of magic. Very convenient at first but can cause countless hours spent on debugging in some cases. I like how Scala does this via the indent m
by hashhar 6y ago
I hate such kind of magic. Very convenient at first but can cause countless hours spent on debugging in some cases.
I like how Scala does this via the indent marker and strip.
- e12e 6y agoI was going to answer gp "probably not" - but I would've been wrong. It looks to me like Java now has some of the most sophisticated in-line multi-line strings/here-documents that I'm aware of in any language. More details in: https://openjdk.java.net/jeps/378 https://openjdk.java.net/jeps/378 I'm not entirely sure "most sophisticated" is entirely a good thing - but the jep looks pretty thorough at least. Ed: how does Scala do it? Java uses the indents for the closing triple-quote to determine stripping/indent + cutting trailing spaces. Ie, if my reading is correct: a = """ OK. """ Is "OK.\n" (even if there are any spaces after the dot).
- chadrs 6y agoAt the string literal level doesn't do anything, but the standard library adds an extension method to string called `stripMargin`. This has some nice examples https://www.oreilly.com/library/view/scala-cookbook/9781449340292/ch01s03.html https://www.oreilly.com/library/view/scala-cookbook/97814493...
- electrum 6y agoThe indentation is removed at compile time, per the JLS: https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10.6 https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.htm... > Incidental white space is removed, as if by execution of String.stripIndent on the characters resulting from step 1. The new stripIndent() method is provided as a convenience to developers.
- Nullabillity 6y agoThat's for Java, the parent is talking about Scala.
- dfinninger 6y agoI had to use this recently for an online course. It was super nice: def pushConstant(num: Int): String = s""" |@$num |D=A |$accessTopOfStack |M=D |$incrementStackPointer |""".stripMargin accessTopOfStack and incrementStackPointer are other functions that return text. It made composing Assembly a breeze.
- rad_gruchalski 6y agoYup, and it’s super nice for json or yaml strings.
- CydeWeys 6y agoIt helps that Java is exclusively a compiled programming language, so these are just syntactic sugar concerns for the parser/lexer and the compiled bytecode ends up looking identical to having just used one long string with inline \n. So given that, I don't think it really ends up being that sophisticated. I think this could be a decent easy programming question for a technical interview though!
- electrum 6y agoIntelliJ shows you exactly where the block starts, so if you have a line with less indentation (causing the entire block to start at that column), it is easy to spot.
- hashhar 6y agoThanks for sharing that. I can definitely see myself using the multi-line blocks since they are much better than the kind of things we need to do today. At the same time I'm slightly scared of that magic. It helps that it's well-defined in the JEP.