Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Besser lesbare Schleifen #78

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

ruderphilipp
Copy link
Contributor

Durch das verbesserte for-Konstrukt für Schleifen wird der Code verständlicher. Mit Collections.addAll() wurde weiterhin der individuelle Code durch Standardmethoden ersetzt, um das Fehlerpotential zu senken.

@ruderphilipp ruderphilipp marked this pull request as ready for review November 28, 2021 14:57
@ruderphilipp ruderphilipp marked this pull request as draft January 12, 2022 18:04
@ruderphilipp ruderphilipp force-pushed the refactoring/loops branch 2 times, most recently from 6ee5672 to 553da56 Compare January 12, 2022 19:22
@ruderphilipp ruderphilipp marked this pull request as ready for review January 12, 2022 19:24
willuhn added a commit that referenced this pull request Jan 15, 2022
Copy link
Contributor

@meigelb meigelb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bitte die Vorschläge anschauen, dann beantworten oder ggf. Code ändern. Danke.

Iterator<Class> keys = actionMap.keySet().iterator();
while (keys.hasNext())

for (Class key : actionMap.keySet())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

final ist hier und in anderen Schleifen auch denkbar, aber kann von mir aus auch so bleiben

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

final wäre zwar korrekt, schadet bei kurzen Schleifen aus meiner Sicht jedoch dem Lesefluss (a.k.a. "Füllwort").

final ist ja dazu da, dass der Compiler verhindert, der Variable ein neues Objekt zuzuweisen. Da es sich hierbei um die Schleifenvariable handelt und der Code überschaubar ist, sollte das nicht passieren/ ist das Risiko sehr gering.

@@ -178,10 +178,9 @@ public boolean isEnabledFor(Object o)
if (o instanceof AuslandsUeberweisung)
return !((AuslandsUeberweisung)o).ausgefuehrt();

AuslandsUeberweisung[] t = (AuslandsUeberweisung[]) o;
for (int i=0;i<t.length;++i)
for (AuslandsUeberweisung ueberweisung : (AuslandsUeberweisung[]) o)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Falls ich https://stackoverflow.com/a/9795631 richtig deute, sollte man es nicht an dieser Stelle casten, da das eine "unchecked cast warning" wirft.
Obwohl es natürlich weiter oben mit instanceof auf Kompatibilität geprüft wird. Ich wäre hier dennoch dafür, es konsistent mit der sonstigen Implementierung umzusetzen:

for (Object obj : o)
{
  AuslandsUeberweisung ueberweisung = (AuslandsUeberweisung) obj;

Ich sehe gerade, dass es noch weitere Dateien in diesem PR betrifft.
@willuhn : Was denkst Du?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ich bin ehrlicherweise kein Fan von solchen reinen Refactoring-PRs. Die betreffen immer etliche Dateien, kosten mich damit viel Zeit für das Review und machen die GIT-History schlechter lesbar. Ich würde es schöner finden, wenn man solche Aufräumarbeiten jeweils an den Stellen macht, wo man ohnehin gerade wegen einem Bug oder neuen Feature beschäftigt ist.

src/de/willuhn/jameica/hbci/io/AbstractDTAUSIO.java Outdated Show resolved Hide resolved
src/de/willuhn/jameica/hbci/server/UmsatzGroup.java Outdated Show resolved Hide resolved
GenericObject o = (GenericObject) this.umsaetze.get(i);
if (o.equals(node))
for (Umsatz u : this.umsaetze) {
if (u.equals(node))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Funktioniert der equals hier, oder muss node noch auf Umsatz gecastet werden?

Copy link
Contributor Author

@ruderphilipp ruderphilipp Jan 23, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ja, funktioniert. In UmsatzImpl::equals wird stets versucht, auf Umsatz zu casten:

public boolean equals(GenericObject o) throws RemoteException {
		if (o == null || !(o instanceof Umsatz))
			return false;
		try
		{
			Umsatz other = (Umsatz) o;
...

{
Umsatz u = this.umsaetze.get(i);
if (u.equals(node))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Funktioniert der equals hier, oder muss node noch auf Umsatz gecastet werden?
Die selbe Fragen beim nächsten equals.
-> Vermutlich funktioniert es, weil es sonst vorher auch nicht funktioniert haben dürfte (war schon immer <Umsatz>.equals(<GenericObjectNode>).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Identische Thematik wie bei UmsatzGroup.java. Lass uns dort an einer Stelle diskutieren. Ich lasse diesen Kommentar hier weiter offen, damit wir ihn nicht vergessen, falls dort Änderungen vorgeschlagen werden.

Nutze benannte Variablen statt Iterator mit `i.hasNext()` und `i.next()`
Nutze benannte Variablen statt Index
@meigelb
Copy link
Contributor

meigelb commented Jan 25, 2022

Bei Deinem Rebase ist folgender Commit verloren gegangen (siehe Dein Kommentar oben #78 (review)):
--------------8<--------------
Revision: 553da56
Author: Philipp Riemer [email protected]
Date: 28.11.2021 15:55:34
Message:
Bugfix: aktuellen Dateinamen im Logging

Es wurde stets der erste Dateiname verwendet, wenn das Einlesen einer Datei nicht funktioniert hat, und nicht der Name der Datei, die die Fehler verursacht hat.

Modified: src/de/willuhn/jameica/hbci/gui/controller/LicenseControl.java
-------------->8--------------

Randnotiz: Ich finde einen Rebase während aktivem Review immer etwas ungünstig, da ich dann unter Umständen alles erneut anschauen muss, anstelle nur den Diff der neusten Commits mit den Änderungen zu bewerten.

Copy link
Contributor

@meigelb meigelb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bitte #78 (comment) beheben oder kommentieren. Danke.

@ruderphilipp
Copy link
Contributor Author

Hallo @meigelb,

Bei Deinem Rebase ist folgender Commit verloren gegangen [...] Es wurde stets der erste Dateiname verwendet, wenn das Einlesen einer Datei nicht funktioniert hat, und nicht der Name der Datei, die die Fehler verursacht hat.
Modified: src/de/willuhn/jameica/hbci/gui/controller/LicenseControl.java

Das liegt daran, weil @willuhn die Codeanpassung bereits hinzugefügt hat (siehe 87c7c38). Somit ist sie hier nicht mehr notwendig. 😀

Randnotiz: Ich finde einen Rebase während aktivem Review immer etwas ungünstig, da ich dann unter Umständen alles erneut anschauen muss, anstelle nur den Diff der neusten Commits mit den Änderungen zu bewerten.

Aus meiner Sicht ist ein Rebase deutlich übersichtlicher als ein Aufräumen mit zusätzlichen Commits, solange es sich noch um ein Pullrequest handelt. Grund: Die Änderungen sind noch nicht im Produkt/ Produktivcode ist, sondern erstmal ein Entwurf/ Kandidat -- somit kann man daran feilen und polieren bis es passt, ohne dass nachher im Produktivcode in der Historie das Hin und Her rekonstruiert werden können muss. Dort ist dann nur das Endergebnis ersichtlich (vgl. Punkt 10 hier).

Github unterstützt das, indem diejenigen Dateien im Reiter "Files changed" hervorgehoben werden, die sich geändert haben. Bei einem neuen Commit nach Deinem Review, wird jede veränderte Datei wieder aufgeklappt, der Haken bei "viewed" wird herausgenommen und ein Hinweis mit "changed since last view" erscheint.
github_view_after_change

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants