Clean Code: Variable vs. Methode

aCleanCoder

Mitglied
Nabend,

in einem Video zum Thema Clean Code wurde gesagt, dass man Zwischenvariablen verwenden sollte, um es etwas leserlicher zu machen.

Also statt

Java:
    if (days == 1 && (startDate.DayOfWeek == DayOfWeek.SATURDAY || startDate.DayOfWeek == DayOfWeek.SUNDAY)) {
        //
    }

wäre folgende Variante besser

Code:
    var isJustASingleSaturdayOrSunday = days == 1 && (startDate.DayOfWeek == DayOfWeek.SATURDAY || startDate.DayOfWeek == DayOfWeek.SUNDAY)
        if (isJustASingleSaturdayOrSunday) {
            //
        }

Macht für mich auch soweit Sinn dem ganzen einen Kontext zu geben. Generell mache ich das soweit auch schon, allerdings in der Regel über eine Methode, statt einer Zwischenvariable

Code:
    private boolean isJustASingleSaturdayOrSunday() {
        return    days == 1 && (startDate.DayOfWeek == DayOfWeek.SATURDAY || startDate.DayOfWeek == DayOfWeek.SUNDAY)
    }

Ist das eher eine Frage des Geschmacks welche Variante man wählt? Wie würdet ihr es machen? Aber fällt wohl eher in die Kategorie "Kommt drauf an" !? :D
 

httpdigest

Top Contributor
Eine Methode daraus zu machen, halte ich eigentlich immer für eine gute Idee. Zumal du dann die Methode auch testen kannst (vorausgesetzt, sie ist für den Testcode sichtbar).
Ob du die Methode jetzt auf Instanzvariablen deines Objektes zugreifen lässt (also eher objektorientiert denkst), oder alle nötigen Inputs für die Methode auch als Parameter der Methode modellierst (also days und startDate) (also eher funktional denkst), ist vermutlich auch Geschmackssache.
 

White_Fox

Top Contributor
Eine Variable deklariere ich dann, wenn ich eine brauche.
Wenn ich Arbeitsschritte unter einem griffigen Namen zusammenfassen will, werfe ich das in eine Methode, eine Variable deklariere ich dafür nicht.
 

aCleanCoder

Mitglied
Danke für die Antworten, dann würde ich es auch so weiter beibehalten :)

Es gab in dem Video auch ein Kommentar, wo auch gefragt wurde, was denn gegen eine Methode sprechen würde.
Die Begründung vom Uploader war, dass dies die Strukurkomplexität der Klasse erhöhen würde, da man zB bei der Analyse auf viele private Methoden stoßen würde, die nichts mit der eigenen Aufgabe zu tun haben.
 

KonradN

Super-Moderator
Mitarbeiter
Danke für die Antworten, dann würde ich es auch so weiter beibehalten :)

Es gab in dem Video auch ein Kommentar, wo auch gefragt wurde, was denn gegen eine Methode sprechen würde.
Die Begründung vom Uploader war, dass dies die Strukurkomplexität der Klasse erhöhen würde, da man zB bei der Analyse auf viele private Methoden stoßen würde, die nichts mit der eigenen Aufgabe zu tun haben.
Das ist aber doch nicht das Thema. Dann erhöht sich die Strukturkomplexität. Wenn diese zu hoch ist, dann muss man da halt auch etwas machen.

Bei privaten Methoden ist z.B. immer die Frage: was macht die Methode? Ist es etwas bzw. gehört es zu etwas, das man selbst wieder Kapseln kann? Dann hat man eine neue Klasse die getestet werden kann und die Strukturkomplexität der ursprünglichen Klasse ist reduziert.
 

White_Fox

