[SWIFT] 7 Dinge, die du behalten sollst, damit es kein verdammter Code wird

Vorwort

Ich beabsichtige, den Inhalt dieses Mal zu schreiben, wobei ich mich auf die Dinge konzentriere, in die selbst Ingenieure mit etwas Erfahrung fallen, daher habe ich nichts Übernatürliches geschrieben, wie [Schreiben Sie keinen doppelten Code].

**2017/03/16 Es scheint in letzter Zeit oft gesehen zu werden, also füge eins hinzu [Erbe es überhaupt nicht !!!] **

Erben Sie es überhaupt nicht !!!

Erben Sie es nur, wenn Sie nichts dagegen tun können. Berücksichtigen Sie vorher andere Methoden wie das Strategiemuster und das zusammengesetzte Muster, aber nur, wenn es sinnvoll ist, zu erben. Grundsätzlich ist es skalierbarer und Testcode ist einfacher anzuwenden, wenn Sie ihn nicht erben.

Vererbung ist eine Beziehung

Überspringen Sie es nicht mit "Ah, Vererbung. Ja, ja." Nicht wirklich !!! Fast jeder Ingenieur weiß, was [ist-ein] ist. Weil es ein Konzept ist, das in allen Büchern zum Objektdenken vorkommt.

Nach meiner Erfahrung vernachlässigen jedoch zu viele Menschen dieses Konzept.


[Ein Frame auf der Baustelle] Herr A: "Diese Klasse und die Methode dieser Klasse sind genau gleich." Herr B: "Ah, wenn Sie dann eine Elternklasse erstellen und zusammenstellen, können Sie doppelte Codes reduzieren." Ich: "Es ist lächerlich !!!"


Korrekt.

Nein, ich denke es ist ein guter Ausgangspunkt. Wenn jedoch [is-a], das wichtigste Konzept bei der Vererbung, weggelassen wird, ist es absolut nutzlos. [is-a] ist weder eine Dekoration noch ein Anfängerwort, es ist ein Konzept, das bei der Implementierung verwendet werden sollte. Sie können eine Klasse erstellen, die Sie nicht verstehen, weil Sie dies vernachlässigen.

Aber um klar zu sein, [is-a] ist zu abstrakt und es ist ziemlich schwierig, es auf Implementierungsebene fallen zu lassen, oder es gibt individuelle Unterschiede ...

Ich werde also eine bestimmte Methode der Beurteilung einführen, also hoffe ich, dass Sie sich darauf beziehen können.

"Sind alle in der übergeordneten Klasse verwendeten Eigenschaften und Methoden verfügbar?"

Versteh mich nicht falsch, es benutzt es nicht, es ist gebrauchsfertig. Natürlich dürfen Sie es nicht verwenden. Wenn Sie es also verwenden möchten, beurteilen Sie bitte, ob es gebrauchsfertig ist. Wenn dies getan wird, kann gesagt werden, dass es sich um eine [is-a] Beziehung handelt. Wenn Sie also eine untergeordnete Klasse erstellen möchten, prüfen Sie zunächst, ob sie sich in diesem Zustand befindet.

Klären Sie die Ein- und Ausgänge der Methode

Schützen Sie das trotzdem! Wenn Sie es nicht behalten können, schreiben Sie einen Test! (Weil ich es beschützen muss) Es gibt zu viele Methoden mit mehrdeutigem Ein- und Aussteigen. Außerdem ist es zu schmerzhaft, dies zu reparieren. Ich möchte wirklich, dass Sie es schützen. Ich kann nicht einmal einen Test schreiben. Ernsthaft scharf Ah.

Es gibt nichts anderes zu schreiben, aber machen Sie es bitte zu einer Methode, die beantwortet werden kann, wenn Sie gefragt werden: "Was sind die Ein- und Ausgänge dieser Methode?"

Um genauer zu sein, führen Sie die folgende Verarbeitung nicht mit einer Methode durch. [Ich habe einige Berechnungen durchgeführt → das Berechnungsergebnis speichern] Es bedeutet, das Berechnungsergebnis zurückzugeben und beim Anrufer zu speichern.

Wenn es einen Start gibt, gibt es auch einen Stopp

Dies ist auch ziemlich häufig. Warum hört es nicht auf, obwohl es angefangen hat?

Es ist nicht nur Start und Stopp, sondern es gibt Methoden, die gepaart werden sollten. Gibt es nicht eine Klasse, die vom Konstruktor der Instanz ausgeht und von außen stoppt?

