Code Konvention for-Schleife / return

Dragonfire

Bekanntes Mitglied
Hey,
ich habe da mal eine Frage und zwar nicht zu einem korrekten Code,
sondern um den "Style".

Als einfach Beispiel dient jetzt mal eine einfache Methode, welches ein Palindrom festellen soll:

Java:
public static boolean isPalindrom(String word) {
		boolean palindrom = true;
		char[] c = word.toCharArray();
		for (int i = 0; i < c.length / 2 && palindrom; i++) {
			palindrom = c[i] == c[c.length - 1 - i];
		}
		return palindrom;
	}

Angeblich gibt es die Konvention,
dass die for-Schleife nur als Zählschleife dient und demnach meine Version mit
dem logischen und (palindrom) nicht ganz konform ist.

Habt ihr davon schon gehört?

Sollte man lieber einen Methodenausgang haben oder lieber mehrere?

Diese Diskussion würde mich mal interessieren.
 
B

bone2

Gast
http://www.oracle.com/technetwork/java/codeconventions-150003.pdf

keine einschränkung für deinen fall.

Java:
    public static boolean isPalindrom(String word) {
        boolean palindrom = true;
        char[] c = word.toCharArray();
        
        for (int i = 0; i < c.length / 2; i++) {
            palindrom = c[i] == c[c.length - 1 - i];
            
            if (! palindrom) {
                break;
            }
        }
        
        return palindrom;
    }
ist leicht besser verständlich, würd ich sagen
 
Zuletzt bearbeitet von einem Moderator:
B

bygones

Gast
Ich glaub auf den ersten Blick hätte ich das [c]&& palindrom[/c] schlichtweg übersehen.
jo...

zusätzliche Abbruchbedingungen in for schleifen find ich auch unschön, da gern übersehen. Ist aber keine Konvention eher meiner ansicht nach Gewohnheit

Ich würds glaub ich eher so schreiben:
Java:
    public static boolean isPalindrom(String word) {
        char[] c = word.toCharArray();
        
        for (int i = 0; i < c.length / 2; i++) {
            boolean identical = c[i] == c[c.length - 1 - i];
            
            if (!identical) {
                return false;
            }
        }
        return true;
    }
ich bin kein freund vom break... man sieht nicht direkt was nun passiert. Durch das return wird direkt kommuniziert wie der Fall zu behandeln ist. Auch die Variable palindrom braucht man nicht... wenn man durch die schleife durch ist ists true... nochmals schaun zu müssen welchen wert palindrom nun haben könnte ist zu viel.

break und continue sind 2 Keywords die a) unsinnig sind und b) vermieden gehören...

Der einzige Streitpunk hier ist, dass manche behaupten es darf nur einen return geben in einer methode. Dies find ich aber nicht (siehe oben)

EDIT: der algorithmus ist übrigens n bisschen ignorant... lass man Anna durchlaufen ;-)
 
Zuletzt bearbeitet von einem Moderator:

tfa

Top Contributor
Ich würde das Flag ganz rausschmeißen und das break durch "return false" ersetzen. Am Ende dann "return true". Das ist noch leichter zu lesen.
 

Dragonfire

Bekanntes Mitglied
Vielen Dank für die Antworten,

also ich kann jetzt immerhin nachvollziehen warum man Bedingungen nicht in
der for-Schleife packt ...
Mit den zwei Methodenausgängen geht es jetzt noch hier beim Beispiel.
Aber ich finde es kann schnell unübersichtlich werden.
 

Andi_CH

Top Contributor
Zwei Methodenausgänge in kleineren Methoden ok obwohl ich lieber nur einen sehe :) - spätestens bei einigen 100 Zeilen und 15 Methodenausgängen ;-) .... no go!
 

MySelV

Aktives Mitglied
Hi,

ich würde sagen bei einer 100-zeiligen Methode sind 15 Methodenausgänge nur das I-Tüpfelchen. Die Methode selbst ist schon viel zu lang.
Ich finde, dass man durchaus mehrere returns haben kann, schon weil es oft Einrückungen spart, wenn man
Java:
if (some == null) {
   return nullSollNichtSeinReturn;
}
// code
return ergebnis;
hat.

Sorry für OT
Erik

Edit: 2 parallele Antworten mit gleichem Inhalt sprechen wohl für sich ;)
 
B

bygones

Gast
@Erik
[c]return nullSollNichtSeinReturn;[/c] gibt es schon in Java und nennt sich Exception :D
 

ARadauer

Top Contributor
wenn ich was suche?
schleife... gefunden return true oder was auch immer... ist das klarste was es gibt..

Java:
 public int getIndex(String toSearch){
      for(int i = 0; i < list.size(); i++){
         if(toSearch.equals(list.get(i))){ //kann natürlich eine komplexe bedinung sein...
            return i;
         }
      }
      return -1; //oder exception...
   }
 
G

Gast2

Gast
Ob ein oder mehrer returns in einer Methode ist eine weitere Diskussion. Hier auch schon sehr ausführlich geführt: http://www.java-forum.org/java-basics-anfaenger-themen/102055-mehrere-return-befehle-methode.html

DragonFire hat gesagt.:
also ich kann jetzt immerhin nachvollziehen warum man Bedingungen nicht in
der for-Schleife packt ...

Aber die Durchlaufbedingung einer Schleife sollte meinem Geschmack nach möglichst einfach sein und auf den ersten Blick erkennbar - das ist sie bei dir nicht. Du veränderst ja zusätzlich zu einem evtl recht komplexen Ausdruck (in deinem Beispiel noch recht einfach) die Bedingung fortlaufend mit. Wenn da jetzt ein Fehler auftritt und die Schleife abbricht kannst du erstmal mit dem debugger ran und versuchen herauszubekommen welcher Teil den Schleifenabbruch verursacht.
Java:
for(int i = 0; i < globalArray.length / list.size(); i++){
   [...]
   if(blah){
       list.remove(someobject);
   } else {
       i = dosomethingCrazyWithI();
   }
   [...]
}

Das würde der der es programmiert auch verstehen und für total klar und übersichtlich halten - sind ja alles einfache Anweisungen... Ist es aber einfach nicht für jemanden der dann von draussen drauf guckt. Überlg mal was hier z.B. für ekelige Dinge passieren können? z.B. ein DivisionByZeroException in der Evaluation der Abbruchbedingung... *schüttel*

Je einfacher der Code zu lesen und zu verstehen ist desto bessr ist das.
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
Moin,

jo...
zusätzliche Abbruchbedingungen in for schleifen find ich auch unschön, da gern übersehen. Ist aber keine Konvention eher meiner ansicht nach Gewohnheit
da kann ich Dir nur beipflichten :)
Gleiches gilt rein optisch auch für die "Division durch 2", wie ich finde!
Ich würde das zumindest klammern oder die Berechung gleich VOR die Schleife ziehen :
Java:
public static boolean isPalindrom(String word) 
{
    char[] c = word.toCharArray();
        
    int iMaxLen = c.length / 2;
    for (int i = 0; i < iMaxLen; i++) 
    {
         boolean identical = c[i] == c[c.length - 1 - i];
         if (!identical) 
         {
              return false;
         }
    }
    return true;
 }
Aber - wie gesagt - nur aus Gründen der Lesbarkeit !!

Gruß
Klaus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
N VB Code in Java verwenden Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben