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.

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.

3voto

Mike Trpcic Punkte 24627

Python verfügt über einen zusätzlichen Stringtyp, der dreifache doppelte Anführungszeichen verwendet,

"""like this"""

Darüber hinaus können Sie in Perl jedes beliebige Trennzeichen verwenden,

q^ like this ^

Ich denke, dass die regulären Begrenzungszeichen für Zeichenketten in den meisten Fällen verwendet werden, weil sie sinnvoll sind. Eine Zeichenkette wird in Anführungszeichen eingeschlossen. Darüber hinaus sind die meisten Entwickler daran gewöhnt, ihren gesunden Menschenverstand zu benutzen, wenn es um Zeichenketten geht, so dass eine drastische Änderung der Darstellung von Zeichenketten eine schwierige Lernkurve sein könnte.

3voto

David Thornley Punkte 55244

Ah, Sie wollen also das altmodische FORTRAN, bei dem Sie zitieren, indem Sie die Anzahl der Zeichen in der Zeichenkette zählen und sie in ein H-Format einbetten, wie z. B.: 13HHello, World! . Als jemand, der in den Tagen, als der Name der Sprache noch in Großbuchstaben geschrieben wurde, einige Dinge mit FORTRAN gemacht hat, sind Anführungszeichen und deren Umgehung eine gute Sache. (Zum Beispiel ist man nicht völlig aufgeschmissen, wenn man bei der manuellen Zeichenzählung um ein Zeichen daneben liegt.)

Im Ernst: Es gibt keine ideale Lösung. Irgendwann wird es immer notwendig sein, eine Zeichenkette mit einem beliebigen Anführungszeichen zu haben. Aus praktischen Gründen müssen die Anführungszeichen auf der Tastatur liegen und leicht zugänglich sein, da sie häufig verwendet werden. Perl's q@...@ Syntax schlägt fehl, wenn eine Zeichenkette ein Beispiel für jedes mögliche Zeichen enthält. Die Hollerith-Konstanten von FORTRAN sind noch schlimmer.

3 Stimmen

+1 für Ye olde FORTRANe. Keiner spricht mehr mittelalterliches FORTRAN...

2voto

chills42 Punkte 13564

Denn niemand hat eine Sprache mit einem anderen Zeichen geschaffen, das sich durchgesetzt hat.

Ich denke, das liegt vor allem daran, dass die Nachfrage nach einer Änderung des Zeichens einfach nicht vorhanden ist. Die meisten Programmierer sind an das Standard-Zitat gewöhnt und sehen keinen zwingenden Grund, den Status quo zu ändern.

Vergleichen Sie das Folgende.

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.¤

Ich für meinen Teil habe nicht das Gefühl, dass die zweite Version einfacher oder besser lesbar ist.

1 Stimmen

Die Frage bezieht sich nicht so sehr auf die Lesbarkeit, sondern auf den Aufwand, der damit verbunden ist, dass man ständig Anführungszeichen entschlüsseln muss, sich merken muss, ob sie entschlüsselt sind, mögliche Angriffe abwehren muss, Benutzereingaben verifizieren muss usw. Wenn man ein Zeichen verwendet, um Zeichenketten einzuschließen, ist es dann nicht offensichtlich, dass es ein Zeichen sein sollte, das niemals in der Zeichenkette vorkommt? In anderen Kommentaren haben mehrere Leute gesagt, dass sie die Fähigkeit von qq in Perl und """ in Python aus diesen Gründen schätzen.

2voto

Javier Punkte 58737

Sie sagen, Sie müssten sich sehr anstrengen, um Anführungszeichen korrekt zu behandeln, aber das gilt nur für die Textdarstellung. Alle modernen Sprachen behandeln Zeichenketten als binäre Blöcke, so dass sie sich nicht um den Inhalt kümmern. Denken Sie daran, dass die Textdarstellung nur eine einfache Möglichkeit für den Programmierer ist, dem System mitzuteilen, was es tun soll. Sobald die Zeichenkette interniert ist, hat es keine Probleme mehr, die Anführungszeichen zu verwalten.

0 Stimmen

Das wäre schön, aber was ist mit der Erstellung von MySQL-Abfragen in PHP, bei denen man nur einen String sendet? Die Parametrisierung ist möglich, aber nicht einfach und die meisten Leute machen sich nicht die Mühe.

0 Stimmen

Zugegeben, SQL ist in dieser Hinsicht kaputt, aber das ist nicht die Schuld von PHP. 決して Variablenstrings in SQL-Text einfügen. immer Bindungen verwenden.

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