Machen Sie Ihren Code trotzdem konsistent.

Schmal, stark und sanft

Der Offenlegungsbereich ist eng, die Einschränkungen sind stark und ich möchte freundlich sein Machen Sie alle Kaku-Methoden privat. Danach veröffentlichen Sie bitte nur das, was Sie brauchen. Es ist wirklich schwer zu erkennen, ob Sie etwas veröffentlichen, das nur in der Klasse verwendet wird. Die Eigenschaft ist zuerst readOnly, und wenn sie immer noch nicht funktioniert, schreiben Sie sie.

Alle Variablen sind ebenfalls const und Methodenargumente sind ebenfalls const. Begrenzen Sie alles, was eingeschränkt werden kann.

Rückruf verwickelt sich nicht in Logik.

Rufen Sie den Rückruf nicht in einer Methode auf, die eine Logik enthält.

In diesem Fall senden Sie den Rückruf an den Anrufer zurück. Dies bedeutet, dass der vom Kind an das Elternteil zurückgegebene Teil nicht mit der Logik verflochten ist.

(Tweet) Wie hieß der Code, der die Logik nicht geschrieben und nur den Wert übergeben hat? Ich hatte einen Namen, aber ich habe ihn vergessen. Bitte schreibe ihn in die Kommentare, wenn du ihn verstehst.

**2017/03/16 Ich habe Hatebu gebeten, etwas wie "Ich weiß nicht" zu schreiben. Als ich es rezensierte, dachte ich "Das stimmt", also fügte ich es unten hinzu. Ich war damals so wütend, dass ich viel geschrieben habe www **

Zum Beispiel Angenommen, Sie haben Berechnung 1, Berechnung 2 und Berechnung 3. Angenommen, Sie möchten im Rückruf "Berechnung 1 + Berechnung 2 + Berechnung 3" zurückgeben. Mach es auf eine Weise

//Da es sich um einen Rückruf handelt, wird er asynchron zurückgegeben.
Alle Berechnungsergebnisse{
return [Berechnung 1+Berechnung 2+Berechnung 3]
}

nicht

Berechnung 1 Ergebnis{
Rückgabeberechnung 1
}

Ergebnis von Berechnung 2{
Rückgabeberechnung 2
}

Berechnung 3 Ergebnis{
Rückgabeberechnung 3
}

//Da es sich um einen Rückruf handelt, wird er asynchron zurückgegeben.
Alle Berechnungsergebnisse{
  return [Berechnung 1 Ergebnis+Ergebnis von Berechnung 2+Berechnung 3 Ergebnis]
}

Es bedeutet zu schreiben.

Warum fragst du? Geht es darum, welcher Testcode einfacher zu schreiben ist? Rückrufe sind asynchron, daher ist es schwierig, sie mit Logik zu testen, oder?

Gegenseitige Bezugnahme ist absolut nutzlos

Ich bin erschöpft, wie geschrieben steht. In dem Code, den ich gesehen habe, war die übergeordnete Instanz in der Beziehung [has-a] ein Singleton, und die untergeordnete Instanz stürzte sich in die Eigenschaften der übergeordneten Instanz, die sie im Singleton erhalten hatte.

Sie müssen keine Eigenschaft haben, die direkt auf das übergeordnete Element verweist. Dies ist eine gegenseitige Referenz

Versuchen Sie nicht, Kommentare ordentlich zu schreiben. Setzen Sie Ihre Gedanken ein! !! !!

In dem Kommentar, den ich neulich gesehen habe, war so etwas.

//Auf Hauptthread ausführen

Als ich das sah, murmelte ich: "Warum?" In einem Wort

Hinterlasse keinen Kommentar mit der Frage "Warum?" !!

darüber.

Hier ist ein gutes Beispiel für diesen Kommentar.

//Wird vom Hauptthread aufgerufen, da am Aufrufziel eine Zeichenverarbeitung stattfindet.

Das Folgende ist ein Beispiel für einen Kommentar mit Gedanken

//Ich bin mir nicht sicher, aber als ich es im Hauptthread aufrief, stürzte es nicht mehr ab.

Wenn Sie sich diesen Kommentar ansehen, können Sie das Niveau des Ingenieurs spüren und verstehen, dass es in Ordnung ist, ihn zu korrigieren, sodass jeder, der die Ursache kennt, ihn korrigieren kann.

