Update on String Templates (JEP 459)
Guy Steele
guy.steele at oracle.com
Tue Mar 19 17:41:37 UTC 2024
On Mar 19, 2024, at 10:23 AM, Brian Goetz <brian.goetz at oracle.com> wrote:
Let's pull on this string some more. Assuming we settled on disjoint types and syntaxes, with no magic conversions, what library support do we need directly for ST? I am thinking (please, let's focus on the functionality before we nitpick the names):
// on String
static join(StringTemplate) // previously STR
I assume the return type for the preceding method should be `String`.
// on StringTemplate
String join() // STR, instance/suffix version
static StringTemplate join(StringTemplate...) // + for string templates
This is a pleasantly short set; is anything missing? (Not addressing the "which things were previously processors, but now need API points" right now -- that's a separate discussion.)
Actually, Brian, I _am_ going to nitpick your use of the name “join” here for all three of those methods, because, given the comments, they do very different things; the first two do “string interpolation” on a single template (and in the process convert the values in the template to strings) whereas the last combines multiple templates into a single template (but does not convert any of the values to strings).
Moreover, the existing `join` method of String does yet a different operation: concatenate a sequence of strings, using a given delimiter string (repeatedly, if necessary) as a separator. So I think “join” was a particularly infelicitous choice of name for these three examples.
Here I set forth your three examples with new names that are related to those already used in the existing preview implementation of StringTemplate in JDK 21 (and JDK 22—I just checked). I do this not to suggest that these other names should be used, but only in the hopes of reducing confusion as we begin this discussion. Later we can decide whether the names “process” and “interpolate” and “combine” should be changed (possibly all into the same single name).
// on String
static String process(StringTemplate) // previously STR
// on StringTemplate
String interpolate() // STR, instance/suffix version
static StringTemplate combine(StringTemplate...) // + for string templates
—Guy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-spec-experts/attachments/20240319/10aff3d1/attachment.htm>
More information about the amber-spec-experts
mailing list