3 Stimmen

Wie kann man den "Tipping Point" bestimmen, insbesondere bei der Programmierung von Regexen?

Guten Tag,

Edita: Während diese Frage eine Situation abdeckt, die beim Programmieren häufig auftreten kann, habe ich immer bemerkt, dass es einen Punkt gibt, wenn man mit Regexen arbeitet, besonders in Perl und mit Shell-Programmierung, wo man versucht, diese letzten paar Randfälle zu erfassen:

  • erfordert viel, viel mehr Zeit, um Ihre Regex zu erweitern, was bedeuten kann
  • übermäßige Komplexität in der Regex, was dazu führt, dass
  • Zukünftige Wartungsprobleme aufgrund der komplexen Natur von Regex, insbesondere wenn es nicht in Perl ist, so dass es keine nette /x-Option gibt, die es Ihnen ermöglicht, die Regex-Fragmente einfach zu dokumentieren.

Ich habe auf diese Frage geantwortet " Gibt es eine einfache Methode, mit der ein Skript (aus dem Kontext) erkennen kann, ob "sie" ein Possessivpronomen ist? "und ein Teil meiner Antwort war, dass man an einen Punkt gelangt, an dem die Jagd nach den letzten paar Prozent der Randfälle den zusätzlichen Aufwand und die Zeit für die Erweiterung der Regex, des Shell-Skripts usw. nicht mehr wert ist. Es wird einfacher, die Randfälle zu markieren und sie manuell zu bearbeiten.

Ich habe mich gefragt, ob es eine einfache Methode gibt, um zu erkennen, dass man einen solchen Wendepunkt erreicht hat. Oder ist das etwas, das sich erst mit der Erfahrung einstellt?

Übrigens: Während diese andere Frage betrifft ebenfalls "Kipppunkte". Es geht darum, wann man mit der Automatisierung von Dateimanipulationen beginnt, und nicht darum, wann "genug ist genug".

1voto

Jeremy Stein Punkte 18116

Die meisten Regex-Engines erlauben es Ihnen, die Regex in-line zu dokumentieren. Wenn dies nicht der Fall ist, gibt es oft Techniken verfügbar, um sie lesbar zu machen. Ich werde diesen Teil der Frage ignorieren und davon ausgehen, dass die Regex angemessen dokumentiert werden kann.

Ich denke, das Problem ist nicht so sehr die Komplexität einer Regex, sondern vielmehr die Angemessenheit einer Regex. Eine Regex kann lang und komplex sein, aber wenn sie für das Problem geeignet ist, dann wird eine Lösung ohne Regex mindestens genauso komplex sein, und sicherlich viel länger.

Das Problem besteht darin, dass Regex missbraucht wird, um eine andere Art von Problem zu lösen. Die häufige Verwendung von Umgehungslösungen ist oft ein Hinweis darauf. Wenn es einfacher ist, einer Sequenz von regulärem Code zu folgen, die dasselbe Problem auf einfache Weise löst, dann ist das die richtige Lösung, egal wie kurz die Regex sein würde.

1voto

mouviciel Punkte 64583

Wenn ich das Gefühl habe, dass die Erstellung einer Regex oder eines Shell-Skripts etwa so viel Zeit in Anspruch nimmt wie die manuelle Bearbeitung, weiß ich, dass ich den "Wendepunkt" erreicht habe.

Wenn es sich dann um ein schnelles und schmutziges Tool für eine größere Aufgabe handelt, gehe ich so vor, wie Sie es beschreiben: der größte Teil der Arbeit wird mit Regex/Skript erledigt, Randfälle werden markiert und manuell behandelt.

Wenn es sich um etwas handelt, das wiederverwendet werden kann (z. B. bei automatischen Regressionstests), nehme ich mir die Zeit, mein Werkzeug zu verbessern (Aufteilung der Aufgaben oder Umstellung auf Perl) und/oder sicherzustellen, dass die Eingaben bestimmten Annahmen entsprechen.

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