Ein Stück Code zum Nachdenken

fastjack

Top Contributor
Hallo,

ich wollte Euch mal ein Stück Code posten, um Eure Meinungen dazu zu lesen. Einfach frei von der Leber weg. Ich bin in den Weiten des Webs zufällig auf das Codestück gestoßen, aber ich möchte jetzt nichts dazu sagen, um Eure Meinungen nicht zu beeinflussen.

Ich habe das Codestück bewußt groß gewählt, damit man es hier im Forum scrollen muß. Das soll das Scrollen in der IDE nachstellen und kommt dem Original sehr nahe.

Eines noch: Es geht nicht um Syntax oder Korrektheit, Sinn oder Unsinn :) Es geht auch nicht darum, ob hier ein Iterator angebracht ist oder nicht. Die JavaDoc ist ebenfalls nicht gefragt. Die "..." stellen einfache Anweisungen dar.

Java:
// ... a big piece of javadoc
public boolean doSomeStuff(String s, Object o) {
    int i = 0;
    int j = 0;
    int il = 0;
    int jl = 0;
    List<String> l1 = null;
    List<Integer> l2 = null;
    if(s == null || s.length() == 0) {
        throw ...
    }
    if(o == null) {
        throw ...
    }
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    l1 = ... // method call to get l1, always != null
    l1.add(s);
    l1.add(o.toString());
    ...
    ...
    ...
    ...
    ...
    il = l1.size();
    for(i = 0; i < il; i ++) {
        ...
        ...
        ...
        ...
        ...
        l2 = ... // method call to get l2, always != null
        jl = l2.size();
        for(j = 0; j < jl; j ++) {
            ...
            ...
            ...
            ...
            ...
            ...
            ...
        }
        ...
        ...
        s = "foo";
        ...
        ...
        ...
        ...
        ...
        o = "stuff";
        ...
        ...
        ...
        l1.add(s);
        l1.add(o.toString());
        ...
        return l1.size() == 42;
    }
}

Postet bitte alles was Euch dazu einfällt, Positives, als auch Negatives. Vielen Dank fürs Mitmachen ;)
 

slawaweis

Bekanntes Mitglied
ich tippe darauf, dass das ein Auszug aus dem Quelltext von "Deep Thought" ist, welcher die Antwort auf die Frage "nach dem Leben, dem Universum und dem ganzen Rest" ausrechnen sollte.

Slawa
 
G

Guest2

Gast
Ctrl+A gefolgt von Ctrl+X

Hässlich, lang und unverständlich. Imho ein Grund neu Anzufangen, fürs refaktorieren könnte es wohl auch schon zu spät sein.

Meine Glaskugel würde vermuten, der Autor hat mit C angefangen und kennt Scott Meyers und Andrei Alexandrescu höchstens von noch eingepackten Büchern.

@slawaweis: Lol, aber stimmt die 42 ist verräterich! ;)

Gruß,
Fancy
 

Haave

Top Contributor
Okay, also mir fällt dazu folgendes ein:

- Die sechs Bezeichner sehen sich zum Verwechseln ähnlich (alle zwei Zeichen lang, alle mit Buchstaben ähnlichen Aussehens). Bis dann mit denen tatsächlich mal etwas passiert (ab Zeile 36), hatte ich beim Durchlesen schon wieder vergessen, für was dieser und jener Bezeichner stand und ob er int oder List bedeutete. Ergibt ein nettes Hoch- und Runtergescrolle im Code *g*
- int i und int j werden offenbar nur in ihrer jeweiligen For-Schleife benutzt, da hätte man sich das frühe Initialisieren auch sparen, die Dinger nur in der Schleife benutzen und anschließend wieder kicken können. Das wären dann schon mal zwei Variablen weniger zu merken :)
- Ist die 42 am Ende ein Scherz? ^^
 

Tharsonius

Bekanntes Mitglied
Ich würde sagen, das was der Code macht ist die Liste um 4 Elemente zu erweitern.
Die innere Schleife hat so offensichtlich keinen Effekt, außer Zeit zu verbraten.
Die Äußere Schleife ist total sinnfrei, weil das return IN der Schleife steht.

Das geht ja mal gar nicht....
Ist noch etwas früh am Morgen, aber ändert das s=... und o=.. nicht oben drein noch die Originalvariablen? *kopfkratz*
Na ja, jedenfalls würde ich sowas nie so schreiben...
 

fastjack

Top Contributor
Danke @Tharsonius. Es hat sich doch ein Syntaxfehler eingeschlichen, tauscht bitte Zeille 78 und 77 gegeneinander aus. Aber wieg gesagt, es geht nicht um Syntax, Sinn oder Unsinn.

@all Bitte weiter machen ;)
 

Marco13