Warum sehen Sie die folgenden Kommentare nicht noch einmal?

//Auf Hauptthread ausführen

Sie können nichts tun, wenn Sie nicht wissen warum. In diesem Fall erhöhen die Kommentare die Menge an Code, die Sie nicht verstehen.

Nachtrag 16. August 2016 Ich habe einen Kommentar erhalten, den ich von einer Person auf der vorherigen Website geschrieben habe, die diesen Beitrag gesehen hat. Deshalb werde ich ihn hier vorstellen. W.

# koitaro 2015/09/14
# Thread.current[:request]Durch Eintauchen der URL in und ob sie einen Schritt enthält
#Das Urteil ist geteilt, aber da es sich um eine sogenannte globale Variable handelt, ist es nicht gut, sie so zu schreiben
#Deshalb habe ich versucht, es irgendwie umzugestalten, aber es ist tief verschachtelt und wird verwendet.
#Deshalb habe ich aufgegeben, weil ich es nicht einfach verbessern konnte.
#Warten Sie auf den Tag, an dem der Held erscheint

Recommended Posts

7 Dinge, die du behalten sollst, damit es kein verdammter Code wird
Eine Sammlung von Mustern, die Sie kennen möchten, um den Code nicht zu komplizieren
Eine flüssige Schnittstelle? -Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 3 [C # Refactoring Sample]
Ich möchte Swipeback auf einem Bildschirm verwenden, der XLPagerTabStrip verwendet
Die Geschichte von Collectors.groupingBy, die ich für die Nachwelt behalten möchte
Ist es möglich, Funktionsaufrufe und bedingte Verzweigungen zu trennen? -Ich möchte eine gute Gelegenheit zum Schreiben von Code geben. 9 [C # Refactoring-Beispiel]
Java hatte eine QR-Code-Erstellungsbibliothek namens QRGen, die ZXing gut umschließt, also habe ich es versucht
Glassfish Tuning List, die ich vorerst behalten möchte
Ich möchte Apache Wicket 8 zusammenfassen, weil es eine gute Idee ist
Ich möchte eine Webanwendung entwickeln!
Ich möchte ein schönes build.gradle schreiben
Ich möchte einen Unit Test schreiben!
[Android] Ich möchte einen ViewPager erstellen, der für Tutorials verwendet werden kann
Ich möchte eine einfache Wiederholung einer Zeichenkette schreiben
Ich möchte eine Struktur für die Ausnahmebehandlung entwerfen
[MyBatis] Ich möchte eine Abfrageabfrage einer Tabelle zuordnen, die eine Eins-zu-Viele-Beziehung zu einer verschachtelten Bean hat.
Ich möchte PowerMock in einer Klasse verwenden, die parametrisierte Tests und gewöhnliche Tests kombiniert
Ich möchte es zusätzlich implementieren, während ich Kotlin auf einer Site verwende, auf der Java ausgeführt wird
Wenn in Ruby Hash [: a] [: b] [: c] = 0 ist, möchten wir, dass Sie rekursiv erweitern, auch wenn der Schlüssel nicht vorhanden ist
Ich möchte eine Methode einer anderen Klasse aufrufen
Ich möchte NetBeans auf einem Mac verwenden → Ich kann es verwenden!
Dinge zu überprüfen, wenn Sie nicht mit Proguard arbeiten
Ich möchte ein kleines Symbol in Rails verwenden
Ich möchte eine bestimmte Datei mit WatchService überwachen
Ich möchte eine Funktion in der Rails Console definieren
firewalld wurde verrückt, also konnte ich es reparieren
Ich möchte in RSpec auf einen GoogleMap-Pin klicken
Ich möchte eine generische Anmerkung für einen Typ erstellen
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Ich möchte eine Schleife schreiben, die auf einen Index mit der Stream-API von Java 8 verweist
Easy Null Check - Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 6 [C # Refactoring-Beispiel]
Eine etwas besorgniserregende Codesammlung - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 2 [C # Refactoring Sample]
Komplizierte bedingte Verzweigung - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 1 [C # Refactoring-Beispiel]
Bool-Typ-Handling - Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 7 [C # Refactoring-Beispiel]
[Docker] Ist es gut genug, um es als mehrstufigen Build zu bezeichnen? → Die Geschichte, die so gut wurde
Der Artikel für Neuankömmlinge hat mich inspiriert. Notieren Sie ihn sich, damit Sie Ihre ursprünglichen Absichten nicht vergessen.