Perché i linguaggi di programmazione più diffusi non utilizzano altri caratteri per delimitare le stringhe?[Chiuso]

StackOverflow https://stackoverflow.com/questions/965425

Domanda

Tutti i linguaggi di programmazione che conosco (Perl, Javascript, PHP, Python, ASP, ActionScript, Commodore Basic) utilizza virgolette singole e doppie per delimitare le stringhe.

Questo crea la situazione continua di dover andare a grandi lunghezze per trattare correttamente le virgolette, poiché la virgoletta è estremamente comune nel contenuto delle stringhe.

Perché i linguaggi di programmazione non vengono utilizzati qualche altro carattere per delimitare le stringhe, uno che non viene utilizzato nelle normali conversazioni , | O { } per esempio) così possiamo andare avanti con le nostre vite?

E' vero o sto trascurando qualcosa?Esiste un modo semplice per smettere di usare le virgolette per le stringhe in un linguaggio di programmazione moderno?

stampa <<<FINE
Lo so qui documento sintassi, ma per manipolazioni minori di stringhe è eccessivamente complicato e complica la formattazione.
FINE;

[AGGIORNAMENTO] Molti di voi hanno sottolineato bene l'importanza di utilizzare solo caratteri ASCII.Ho aggiornato gli esempi per riflettere che (il barra rovesciata, IL tubo E bretelle).

È stato utile?

Soluzione

Python ha un tipo di stringa supplementare, utilizzando virgolette triple,

"""like this"""

In aggiunta a questo, Perl consente di utilizzare qualsiasi delimitatore che si desidera,

q^ like this ^

Credo che per la maggior parte, i delimitatori di stringa regolari sono utilizzati perché hanno un senso. Una stringa è avvolto tra virgolette. In aggiunta a questo, la maggior parte degli sviluppatori sono abituati ad usare il loro buon senso quando si tratta di stringhe che drasticamente alterando il modo in cui le stringhe vengono presentati potrebbe essere una curva di apprendimento difficile.

Altri suggerimenti

Perl consente di utilizzare qualsiasi carattere che ti piace

 "foo $bar" eq
 qq(foo $bar) eq
 qq[foo $bar] eq
 qq!foo $bar! eq
 qq#foo $bar# etc

Meanwhile
 'foo $bar' eq
 q(foo $bar) eq
 q[foo $bar] eq
 q!foo $bar! eq
 q#foo $bar# etc

La sintassi si estende ad altre funzioni, tra cui le espressioni regolari, che è utile se avete a che fare con gli URI.

 "http://www.example.com/foo/bar/baz/" =~ /\/foo/[^\/]+\/baz\//;
 "http://www.example.com/foo/bar/baz/" =~ m!/foo/[^/]+/baz/!;

Attuale:Virgolette "macchina da scrivere".

Ci sono molti buoni motivi per utilizzare le virgolette che stiamo attualmente utilizzando:

  • Le virgolette si trovano facilmente sulle tastiere - quindi sono facili da digitare e devono essere facili, perché le stringhe sono necessarie così spesso.

  • Le virgolette sono in ASCII - la maggior parte degli strumenti di programmazione gestisce bene solo ASCII.Puoi utilizzare ASCII in quasi tutti gli ambienti immaginabili.E questo è importante quando stai riparando il tuo programma tramite una connessione telnet in qualche server molto lontano.

  • Le citazioni sono disponibili in molte versioni - virgolette singole, doppie, virgolette.Quindi una lingua può assegnare significati diversi a stringhe tra virgolette diverse.Queste citazioni diverse possono anche risolvere il problema delle "virgolette "dentro" le virgolette".

  • Le citazioni sono naturali - L'inglese utilizzava le virgolette per contrassegnare i passaggi di testo molto prima che arrivassero i linguaggi di programmazione.In linguistica le virgolette vengono usate più o meno allo stesso modo che nei linguaggi di programmazione.Le virgolette sono naturali allo stesso modo in cui + e - sono naturali per l'addizione e la sottrazione.

Alternativa:virgolette “tipograficamente” “corrette”.

Tecnicamente sono superiori.Un grande vantaggio è che puoi facilmente distinguere tra virgolette di apertura e di chiusura.Ma sono difficili da digitare e non sono in ASCII.(Ho dovuto inserirli in un titolo per renderli visibili in questo carattere StackOverflow.)

Si spera che un giorno, quando l'ASCII sarà qualcosa che interessa solo agli storici e le tastiere saranno cambiate in qualcosa di completamente diverso (se mai avremo delle tastiere), arriverà un linguaggio di programmazione che utilizza virgolette migliori...

Python ha un delimitatore di stringa alternativo con la tripla doppia citazione "" "Alcuni String" "".

Gli apici singoli e doppi apici sono utilizzati nella maggior parte delle lingue dal momento che è il delimitatore standard nella maggior parte delle lingue scritte.

Lingue (dovrebbero) cercare di essere il più semplice da capire il più possibile, e l'utilizzo di qualcosa di diverso da citazioni a che fare con le stringhe introduce inutili complessità.

Utilizzare le virgolette per definire un insieme di personaggi come separato dal testo che racchiude è più naturale per noi, e quindi più facile da leggere. Inoltre, "e 'sono sulla tastiera, mentre gli altri personaggi che hai citato non sono, quindi è più facile da digitare. Potrebbe essere possibile utilizzare un carattere che è ampiamente disponibile alle tastiere, ma non riesco a pensare a quello che ha vinto 't hanno lo stesso tipo di problema.

