12 Stimmen

Warum verwenden gängige Programmiersprachen keine anderen Zeichen zur Abgrenzung von Zeichenketten?

Jede Programmiersprache, die ich kenne (Perl, Javascript, PHP, Python, ASP, ActionScript, Commodore Basic) verwendet einfache und doppelte Anführungszeichen zur Abgrenzung von Zeichenketten .

Dies führt dazu, dass man sich immer wieder an folgende Stellen wenden muss große Längen um Anführungszeichen korrekt zu behandeln, da das Anführungszeichen im Inhalt von Zeichenketten sehr häufig vorkommt.

Warum verwenden Programmiersprachen nicht ein anderes Zeichen zur Abgrenzung von Zeichenketten ein Begriff, der im normalen Sprachgebrauch nicht verwendet wird \, | oder { } zum Beispiel), damit wir einfach mit unserem Leben weitermachen können?

Stimmt das, oder übersehe ich etwas? Gibt es eine einfache Möglichkeit, in einer modernen Programmiersprache keine Anführungszeichen mehr für Zeichenketten zu verwenden?

drucken <<<END
Ich weiß von hier dokumentieren Syntax, aber für kleinere Zeichenkettenmanipulationen ist sie übermäßig kompliziert und erschwert die Formatierung.
ENDE;

[UPDATE] Viele von Ihnen haben darauf hingewiesen, wie wichtig es ist, nur ASCII-Zeichen zu verwenden. Ich habe die Beispiele aktualisiert, um dies zu berücksichtigen (die Backslash die Rohr y Hosenträger ).

6 Stimmen

Sie sagen, dass Programmierer gehen müssen große Längen Anführungszeichen in Zeichenketten zu verwenden - aber warum? Ich kenne keine Programmiersprache, die nicht über einen anständigen und recht einfachen Escape-Mechanismus für Anführungszeichen in Strings verfügt.

1 Stimmen

Dafür gibt es viele Gründe: PHP hat magische Anführungszeichen, die manchmal ein- und manchmal ausgeschaltet sind, was bedeutet, dass unerfahrene Programmierer nicht sicher sind, ob sie Anführungszeichen auslassen sollen. Außerdem muss man beim Speichern, Drucken, bei der Verwendung von Funktionen wie eval() usw. immer im Auge behalten, ob eine Zeichenkette escaped ist oder nicht. Und das bedeutet, dass das Risiko einer Sql-Injection für Leute, die keine Best Practices anwenden, dramatisch ansteigt.

0 Stimmen

Wie viele Tastenanschläge benötigen Sie, um diese Zeichen (¤, |, § oder µ) zu erhalten? Alles über 2 ist (IMO) weniger produktiv als die Verwendung von einfachen oder doppelten Anführungszeichen selbst.

12voto

Quentin Punkte 850700

Mit Perl können Sie alle Zeichen, die Sie mögen

 "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

Die Syntax erstreckt sich auch auf andere Funktionen, einschließlich regulärer Ausdrücke, was praktisch ist, wenn Sie mit URIs arbeiten.

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

0 Stimmen

Danke, ich wusste nichts von dieser Notation.

0 Stimmen

Ich verwende oft # für reguläre Ausdrücke, weil ich oft Schrägstriche in ihnen haben möchte, und ich will nicht, dass sie wie die erste Zeile in Ihrem zweiten Beispiel enden.

8voto

Rene Saarsoo Punkte 13323

Aktuell: "Schreibmaschinen"-Anführungszeichen

Es gibt viele gute Gründe für die Anführungszeichen, die wir derzeit verwenden:

  • Anführungszeichen sind auf Tastaturen leicht zu finden - so dass sie leicht zu tippen sind, und das müssen sie auch sein, denn Zeichenketten werden so oft benötigt.

  • Anführungszeichen sind in ASCII - Die meisten Programmierwerkzeuge können nur ASCII gut verarbeiten. Sie können ASCII in fast jeder erdenklichen Umgebung verwenden. Und das ist wichtig, wenn Sie Ihr Programm über eine Telnet-Verbindung auf einem weit entfernten Server reparieren.

  • Zitate gibt es in vielen Versionen - einfache Anführungszeichen, doppelte Anführungszeichen, hintere Anführungszeichen. So kann eine Sprache den verschiedenen Anführungszeichen unterschiedliche Bedeutungen zuweisen. Diese verschiedenen Anführungszeichen können auch das Problem der "Anführungszeichen in Anführungszeichen" lösen.

  • Zitate sind natürlich - Im Englischen wurden Anführungszeichen zur Kennzeichnung von Textpassagen verwendet, lange bevor Programmiersprachen folgten. In der Linguistik werden Anführungszeichen auf dieselbe Weise verwendet wie in Programmiersprachen. Anführungszeichen sind so natürlich, wie + und - für Addition und Subtraktion natürlich sind.

Alternativ: "typografisch" "korrekte" Anführungszeichen

Technisch gesehen sind sie überlegen. Ein großer Vorteil ist, dass man leicht zwischen öffnenden und schließenden Anführungszeichen unterscheiden kann. Aber sie sind schwer zu schreiben und sie sind nicht in ASCII. (Ich musste sie in eine Überschrift setzen, um sie in dieser StackOverflow-Schriftart überhaupt sichtbar zu machen.)

