2017-03-31 2 views
1

Ich lese aus dem Buch (Anfang Python vom Anfänger bis zum Beruf), dass "es ist in der Regel als eine schlechte Sache, Code zu wiederholen" (Ich bin kein Muttersprachler, also bin ich nicht sicher, wie es geschrieben Anfangs) und sagt:Was ist 'code repeat' genau

#===11-7=== 
file = open(PATH) 
while True: 
    char = file.read(1) 
    if not char: 
     break 
    print('Processing:', char) 
file.close() 

ist besser als:

#===11-6=== 
file = open(PATH) 
char = file.read(1) 
    while char: 
     print('Processing:', char) 
     char = file.read(1) 
file.close() 

weil 11-7 vermeidet den Code zu wiederholen. Also bin ich hier um zu fragen: Was ist Code Wiederholung? Und ist es so schlimm?

Nur beurteilt von 11-6 Ich sehe keine Art von ... Nachteile, und um ehrlich zu sein, wenn ich das Buch nicht gucke, würde ich gerne Code 11-6. Danke ~

+1

Grundsätzlich gibt es keinen Grund, die * gleiche Zeile * Code mehrmals zu schreiben, wenn Sie nicht müssen. –

+1

Sie können Bugs subtil einführen, wenn Sie sich entschließen, * 2 * Bytes anstelle von einem zu lesen, und diese Änderung nur in einem der beiden '.read()' Aufrufe vornehmen. Passiert die ganze Zeit in der Praxis. – deceze

+1

Diese Antwort fasst IMO den Schlüsselpunkt zusammen: "DRY sollte verwendet werden, um die Situation zu vermeiden, in der zwei Teile des Codes konzeptionell einige der gleichen Arbeit machen, also wenn Sie den Code an einer Stelle ändern, müssen Sie den Code in der anderen ändern Wenn die gleiche Logik an zwei verschiedenen Stellen vorhanden ist, müssen Sie immer daran denken, die Logik an beiden Stellen zu ändern, was sehr fehleranfällig sein kann. "http://stackoverflow.com/a/17790368/6260170 –

Antwort

3

Das zweite Beispiel tut die Leseoperation an zwei Stellen. So--

Stellen Sie sich vor, dass Sie diesen Code geschrieben haben und irgendwann in der Zukunft ändern Sie, wie Sie die Daten lesen; Vielleicht möchten Sie es jetzt lieber über das Netzwerk lesen als über eine Datei, oder Sie möchten eine andere Funktion verwenden, um aus der Datei zu lesen. Im ersten Beispiel müssen Sie nur "file.read (1)" an einer Stelle ändern, in der zweiten müssen Sie es in zwei tun, und Sie könnten eine von ihnen verpassen, oder einen Fehler machen, etc.

In ähnlicher Weise können Sie einen Fehler im Code entdecken und ihn nur an einer der beiden Stellen beheben.

Nun ist dies offensichtlich ein vereinfachtes Beispiel, wo es nicht zu viel ist, aber in realen Programmen sind Fehler wie diese sehr einfach zu machen: Stellen Sie sich vor, dass es nicht eine einzige Zeile ist, sondern 50 Zeilen duplizierten Code. und jemand behebt einen Fehler in einer Kopie, aber nicht in der anderen. Sie haben jetzt ein Problem, das möglicherweise sehr schwer zu debuggen ist!

+1

Bekam es, danke ~ –