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\n
su 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?