ineffizienter Code

davidh38

Bekanntes Mitglied
Hello Javafans,


Java:
for -Schleife
        
                
             if()
                führ funktion aus
             else() 
               führe funktion2 aus

Jetzt ist meine Frage, ob ich das so lassen kann, oder ob ich lieber zwei verschiedene for-Schleifen schreiben sollte, um der effizienz Willen?
 

Opi3

Aktives Mitglied
Was willst du den dar mit zwei for schleifen machen? (Ich frage wirklich weil ich es wissen will, das ist also keine Rhetorischefrage, mir kommt nur keine Idee wozu man ne zweite schleife bräuchte)

Opi3
 

davidh38

Bekanntes Mitglied
Was willst du den dar mit zwei for schleifen machen? (Ich frage wirklich weil ich es wissen will, das ist also keine Rhetorischefrage, mir kommt nur keine Idee wozu man ne zweite schleife bräuchte)

Opi3

damit nicht jedesmal in der Schleife eine if-Frage erfolgen muss und alles ein bissel schneller ginge, es sei denn der Compiler optimiert das selbst
 

Opi3

Aktives Mitglied
Dan hast du das also lieber so:
Java:
//EDIT: Tut mir leid das das so komisch formatiert ist
     
             if(){
                for -Schleife{
                      führ funktion aus
                                 }
                 }
                 else{
                for -Schleife{
                     führe funktion2 aus
                                 }
                       }

Das bringt bestimmt (ganz wenig) Performance mehr, aber mir wäre ein leserlicher Code wichtiger...
Opi3
 
G

gman

Gast
Hi,

ich würde mir eher Gedanken über die Lesbarkeit machen als über die
Performanz, es sei denn du hast damit aktuell ein konkretes Problem.

Michael A. Jackson hat gesagt.:
The First Rule of Program Optimization: Don't do it.
The Second Rule of Program Optimization (for experts only!): Don't do it yet.

Die zweite Variante funktioniert ja auch nur wenn sich die Bedingungen nicht
durch Elemente ergeben die in der Schleife durchlaufen werden:

Java:
// Schleifen innerhalb der Verzweigung
if(bedingung1) {

    for(int i = 0; i < 10; i++) {
        funktion1();
    }
    
} else {

    for(int i = 0; i < 10; i++) {
        funktion2();
    }
    
}

In der ersten Variante hast du nur einmal den Schleifenrumpf, das halte
ich für lesbarer (und damit nachvollziehbarer):

Java:
// Verzweigung innerhalb der Schleife
for(int i = 0; i < 10; i++) {

    if(bedingung1) {
    
        funktion1();
        
    } else {
    
        funktion2();
    }
}

Aber wie gesagt hängt das auch davon ab wie die Bedingungen und
Schleifen zusammenhängen.
 
T

Tomate_Salat

Gast
@TO: Lass es in einer schleife. Zum Schluss kommst du noch auf die Idee soetwas zu machen:

Java:
for(...) {
    if(check) {methodA();}
}

for(...) {
   if(check) {methodB();}
}

das wäre nämlich der Fall, wenn sich deine Bedingung ändern würde. If-else-Konstrukte kannst du in Schleifen durchaus verwenden. switch-case übrigends auch ;-)
 

nrg

Top Contributor
ich verstehe ehrlich gesagt überhaupt nicht die frage :D. was macht es denn für ein sinn, die schleife 2x zu durchlaufen und was soll daran schneller sein? ich meine, das kommt ganz auf deine bedingung an, aber im besten fall erzielst du mit 2 schleifen genauso viel iterationen wie mit einer schleife - im worst case doppelt soviel

edit: achsoo. deine bedingung ist nicht von der iteration abhängig? ja, dann verstehe ich jetzt auch, was du meinst ;). wenn die methoden einen return haben, bietet sich der ternäre operator an. ansonsten würde ich das aber auch eher in eine schleife packen...
 
Zuletzt bearbeitet:

Antoras

Top Contributor
Ich würde den Code in Methoden auslagern:
Code:
choose() {
  if (condition) meth1
  else meth2
}

meth1() {
  for () {...}
}
meth2() {
  for () {...}
}
Ich sehe zwei entscheidende Vorteile:
  1. Du bekommst durch den Methodennamen die Möglichkeit geschenkt einen Identifier zu wählen, der beschreibt was getan werden soll.
  2. Jede Methode kümmert sich nur um eine Sache.
    Code:
    choose
    wählt anhand der Bedingung eine entsprechende Aufgabe um die sich
    Code:
    meth1
    und
    Code:
    meth2
    dann kümmern.
 

Marco13

Top Contributor
Ganz klar: Das kommt darauf an...

Es kommt darauf an, wie aufwändig und leicht isolierbar die if-Abfrage ist, wie viel code in den beiden if-Fällen steht, und wie viel noch außerhalb der if-Abfrage, und welche Möglichkeiten zur Strukturierung man überhaupt hat. Sowas wie
Code:
final boolean condition = someCondition;
for (int i=0; i<n; i++)
{
    // 1000 Zeilen code
    ....

    if (condition) result+=1;
    else result -= 1;
}
in zwei Schleifen zu packen (oder auch in zwei Methoden) mit jeweils 1000+1 Zeilen zu packen würde natürlich keinen Sinn machen. Sowas wie
Code:
final boolean condition = someCondition;
for (int i=0; i<n; i++)
{
    if (condition) 
    {
        // 1000 Zeilen code...
        ....
    }
    else 
    {
        // 1000 komplett(!) andere Zeilen code
        ....
    }
}
in EINE Schleife zu packen, genausowenig. Asymptotisch gesehen ist es gleich schnell, und eine if-Abfrage kostet SO wenig Zeit, dass es in den allermeisten Fällen vollkommen egal ist, und man sich absolut vorrangig überlegen sollte, was übersichtlicher, leichter wartbar und leichter erweiterbar ist.

WENN es wirklich absolut extremst zeitkritisch ist (was gerüchteweise ja auch mal vorkommen soll) dann wäre das, was Opi3 bzw. Antoras angedeutet haben natürlich theoretisch schneller, als bei jedem Schleifendurchlauf die Abfrage erneut zu machen. Aber... etwas herablassend gesagt: Wenn du code schreiben würdest, bei dem das eine Rolle spielt, hättest du die Frage nicht gestellt :D
 
Ä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