E: ho perso il carattere pipe, che può effettivamente essere una valida alternativa. Tranne che è attualmente ampiamente usato come l'operatore OR, e la questione leggibilità si è fermato.

Perché quelle di altri personaggi che hai elencato non sono ASCII. Non sono sicuro che siamo pronti, o bisogno di un linguaggio di programmazione in unicode ...

EDIT: Per quanto riguarda perché non usare {}, | o \, ben quei simboli già tutti hanno un significato nella maggior parte delle lingue. Immaginate C o Perl con due significati diversi per '{' e '}'!

| mezzi o, e in alcune lingue concatenare già stringhe. E come si ottiene \ n se \ era il delimitatore?

Fondamentalmente, io davvero non capisco perché questo è un problema. È \" davvero così difficile? Voglio dire, in C, è spesso necessario utilizzare \%, e \ e molti altri personaggi di due caratteri così ... Meh.

Perché nessuno ha creato un linguaggio utilizzando qualche altro personaggio che ha ottenuto popolare.

Credo che questo sia in gran parte perché la domanda per cambiare il personaggio non è solo lì, la maggior parte dei programmatori sono utilizzati per la citazione di serie e vedono alcuna ragione per cambiare lo status quo.

Confronto quanto segue.

print "This is a simple string."
print "This \"is not\" a simple string."

print ¤This is a simple string.¤
print ¤This "is not" a simple string.¤

Per quanto mi riguarda non mi sento come il secondo è più facile e più leggibile.

Ah, così si vuole all'antica FORTRAN, dove ci si citi contando il numero di caratteri della stringa e l'incorporamento in un formato H, come ad esempio: 13HHello, World!. Come qualcuno che ha fatto un paio di cose con FORTRAN indietro ai tempi in cui il nome della lingua era tutto in maiuscolo, virgolette e sfuggire loro sono una buona cosa. (Per esempio, non si è completamente avvitato se si è fuori da uno nel conteggio dei caratteri manuale.)

Scherzi a parte, non esiste una soluzione ideale. Sarà sempre necessario, ad un certo punto, di avere una stringa contenente qualunque carattere preventivo che ti piace. Ai fini pratici, i delimitatori di citazione devono essere sulla tastiera e facilmente accessibile, dato che sono molto utilizzati. sintassi q@...@ Perl fallirà se una stringa contiene un esempio di ogni carattere possibile. Costanti Hollerith di FORTRAN sono ancora peggiori.

Tu dici "dover andare alle grandi lunghezze per trattare correttamente le virgolette"; ma è solo nella rappresentazione del testo. Tutte le lingue moderne trattano le stringhe come binario blocchi, in modo che davvero non si preoccupano il contenuto. Ricordate che la rappresentazione del testo è solo un modo semplice per il programmatore per dire al sistema che cosa fare. Una volta che la stringa viene internato, non ha alcuna difficoltà a gestire le virgolette.

Una buona ragione sarebbe probabilmente che, se questa è l'unica cosa che si desidera migliorare una lingua esistente, non sei davvero la creazione di un nuovo linguaggio.

E se si sta creando un nuovo linguaggio, raccogliendo il carattere giusto per le citazioni di stringa è probabilmente modo modo verso il basso nella lista delle cose da fare delle cose per implementare realmente.

Si sarebbe probabilmente meglio fuori scegliere un delimitatore che esiste su tutte le tastiere comuni e set di rappresentazione del terminale, quindi la maggior parte di quelli che suggeriscono sono proprio fuori ...

E in ogni caso, un meccanismo citando sarà ancora necessaria ... si guadagna una riduzione del numero di volte che si utilizza citando a costo di rendere la lingua più difficile per non specialistico da leggere.

Quindi non è del tutto chiaro che questa è una vittoria, e poi c'è la forza dell'abitudine.

Ada non usa virgolette singole per le stringhe. Coloro che sono solo per i caratteri, e non c'è bisogno di essere sfuggito all'interno delle stringhe.

Trovo molto raro che il doppio apice arriva in una stringa di testo normale che io entro in un programma per computer. Quando lo fa, è quasi sempre perché sto passando che stringa in un interprete di comandi, e la necessità di incorporare un'altra stringa in esso.

mi immagino la ragione principale per nessuna di queste gli altri caratteri vengono utilizzati per delimitare le stringhe è che essi non sono nella tabella dei codici ASCII originale a 7 bit. Forse questo non è una buona scusa in questi giorni, ma in un mondo in cui la maggior parte dei progettisti di linguaggi hanno paura di invertire la sintassi C follemente scadente, non stanno per ottenere un sacco di acquirenti per una scelta insolita delimitatore di stringa.

Python permette di mixare le virgolette singole e doppie di mettere le virgolette nelle stringhe.

print "Please welcome Mr Jim 'Beaner' Wilson."
>>> Please welcome Mr Jim 'Beaner' Wilson.

print 'Please welcome Mr Jim "Beaner" Wilson.'
>>> Please welcome Mr Jim "Beaner" Wilson

È anche possibile utilizzare le virgolette triple menzionati in precedenza. Questi si estendono anche su più righe per consentire di mantenere anche da dover stampare nuove righe.

print """Please welcome Mr Jim "Beaner" Wilson."""
>>> Please welcome Mr Jim "Beaner" Wilson

Infine, è possibile stampare le stringhe allo stesso modo di tutti gli altri.

print "Please welcome Mr Jim \"Beaner\" Wilson."
>>> Please welcome Mr Jim "Beaner" Wilson
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top