Java Lässt sich folgendes Snippet vereinfachen?

Ich glaube, jetzt stimmt's:

Java:
    public static void main(String[] args) {
        final double middle = 0.0633; // for btc-eth...
        final int places = 15;
        printList(middle, places);
    }

    public static void printList(final double middle, final int places) {
        if (middle <= 0 || places < 2) {
            throw new IllegalArgumentException("...");
        }
        final double halfPlaces = places / 2.0;
        for (int i = 1; i <= 20; i++) {
            // from 0.05 to 1.00 in 0.05-steps

            final double interval = 0.05 * i;
            final double realInterval = interval * 0.01 * halfPlaces;
            final double lowerBound = (1.0 - realInterval) * middle;
            final double upperBound = (1.0 + realInterval) * middle;

            System.out.printf("intervals = %f%n", interval);
            System.out.printf("lower     = %f%n", lowerBound);
            System.out.printf("upper     = %f%n", upperBound);
            System.out.println("---");
        }
    }

Danke an alle!
 
Wenn du realInterval nicht ausgibst, könntest du die 0.01 bereits in halfPlaces "reinrechnen"
Aber sicher nicht kriegsentscheidend
 
Zuletzt bearbeitet:
Zeile 16 ist quasi nur eine Optimierung ;) Wäre nicht nötig, aber Zwischenspeicherung des Ergebnisses und ich find es besser lesbar
 
Mal eine Frage in die Runde, was hat das mit Vereinfachung zu tun? Und der Methodenname ist aus der Hölle! Printlist ist wohl bestimmt nicht, das was das Ding nur macht.
Was genau macht die jetzt ?
 
Die Frage ist halt, welchen Mehrwert man davon hat an dieser Stelle eine Methode zu machen, die die Liste erzeugt, und dann eine Methode, die die Liste ausgibt.

Akademisch bin ich bei dir. Dann braucht es idealerweise noch passende Datenklassen, und dann wird's am Ende irgendwie ziemliches Overengineering.
 
  • Gefällt mir
Reaktionen: CyborgBeta
Das beantwortet meine Frage nicht. Wenn sowas in meinem Codereview zu begutachten wäre, würde ich den TE fragen, was um Gottes Namen diese Methode macht. Sie macht definitiv mehr als nur etwas printen. Das ist dasselbe, wenn mir Kollegen getter basteln, die Logik ausführen.

Wie willst du denn als Dritter dieses Ding mit einem Unittest abdecken ohne irgend einen Kontext vom Verfasser? Das hat null mit Vereinfachung zu tun und ist meilenweit entfernt von CleanCode. Diese Methode ist nicht selbsterklärend und hat nicht mal einen Doku-Kommentar obwohl sie Public ist.
Ergänzung ()

tollertyp schrieb:
Die Frage ist halt, welchen Mehrwert man davon hat an dieser Stelle eine Methode zu machen, die die Liste erzeugt, und dann eine Methode, die die Liste ausgibt.

Akademisch bin ich bei dir. Dann braucht es idealerweise noch passende Datenklassen, und dann wird's am Ende irgendwie ziemliches Overengineering.
 
Welcher Dritter? Sorry, aber ich bin raus, wenn jetzt Probleme gesucht werden, die nicht existieren.

Wenn es einen Dritten geben würde (wer ist eigentlich der Zweite?), dann wäre vermutlich der schon vorher gefragt worden.

Ich weiß auch nicht, wo der TE etwas von Clean Code geschrieben hat. Es gibt auch so etwas wie "Pragmatismus". Aber du scheinst an einer rein akademischen Diskussion interessiert zu sein, die nicht nur dem TE am Arsch vorbei geht an dieser Stelle. Deshalb bin ich auch raus.

DefconDev schrieb:
Das beantwortet meine Frage nicht. Wenn sowas in meinem Codereview zu begutachten wäre,
Er hat nicht nach einem Code-Review gefragt.

Ich halte die Lösung auch nicht für gut, aber das muss der TE für sich wissen. Er lebt mit dem Code.
 
  • Gefällt mir
Reaktionen: CyborgBeta
Du gehst nicht auf meine Eingangsfrage ein. Der TE möchte etwas vereinfacht haben aber keiner hier in der Runde fragt mal nach, was überhaupt diese Methode macht, weil schon der Methodenname einfach nur schrott ist. Die Variable-Namen sind nichtssagend und keiner hier macht ihn drauf aufmerksam.

Ich verstehe solche Hilfen ebenso auch als Anstoß, jemanden etwas mitzugeben für den Beruf. Wenn der TE sein Leben lang nur für sich programmiert, kann er das gerne so handhaben aber sobald er in einem Team arbeitet, ist das in meinen Augen selbstverständlich, Themen sie CC und ähnliches.

