Frage

Wir tun eine Menge von lexikalischen Verarbeitung mit beliebigen Zeichenketten, die willkürliche Interpunktion enthalten. Ich bin geteilt, ob magische Zeichen / Strings oder symbolische Konstanten zu verwenden.

Diese Beispiele sollen als sprachunabhängig gelesen werden, obwohl die meisten sind Java.

Es gibt klare Beispiele, bei denen Zeichensetzung eine semantische Rolle und soll als eine Konstante identifiziert werden:

File.separator nicht "/" oder "\\"; // ein Kinderspiel, wie es ist OS-abhängige

und ich schreibe XML_PREFIX_SEPARATOR = ":";

Allerdings sagen wir, ich brauche alle Beispiele von "" mit einem leeren String ersetzen ``. Ich kann schreiben:

s = s.replaceAll("\"\"", "");

oder

s = s.replaceAll(S_QUOT+S_QUOT, S_EMPTY);

(I definiert haben alle gängigen Interpunktion als S_FOO (string) und C_FOO (char))

Zu Gunsten der magischen Saiten / Zeichen:

  1. Es ist kürzer
  2. Es ist natürlich zu lesen (manchmal)
  3. Die genannten Konstanten können nicht vertraut sein (C_APOS vs '\'')

Zugunsten Konstanten

  1. Es ist schwieriger zu Tippfehlern (zum Beispiel Kontrast "''" + '"' mit S_APOS+S_APOS + C_QUOT)
  2. zu machen
  3. Es beseitigt Probleme Sollte ein regex werden "\\s+" oder "\s+" oder "\\\\s+"?
  4. Flucht
  5. Es ist einfach, den Code für die Interpunktion suchen

(Es gibt eine Grenze für diese -.. Ich würde nicht reguläre Ausdrücke auf diese Weise schreiben, obwohl regex Syntax einer der kognitiv dysfunktionalen Teile aller Programmierung Ich denke, wir brauchen eine bessere Syntax)

War es hilfreich?

Lösung

Wenn die Definitionen im Laufe der Zeit oder zwischen Anlagen ändern, neige ich dazu, diese Dinge in einer Konfigurationsdatei zu setzen, und die Informationen beim Start abholen oder auf Abruf (je nach Situation). Dann bietet eine statische Klasse mit Nur-Lese-Schnittstelle und klarer Namen auf den Eigenschaften zum Belichten der Informationen an dem System.

Verwendung könnte wie folgt aussehen:

s = s.replaceAll(CharConfig.Quotation + CharConfig.Quotation, CharConfig.EmtpyString);

Andere Tipps

Für allgemeine Stringverarbeitung , würde ich nicht Sonderzeichen verwenden. Ein Raum ist immer wird ein Raum sein, und es ist nur mehr natürliches (und schreiben!) Zu lesen:

s.replace("String", " ");

als:

s.replace("String", S_SPACE);

ich besondere Sorgfalt walten lassen würde Dinge wie „\ t“ verwenden Registerkarten darzustellen, zum Beispiel, weil sie von Leerzeichen in einem String nicht leicht unterschieden werden können.

Wie für Dinge wie XML_PREFIX_SEPARATOR oder FILE_SEPARATOR , sollten Sie wahrscheinlich nie mit Konstanten wie damit umgehen, da Sie eine Bibliothek verwenden sollten, die Arbeit für Sie tun. Zum Beispiel sollten Sie nicht Handschrift sein: dir + FILE_SEPARATOR + filename, sondern seinen Aufruf. file_system_library.join(dir, filename) (oder was auch immer gleichwertig Sie verwenden)

Auf diese Weise werden Sie nicht nur eine Antwort für Dinge wie die Konstanten haben, werden Sie tatsächlich viel bessere Handhabung von verschiedenen Rand Fällen erhalten, die Sie wahrscheinlich nicht über jetzt denken

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top