Top Contributor
Es gab in dem Video auch ein Kommentar, wo auch gefragt wurde, was denn gegen eine Methode sprechen würde.
Man sollte nicht alles, was andere sagen, immer als wahr nehmen. Sondern immer prüfen, abwägen, und selber bewerten.
Der Videoautor mag seine Gründe dafür haben, vielleicht hat er aber auch keine Ahnung und lebt davon, Videos ins Netz zu stellen. Auch Geistesgrößen wie Knuth, Lamport, usw. haben letztendlich nur ihre eigene Meinung zum Besten gegeben, haben diese aber auch ausführlich und nachvollziehbar begründet, und oft hat sich deren Meinung zu bestimmten Themen aus jahrelanger Erfahrung gebildet.

Das Selberdenken nimmt einem niemand nirgendwo ab, das kann und darf man nicht aus der Hand geben. In allen Dingen.


Die Begründung vom Uploader war, dass dies die Strukurkomplexität der Klasse erhöhen würde, da man zB bei der Analyse auf viele private Methoden stoßen würde, die nichts mit der eigenen Aufgabe zu tun haben.
Wenn du viele private Methoden hast, die deklariert wurden um einzelne Arbeitsschritte lesbar zusammenzufassen: Wie kann es dann sein, daß diese Methoden mit der eigentlichen Aufgabe nichts zu tun haben sollten?

PS: Ohne Unittests ihre Wichtigkeit absprechen oder Testbarkeit kleinreden zu wollen: Aber um eine komplexere Methode in mehrere einfache Methoden aufzuteilen kann man es durchaus in Kauf nehmen, mehrere private Methoden nicht mehr testen zu können. Der Unittest wird wahrscheinlich so oder so einen Fehler werfen wenn etwas nicht stimmt, und die privaten Methoden werden da ja trotzdem auch aufgerufen, auch wenn es keinen extra Test für gibt.
Den Fehler wird man also wahrscheinlich trotzdem bemerken, aber beheben kann man ihn bedeutend schneller, wenn man fünf Methoden hat und an deren Namen man schon ablesen kann was sie liefern sollte. Und das läßt sich dann relativ einfach debuggen. Ich bin ja kein Programmierer, aber ich würde mal behaupten daß Codelesbarkeit da mehr bringt als für jedes Codefitzelchen einen separaten Unittest zu haben.
 

Meniskusschaden

Top Contributor
Ist das eher eine Frage des Geschmacks welche Variante man wählt? Wie würdet ihr es machen? Aber fällt wohl eher in die Kategorie "Kommt drauf an" !?
Ich finde, einen komplexen Ausdruck durch die Deklaration einer gut benannten Variable zu dokumentieren, kann durchaus eine sinnvolle Alternative zur Auslagerung in eine Methode sein. Voraussetzung wäre für mich, dass der Ausdruck ohnehin nur an einer Codestelle vorkommt und vielleicht noch, dass die Abstraktionsstufe des Ausdrucks nicht zu weit unterhalb der des Codes seiner Verwendung sein sollte.
 

White_Fox

Top Contributor
Was ich noch anfügen möchte:
Ich habe mich neulich mal mit jemandem hingesetzt, um gemeinsam etwas Code zu debuggen den ich vor über einem Jahr mal geschrieben habe, sich da allerdings mehrere Fehler eingeschlichen haben die ich alleine nicht mehr sehe. Betriebsblindheit.

Dieser Jemand war sehr erstaunt darüber, daß ich nach so langer Zeit immer noch weiß, was ich mir wo wie gedacht habe und da immer noch einen guten Überblick darüber habe. Tatsache is aber: Diesen Überblick habe ich überhaupt nicht. Ich weiß nur noch, daß ich den Code möglichst so geschrieben habe, daß ich ihn als Anleitung, als Fließtext lesen kann. Und weiß daher z.B., daß ich hinter einer Objektreferenz, die "set" heißt, auch ein Set erwarte und es ein Fehler sein muß, wenn es kein Set ist.