Lediglich ein Hinweis auf Magic Numbers der komplett ignoriert wurde vom TE.
 
  • Gefällt mir
Reaktionen: BeBur
@DefconDev Was die Methode tut, ist hier belanglos. Man kann gewisse Codemetriken auch dann anwenden, wenn man keine Kenntnis von der Domäne hat.

Dass die Variablennamen nichtssagend seien oder angeblich Magic-Numbers verwendet würden, ist natürlich haltlos. Auf solche Pöbeleien gehe ich auch nicht weiter ein.

Und "vereinfachen" (oder "Vereinfachung") ist einfach eine umgangssprachliche Umschreibung für "code reviewen". Ich denke, jeder hier konnte etwas mit dem Begriff anfangen.
 
Mal von mir als nicht-Java Entwickler. Wie Sinnvoll ist es das die Variablen inerhalb der Schleife als final gesetzt werden?
 
  • Gefällt mir
Reaktionen: CyborgBeta
@Keylan Es gibt da zwei Schulen: Alles final machen, was möglich ist (auch lokale Variablen) - oder nur Konstanten, die final sind, (private/public static final ...) final machen.

Ich persönlich bevorzuge auch Zweiteres, es gibt aber auch Projekte, in denen darauf geachtet wird und das Tooling dementsprechend eingestellt ist. Hab ich mal bei Rolex erlebt.

Letztendlich ist es eine Glaubensfrage, an Übersichtlichkeit gewinnt man dadurch nicht.
Ergänzung ()

E: Jedenfalls hat IJ dafür unterschiedlich einstellbare Severity-Levels:

1693344866569.png


Die "Standardeinstellung" bei "Local variable or parameter can be final" ist aus.
Ergänzung ()

Ups, hier die richtige Option:

1693345279272.png
 
Zuletzt bearbeitet:
CyborgBeta schrieb:
Dass die Variablennamen nichtssagend seien oder angeblich Magic-Numbers verwendet würden, ist natürlich haltlos. Auf solche Pöbeleien gehe ich auch nicht weiter ein.
Haltlos? xD. Printlist ist nichtssagend, weil deine Methode mehr macht als nur ein paar "Sachen" printen. Und in der selben Methode sind etliche Magic Numbers, vielleicht solltest du das googlen, was es überhaupt bedeutet.

Wer das nicht sieht, der ist entweder in komplett in anderen Sphären unterwegs oder hat null Praxiserfahrung. Im Übrigen ist der Hinweis mit den Magic Numbers nicht einmal von mir.

Aber deine Posts in diesen Thread beweisen mir auch Mal wieder, dass du zur Sorte abgehoben und toxic gehörst.

Ich wünsche dir einen schönen Abend.
Ergänzung ()

tollertyp schrieb:
Er hat nicht nach einem Code-Review gefragt.

CyborgBeta schrieb:
Und "vereinfachen" (oder "Vereinfachung") ist einfach eine umgangssprachliche Umschreibung für "code reviewen". Ich denke, jeder hier konnte etwas mit dem Begriff anfangen.
Hmmm
 
DefconDev schrieb:
Printlist ist nichtssagend,
In erster Linie wird aber (nur) eine Liste (bzw. Tabelle) ausgegeben. Es ist aber auch richtig, dass da eine Berechnung stattfindet.

Aber, wenn du es akademisch willst: Die Methode ist nicht länger als (~) 20 Zeilen und hat auch nicht mehr als 3 Parameter... Uncle Bob wäre stolz. :D
 
Die Vermeidung von Magic Numbers ist doch kein akademischer Ansatz und die inhaltlich korrekte Benennung von Methoden, damit sie selbsterklärend sind ebenso nicht. Das ist beides doch wohl, das Mindestmaß an Konvention!

Was genau berechnet denn diese Methode? Ist das irgend ein bekannter Algorithmus oder mathematische Formel? Warum nicht, zumindest ein Zeile Kommentar dazu schreiben?

Du willst einen Codereview, dann wären mindestens genau diese beiden Themen mein lieb gemeinter Hinweis, das zu ändern.

Wenn du das nicht lesen willst, dann ist es ok aber mich als Pöbler zu titulieren weil ich offensichtliche Mängel in einem 20 Zeilen Code darstelle, ist unpassend. Dann frag nicht in einem Forum, sondern gründe in Telegramm eine "Non-Akademische Java Gruppe" und diskutiere da mit "Gleichgesinnten".
 
  • Gefällt mir
Reaktionen: BeBur
Nein, für 1.0 (das multiplikationsneutrale Element) und 0.01 (entspricht einem Prozent) weitere Variablen/Konstanten einzuführen, geht gegen die Lesbarkeit des Terms (imho).
 

Ähnliche Themen

Zurück
Oben