Hoffentlich gibt es eines Tages, wenn ASCII nur noch Historikern ein Begriff ist und Tastaturen sich in etwas völlig anderes verwandelt haben (wenn wir überhaupt noch Tastaturen haben werden), eine Programmiersprache, die bessere Anführungszeichen verwendet...

0 Stimmen

Latex unterscheidet zwischen offenen (auch Backtick genannt) und geschlossenen (auch Apostroph genannt) Anführungszeichen mit Hilfe von ASCII-Symbolen und einer Standard-US-Tastatur. Das setzt natürlich voraus, dass der Programmierer zwei Symbole für doppelte Anführungszeichen eintippt und dass das System einigermaßen intelligent mit den Anführungszeichen umgeht. NB: Man kann einen Backtick in einem Kommentar nicht auslassen, um ihn anzuzeigen...

5voto

Scott Bevington Punkte 1181

Python bietet mit dem dreifachen doppelten Anführungszeichen """Some String""" ein alternatives Zeichenfolgentrennzeichen.

In den meisten Sprachen werden einfache und doppelte Anführungszeichen verwendet, da dies in den meisten Schriftsprachen das Standardbegrenzungszeichen ist.

0 Stimmen

Danke, das ist eine wirklich nützliche Technik, die ich vergessen hatte.

1 Stimmen

Mit "Standardtrennzeichen in den meisten Schriftsprachen" kann ich nicht einverstanden sein. Die Franzosen zum Beispiel benutzen " und " - was benutzen die Chinesen? Und so weiter und so fort. Besser wäre es zu sagen, dass es sich um "das Standard-Trennzeichen im Englischen" handelt.

0 Stimmen

Ja, das ist einer der Gründe, warum ich Python liebe. Ich glaube, ich verwende """ für jede Zeichenkette, die länger als zwei Zeichen ist.

4voto

Artur Soler Punkte 2892

Sprachen (sollten) versuchen, so einfach wie möglich zu verstehen zu sein, und die Verwendung von etwas anderem als Anführungszeichen für Zeichenketten führt zu unnötiger Komplexität.

0 Stimmen

Ich verstehe, dass Programmiersprachen versuchen, sich wie geschriebene Sprachen zu lesen, aber es ist schwierig zu argumentieren, dass die Verwendung von Anführungszeichen zur Abgrenzung von Zeichenketten die Komplexität reduziert - wir müssen ständig um sie herum arbeiten, und sie führen zu enormen Sicherheitsbedenken.

2 Stimmen

Sicherheitsbedenken bleiben bestehen, unabhängig davon, welches Fluchtzeichen Sie wählen, denn sie gehen an absichtlich Bosheit...

1 Stimmen

Die Frage ist, ob dies zu unnötiger Komplexität führt. Wenn eine andere Anführungszeichenschreibweise echte Vorteile hätte, könnten wir sie lernen und verwenden, so wie wir auch alle anderen seltsamen Satzzeichen gelernt haben.

3voto

Brian Postow Punkte 10745

Denn die anderen Zeichen, die Sie aufgelistet haben, sind nicht ASCII. Ich bin nicht sicher, ob wir für eine Programmiersprache in Unicode bereit sind oder sie brauchen...

EDIT: Zur Frage, warum man nicht {}, | oder \ verwendet, ist zu sagen, dass diese Symbole in den meisten Sprachen bereits Bedeutungen haben. Stellen Sie sich C oder Perl mit zwei verschiedenen Bedeutungen für "{" und "}" vor!

| bedeutet "oder", und in einigen Sprachen werden Zeichenketten bereits verkettet. und wie würde man \n wenn \ das Begrenzungszeichen war?

Im Grunde genommen sehe ich nicht, warum das ein Problem ist. Ist "\" wirklich so schwer? Ich meine, in C muss man oft \% und \ und verschiedene andere Zwei-Zeichen-Zeichen verwenden, also... Meh.

0 Stimmen

Sehr guter Punkt. Da sich das Web jedoch weiterentwickelt, werden fast alle größeren Projekte schließlich in andere Sprachen portiert. Die Unterstützung fast aller wichtigen Sprachen außerhalb des Englischen erfordert UTF-8, oder zumindest mehr als ASCII. Daher unterstützen die meisten professionellen Texteditoren jetzt UTF-8 und andere Zeichensätze, und ich erwarte, dass sich dieser Trend fortsetzen wird.

1 Stimmen

Sicherlich kann der Redakteur das erledigen. Aber kann das auch der Compiler? Sollen wir uns die Mühe machen?

1 Stimmen

Es ist jedoch nicht notwendig, die UTF-8-Kodierung in Ihrem Quellcode zu verwenden, um eine Anwendung zu erstellen, die Unicode unterstützt, und ich vermeide es immer, tatsächliche Nicht-Ascii-Zeichen in meinem Code zu schreiben, und bevorzuge maskierte Formen, z. B. " \xC2\x88 " oder was immer angesichts der Sprache angemessen ist. Ich denke, es gibt immer noch ein gutes Argument dagegen, Nicht-Ascii-Zeichen im Quelltext zu verlangen, aus Gründen der Interoperabilität, selbst für Software, die Unicode unterstützt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X