Soweit ich das verstanden habe, ist genau das das große Ziel von Clean Code. Nur um die Wichtigkeit von Codelesbarkeit mal einzuordnen, kann man m.M.n. gar nicht hoch genug einschätzen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Clean Code oder Allgemeine Java-Themen 5
Fischkralle Beim Clean Coden an den Schnittstellen geschnitten. Allgemeine Java-Themen 10
K NetBeans Ordner bei 'Clean&Build' automatisch in dist Verzeichnis kopieren Allgemeine Java-Themen 0
M Unsicher, ob das Code richtig ist Allgemeine Java-Themen 4
MarvinsDepression Unbekanntes Zeichen in fremden Code wirft Fragen auf Allgemeine Java-Themen 4
schemil053 Methoden Code-Verbesserung Allgemeine Java-Themen 2
D Webarchive (war): Code verschleiern Allgemeine Java-Themen 7
D Compiler-Fehler child process exited with code 1 Allgemeine Java-Themen 1
Queenman Interface Mein Microsoft Visual Studio Code zeigt komische Dinge & Menüs an Allgemeine Java-Themen 9
berserkerdq2 Versteht jemand, was diese beiden Zahlen bei dem IJVM Code zu bedeuten haben? Allgemeine Java-Themen 10
OnDemand Releaseversion Tag in Code Allgemeine Java-Themen 5
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
F Code auslagern Allgemeine Java-Themen 5
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
JordenJost Unverständlicher Java code? Allgemeine Java-Themen 21
V Hilfe mit Java Code Allgemeine Java-Themen 4
S Processing Java Code verstehen Allgemeine Java-Themen 4
A code wird nicht ausgeführt Allgemeine Java-Themen 3
B Bitte um Code Erklärung Allgemeine Java-Themen 5
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
N Regulären Ausdruck in normalen Java-Code umwandeln Allgemeine Java-Themen 12
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
J Simple Date Format Alternativen bitte um Code Allgemeine Java-Themen 14
AGW in Java-Code plötzlich ein paar Wörter in Rot Allgemeine Java-Themen 2
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
H Precompilierten code ansehen Allgemeine Java-Themen 3
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
L Ausgabe von in Echtzeit ausgeführten Code Allgemeine Java-Themen 9
Drachenbauer Wie kann ich die menge an code reduzieren? Allgemeine Java-Themen 28
Thallius Warum ist dieser Code OS abhängig? Allgemeine Java-Themen 10
S Code Erklärung Allgemeine Java-Themen 21
B Pausem im Code Allgemeine Java-Themen 2
T Java-Quiz Code Fehler Allgemeine Java-Themen 10
L Eclipse Java Code ausführen Allgemeine Java-Themen 18
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
F Code in Klassen bringen Allgemeine Java-Themen 4
S Gibt es eigentlich Java Source Code Interpreter..? Allgemeine Java-Themen 13
J JUnit - Auslassen von Code Allgemeine Java-Themen 25
F Klassen Spaghetti Code Vermeidung Allgemeine Java-Themen 16
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
J Code Page characters darstellen Allgemeine Java-Themen 12
J wie sollte man sinnvoll seinen Code aufteilen Allgemeine Java-Themen 6
I Python Code in Java Code Allgemeine Java-Themen 9
M Java (GUI) Code verdoppeln oder anzeige mehrmals anzeigen? Allgemeine Java-Themen 8
N Wie öffne ich einen runtergeladadenen Code in IntelliJ Allgemeine Java-Themen 3
R Fehler im Code Allgemeine Java-Themen 1
R Fehler im Code Allgemeine Java-Themen 3
O Standard library nativer C code Allgemeine Java-Themen 1
R Wo ist mein Fehler in diesem Code Allgemeine Java-Themen 7
S Java Editor Bekomme bei der Code-Vervollständigung die Zeichen ​ Allgemeine Java-Themen 3
N Morse Code decoder Allgemeine Java-Themen 9
O Erste Schritte Benzinverbrauch Code Hilfe Allgemeine Java-Themen 3
S Eclipse exit code 805306369 Allgemeine Java-Themen 1
Pataraca Vererbung Code einbinden Allgemeine Java-Themen 3
Developer_X Website HTML Code von HTTPS URL laden Allgemeine Java-Themen 0
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
S Code 'innerhalb' des synchronen Bereichs einer BlockingQueue ausfuehren..? Allgemeine Java-Themen 7
F Verständlichkeitsproblem bei Java Code?! Allgemeine Java-Themen 2
G Eclipse Eclipse: Unreachable code Allgemeine Java-Themen 16
P Java Android Code in IOS compilieren? Allgemeine Java-Themen 9
C Code vereinfachen Allgemeine Java-Themen 2
T Hilfe bei Code Allgemeine Java-Themen 3
R Java-Code für folgene Aufgabe? Allgemeine Java-Themen 8
Prafy Best Practice Code Refaktorisierung Allgemeine Java-Themen 7
WetWer Was bedeutet/macht ein Exit-Code Allgemeine Java-Themen 1
D Code für bereitgestellte Methoden Allgemeine Java-Themen 1
perlenfischer1984 HTML Code decodieren Allgemeine Java-Themen 2
C ASCII-Code in Java Allgemeine Java-Themen 1
J Java-Code in DLL packen Allgemeine Java-Themen 5
J LWJGL 3 Error Code 1282 Allgemeine Java-Themen 4
0 Code startet nicht (Keine Warnung/Fehlermeldung) Allgemeine Java-Themen 4
A Frage zu meinem Code Allgemeine Java-Themen 2
B Code generierung Velocity Templates Telosys Allgemeine Java-Themen 1
E Fehlermeldung vor dem Programm code Allgemeine Java-Themen 1
B JAVA - mehrere Clienten gleichzeitig starten. Nicht bei Code! Allgemeine Java-Themen 3
Fischkralle Ausführen von fremden Code Allgemeine Java-Themen 14
wolfgang63 Code snipped Software Allgemeine Java-Themen 1
L Eclipse Editieren des Code templates für Override methods Allgemeine Java-Themen 2
J Java code "plugin" fähig machen Allgemeine Java-Themen 4
alderwaran .jar Code Signing, User-Keystore und Fragen dazu Allgemeine Java-Themen 0
Thallius Wie verstecke ich meinen private Key am besten im Code? Allgemeine Java-Themen 10
A Thread: Code paralell ausführen in mehreren Instanzen Allgemeine Java-Themen 1
B NullPointerException - Aber kein Fehler im Code Allgemeine Java-Themen 4
N HTTP response code: 403 Allgemeine Java-Themen 3
D Code bitte mit 19 stelligen Zahlen kompatibel machen Allgemeine Java-Themen 5
D Java Compiler code referencen Allgemeine Java-Themen 0
B Fehler im Java-Code Allgemeine Java-Themen 4
A PHP-Code zu Java-Code Allgemeine Java-Themen 5
M Code läuft unter windows aber nicht unter Linux Allgemeine Java-Themen 6
X Was macht folgender Code!? Allgemeine Java-Themen 6
K Code zu einem Projekt entschluesseln Allgemeine Java-Themen 15
H Java Leistungssteigerung durch Code Anpassung Allgemeine Java-Themen 5
Fab1 Best Practice Vorgehensweise bestehenden Code/Programm verschönern Allgemeine Java-Themen 4
M Code optimieren Allgemeine Java-Themen 7
A jEditorPane Html Datei öffnen (code) Allgemeine Java-Themen 3
S EAN-Code Tabelle für CD's Allgemeine Java-Themen 2
T Code durch eigenes Frame pausieren (ähnlich JDialog) Allgemeine Java-Themen 4
J Erzeugung von Java-Code Allgemeine Java-Themen 2
A Source code analyze Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben