In, ad esempio, il linguaggio di scripting di Bash, quanto segue crea una stringa chiamata $VAR che inizia alla prima virgola " e continua fino alla prossima citazione " senza escape.
$VAR="
hello
world!
this string preserves all
whitespace"
Questo rende molto facile scrivere stringhe multiline senza concatenazione o un milione fastidioso \n s ovunque, e rende il parser molto facile da scrivere (parlando dall'esperienza) perché puoi solo trangugiare tutto tra virgolette senza escape con una regex come "([^"\]*(?:\.[^"\]*)*)" o giù di lì.
Bash è (si spera!) non un linguaggio mission-critical o di programmazione dei sistemi, ma è un linguaggio di scripting per sistemi destinato a caselle * nx su cui tutto è testo, quindi forse è apt .
Ricorda che Bash è scritto in C, e quindi questa stringa è (probabilmente) memorizzata come \n\thello\nworld\n etc, ma il punto è la fonte scritta dal programmatore (e quanto sopra è molto più leggibile ).
Molti linguaggi "appropriati" (a mio avviso influenzato da C) utilizzati per scopi reali trovano alcuni problemi sconosciuti che consentono alle stringhe di contenere righe nuove letterali e quindi richiedono uno o più dei seguenti elementi:
-
escape sequences
\n(che viene compilato in\r\nsu Windows) -
sintassi speciale (
""" multiline string """in Py,'multiline string'in Go oR" raw string literal "in C ++ 11, ecc.) -
funzioni speciali per scrivere nuove righe (di Forth
CR, ad esempio, anche se Forth ottiene un passaggio perché conosce lo squat sulle stringhe)
Non capisco perché più lingue non consentono alle stringhe di essere "implicitamente" multiline.
Pro:
-
facilità d'uso e amp; praticità, codice più chiaro, ecc.
-
parser più semplice, più diretto e quindi più gestibile (almeno per quelli scritti a mano)
Contro:
-
può rendere un po 'meno leggibile il codice, in caso di abuso
-
Esiste una ragione esplicita in questo caso, o è stata solo ciecamente (?) adottata da C come tante altre cose? Inoltre, se sto scrivendo un parser o progettando un linguaggio, c'è un argomento convincente sul perché dovrei limitare i letterali di stringa a una singola riga?