Top Contributor
Alle Variablen am Anfang deklariert, war wohl ein C-Programmierer.


Code:
        jl = l2.size();
        for(j = 0; j < jl; j ++) {
Ein C-Programmierer, der glaubt, dass ein Methodenaufruf wie 'size' in diesem Fall was zeitkritisches ist...
 

sylo

Bekanntes Mitglied
hi zusammen

das Einzige was mir noch einfällt ist, dass die Methode keinen Rückgabewert hat.
Und Ausserdem ist die Bezeichnung der Methode "doSomeStuff" für eine Methode mit Rückgabewert boolean nicht geeignet. Vielleicht sollte man den dann "isSomeStuffDone" oder so nennen.
Aber sonst ???:L???:L

Grüße
sylo
 
G

Gast2

Gast
@fastjack

Was erhoffst du dir zu hören? Wenn es nicht um Sinn oder Unsinn, Syntax oder Funktion geht - was für ein Sinn macht es dann den Code zu analysieren? Auf den ersten Blick sieht er für mich nicht elegant und gut lesbar aus - aber evtl macht alles einen Sinn wenn die "..." gefüllt wären ;)
 

fastjack

Top Contributor
Okay ich löse mal. Vielen Dank für Eure Meinungen.

Ich hatte sehr ähnliche Gedanken wie Ihr, als ich die Methode sah. Auch wenn die "..." gefüllt sind wird es denke ich, nicht besser.

Ich hatte vor allem folgende Bauchschmerzen damit:

* lange Methode, viel Code.
* Variablenscope zu groß (vor allem in den for-Schleifen, kein extended-for benutzt).
* Parameter werden reused.

Ich wollte nur sehen, ob andere Entwickler ähnliche Schwierigkeiten damit haben. Nochmals vielen Dank für Eure Mühe und viel Spaß noch beim Fußball, derzeit (0:1) gegen Deutschland. :eek:
 
R

r0k

Gast
Hallo allerseits!

Ich hab ein Frage bezüglich des Methodenaufrus in Java,
und zwar möchte ich per Buttonklick eine Methode aufrufen, welche aber beim Aufruf den Rückgbewert noch nicht kennt, sondern diesen erst abfrägt und manuell einen Wert eingeben lässt.

Ich bräuchte das Ganze, da wir momentan an einem Blackjack-Projekt arbeiten und ich nur noch die Methode "Einsatz setzen" fertig stellen muss.
Hier ist also ein kleiner Ausschnitt davon:
Somit soll beim Buttonklick das Attribut "einsatz1" manuell verändert werden können, damit das neue Gehalt aktualisiert werden kann (jenachdem ob man gewinnt oder verliert)
Ich hoffe jemand kann mir helfen,
mfg


[JAVA=16]private int einsatz1;

fenster.add(einsatz = new JButton("Einsatz setzen"));

einsatz.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Einsatz_setzen(//Hier Rückgabewert, welcher manuell eingetippt werden soll)
einsatz.setEnabled(false);
}
});

public void Einsatz_setzen(int e){
einsatz1 = e;
}

public int Einsatz_geben(){
return einsatz1;
}
[/code]
 
R

r0k

Gast
Man muss ja nicht gleich für alles einen neuen Thread erstellen, und auch wenn es nicht zum #1 Post passt,
ist immerhin der Titel zutreffend,
aber immerhin vielen Dank für deine Hilfe >>
 
T

tuxedo

Gast
Doch, muss man, dass ist hier so üblich. Find ich auch sinnvoll so.
Vorallem da deine Frage sich ja mal wirklich völlig vom Originalthema unterscheidet xD

Das ist nicht nur hier so. Kenne kein anderes Forum in dem man Threads sparen muss .... Also echt, wo gibts denn sowas ... ???:L
Eigenes Problem das in keinen anderen, schon bestehenden und aktuellen Problemfall passt? --> Eigener Thread!
 

slawaweis

Bekanntes Mitglied
Okay ich löse mal. Vielen Dank für Eure Meinungen.

Ich hatte sehr ähnliche Gedanken wie Ihr, als ich die Methode sah. Auch wenn die "..." gefüllt sind wird es denke ich, nicht besser.

Ich hatte vor allem folgende Bauchschmerzen damit:

* lange Methode, viel Code.
* Variablenscope zu groß (vor allem in den for-Schleifen, kein extended-for benutzt).
* Parameter werden reused.

Ich wollte nur sehen, ob andere Entwickler ähnliche Schwierigkeiten damit haben. ...
wieso schreibst Du den:

Eines noch: Es geht nicht um Syntax oder Korrektheit, Sinn oder Unsinn :) Es geht auch nicht darum, ob hier ein Iterator angebracht ist oder nicht. Die JavaDoc ist ebenfalls nicht gefragt. Die "..." stellen einfache Anweisungen dar.
wenn es Dir genau darum geht und baust noch einen großen Schnitzer mit return ein, sowie die 42, was das ganze sehr mysteriös macht.

So ein Stück Code ist Alltag. Habe ich schon öfters gelesen. Wie alt ist es? Von wem wurde es programmiert? Was er vielleicht ein Beispiel für schlechtes Design? Leider stehen solche Beispiele noch immer in vielen Lehrbüchern übers Programmieren. Zwar in viel kürzeren Beispielen, aber gerade Anfänger neigen dazu solche Beispiele zu nehmen und zu "strecken". Ich erinnere mich noch an meine Anfänge, wo ich als Schüler Programme geschrieben habe. Ich habe es damals geschafft über Wochen einen 10.000 Zeilen C-Quelltext in nur 4 Funktionen zu schreiben. Weil ich damals nur ein Bruchteil des Ganzen verstand, habe ich einfach mit Copy & Paste gearbeitet und das gesamte Alphabet an einstelligen Variablennamen von a bis z ausgenutzt, inklusive der Präfixe "_", "__" und "___". So was kommt davon, wenn man Programmieren anhand von Büchern lernt, zu einer Zeit, wo man kein Internet Zuhause hat. Doch das besagte Programm machte trotzdem was es sollte und ich habe damit gutes Geld verdient.

Slawa
 
M

maki

Gast
So ein Stück Code ist Alltag. Habe ich schon öfters gelesen. Wie alt ist es? Von wem wurde es programmiert? Was er vielleicht ein Beispiel für schlechtes Design? Leider stehen solche Beispiele noch immer in vielen Lehrbüchern übers Programmieren. Zwar in viel kürzeren Beispielen, aber gerade Anfänger neigen dazu solche Beispiele zu nehmen und zu "strecken". Ich erinnere mich noch an meine Anfänge, wo ich als Schüler Programme geschrieben habe. Ich habe es damals geschafft über Wochen einen 10.000 Zeilen C-Quelltext in nur 4 Funktionen zu schreiben. Weil ich damals nur ein Bruchteil des Ganzen verstand, habe ich einfach mit Copy & Paste gearbeitet und das gesamte Alphabet an einstelligen Variablennamen von a bis z ausgenutzt, inklusive der Präfixe "_", "__" und "___". So was kommt davon, wenn man Programmieren anhand von Büchern lernt, zu einer Zeit, wo man kein Internet Zuhause hat. Doch das besagte Programm machte trotzdem was es sollte und ich habe damit gutes Geld verdient.

Slawa
Hi Slawa,

es gibt heute mehr als genug Bücher zu diesem Thema (Quellcodequalität/Refactoring) (Clean Code, Refactoring - Changing the Design of existing Software, XUnit Test patterns - Refactoring Test Code), leider werden diese offensichtlich nicht genügend gelesen und angewendet.

Leider hast du recht damit dass man sowas immer wieder sieht, von Datenbankverbindungsklassen die 12000 Zeilen lang sind, bis zu selbstgestrickten BubbleSort Methoden um eine Liste zu sortieren hatte ich schon selber erlebt, auf thedailywtf.com gibt es mehr Beispiele davon...
 

fastjack

Top Contributor
@slawa Bei dem groben Schnitzer hast Du natürlich recht, den hatte ich hier

Danke @Tharsonius. Es hat sich doch ein Syntaxfehler eingeschlichen, tauscht bitte Zeille 78 und 77 gegeneinander aus. Aber wieg gesagt, es geht nicht um Syntax, Sinn oder Unsinn.

bereits korrigiert. Hier sollte nicht gezeigt, daß etwas falsch oder richtig ist. Ich wollte nur mal Eure Meinungen dazu lesen und zwar unbeinflußt von irgendwelchen Vorerklärungen meinerseits. Tut mir leid, wenn ich jemanden damit verwirrt haben sollte.

... 10.000 Zeilen C-Quelltext in nur 4 Funktionen zu schreiben. ... mit Copy & Paste ... gesamte Alphabet ausgenutzt ... Programmieren anhand von Büchern lernt, zu einer Zeit, wo man kein Internet Zuhause hat...

war bei mir genauso, nur das es das Internet in seiner jetzigen so noch gar nicht gab, es hätte auch schlecht durch nen Akkustikkoppler gepaßt ;)

@all Ich bedanke mich noch mal, daß Ihr Euch etwas Zeit genommen habt und etwas dazu gepostet habt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Tipps für Organisation von Code-Reviews nach einem Pull Request. Allgemeine Java-Themen 5
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
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
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
OnDemand Clean Code oder Allgemeine Java-Themen 5
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 &#8203; 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
G 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