[swift-evolution] multi-line string literals.

Ricardo Parada rparada at mac.com
Mon Apr 3 09:29:24 CDT 2017


I think we should focus on taking care of 99% of the cases.  If you have a very long string then you use the good old fashioned string literal concatenation:

Let veryLongString2 = "word word word"
	+ "word word word"
 	+ "word word word"


By the way, the multi-line string should allow \n\n, or as many as you may want to throw in there.  I don't see a problem with that.



> On Apr 3, 2017, at 10:23 AM, Adrian Zubarev <adrian.zubarev at devandartist.com> wrote:
> 
> At quick glance I disagree with (4). If your current string would contain something like "\n\n" would you really use another empty line with a single unescaped quote? If you’re not, you’ll end up adding a single \n, but that on the other than would be strange if you add it at the end of the line.
> 
> Multi-lined strings should not be abused for adding new lines to the string itself, however I’m fine with allowing single quotes without escaping them. 
> 
> If we’d really go that path then I still could not format some really long hardcoded text for code readability in a multi lined string, just because of the fact that it will alter my original string by automatically adding new line characters.
> 
> let veryLongString1 = "word word word … word word word"
> 
> let veryLongString2 = """word word word  
>     word word word
>>     word word word
>     word word word"""
>      
> // Logically that string should be the same, however during the  
> // automatic new lines we'll get this
> 
> veryLongString1 == veryLongString2 // => false
> What has the multi lined string solved here? Nothing.
> 
> 
> 
> 
> -- 
> Adrian Zubarev
> Sent with Airmail
> 
> Am 3. April 2017 um 16:00:53, Ricardo Parada (rparada at mac.com <mailto:rparada at mac.com>) schrieb:
> 
>> What is the purpose of that backslash?  It does not feel like an improvement. 
>> 
>> I think we should focus on:
>> 
>> 1. Looking pretty
>> 2. Allow unescaped quote, double quote as well single/double apostrophe characters 
>> 3. Allow interpolation 
>> 4. No need to add the \n character for each line
>> 5. It should have a continuation character
>> 6. Keep it simple
>> 
>> Something like this:
>> 
>> let xml = M"<?xml version="1.0"?>
>>            "<catalog>
>>            " <book id="bk101" empty="">
>>            "     <author>\(author)</author>
>>            " </book>
>>            "</catalog>
>> Or maybe this:
>> 
>> let xml = """<?xml version="1.0"?>
>>             "<catalog>
>>             " <book id="bk101" empty="">
>>             "     <author>\(author)</author>
>>             " </book>
>>             "</catalog>
>> In the first example the multiline literal is started with M".  In the second example it starts with three double quotes """.  I really have no preference.  In both examples there is no need to have a \ or \n at the end of the line.
>> 
>> You can have quote characters in the string, including double quotes as shown by empty="".  You can have interpolation, i.e. \(author). 
>> 
>> You have a continuation character which helps as a visual guide and as a marker for the beginning of each line.
>> 
>> The multi string literal ends when there are no more continuation characters.
>> 
>> 
>> 
>>> On Apr 3, 2017, at 3:01 AM, Adrian Zubarev via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>> 
>>> Hello Swift community,
>>> 
>>> on Github there is a PR for this proposal, but I couldn’t find any up to date thread, so I’m going to start by replying to the last message I found, without the last content.
>>> 
>>> I really like where this proposal is going, and my personal preference are *continuation quotes*. However the proposed solution is still not perfect enough for me, because it still lacks of precise control about the trailing space characters in each line of a multi-line string.
>>> 
>>> Proposed version looks like this:
>>> 
>>> let xml = "<?xml version=\"1.0\"?>
>>>     "<catalog>
>>>     "    <book id=\"bk101\" empty=\"\">
>>>     "        <author>\(author)</author>
>>>     "        <title>XML Developer's Guide</title>
>>>     "        <genre>Computer</genre>
>>>     "        <price>44.95</price>
>>>     "        <publish_date>2000-10-01</publish_date>
>>>     "        <description>An in-depth look at creating applications with XML.</description>
>>>     "    </book>
>>>     "</catalog>
>>>     ""
>>> I would like to pitch an enhancement to fix the last tiny part by adding the escaping character ‘' to the end of each line from 1 to (n - 1) of the n-lined string. This is similar to what Javascript allows us to do, except that we also have precise control about the leading space character through ’"’.
>>> 
>>> The proposed version will become this:
>>> 
>>> let xml = "<?xml version=\"1.0\"?>\   
>>>     "<catalog>\ // If you need you can comment here
>>>     "    <book id=\"bk101\" empty=\"\">\
>>>     "        <author>\(author)</author>\
>>>     "        <title>XML Developer's Guide</title>\
>>>     "        <genre>Computer</genre>\
>>>     "        <price>44.95</price>\
>>>     "        <publish_date>2000-10-01</publish_date>\
>>>     "        <description>An in-depth look at creating applications with XML.</description>\
>>>     "    </book>\
>>>     "</catalog>\
>>>     ""
>>> Here is another example:
>>> 
>>> let multilineString: String = "123__456__\ // indicates there is another part of the string on the next line
>>>                               "__789_____\ // aways starts with `"` and ends with either `\` or `"`
>>>                               "_____0_" // precise control about pre- and post-space-characters
>>> 
>>> let otherString = "\(someInstance)\ /* only comments are allowed in between */ "text \(someOtherInstance) text"
>>> This is simply continuation quotes combined with backslash concatenation.
>>> 
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> Adrian Zubarev
>>> Sent with Airmail
>>> 
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170403/210ea09b/attachment.html>


More information about the swift-evolution mailing list