Break, Continue und Assert

b1zarRe

Bekanntes Mitglied
Hi,

ich wollte fragen, ob die break bzw. continue Anweisung
in der Regel für unschönes Programmieren steht?

Bei mir im Studium besteht der Professor A darauf, dass wir
ihm keines davon unter die Nase setzen, weil er meint,
dass wäre unschöner Stil. Professor B hingegen, findet
es an manchen Stellen sehr wohl legitim.

Ich persönlich würde eher zweiteres in Erwägung
ziehen... wie bei den Beispiel unten:
Was meint ihr?

Java:
int[] array = {0,1,2,3,4,5};
boolean wertDreiGefunden = false;

for(int i=0; i < array.length; i++) {
 if(array[i] == 3) {
   wertDreiGefunden = true;
   break;
 }
}

Es ist doch sinnvoll zu sagen, wenn mittem Array eine Zahl gefunden wird,
dass er die Schleife beenden soll... wozu dann noch n-Werte durchlaufen...??? Natürlich
finde ich auch, man sollte das nicht an jeder Stelle bringen und auch nicht unnötig
viele returns, weil das den Lesefluss behindert, aber in so einem Fall...???

Ähnliche Frage zu zu dem Assert Befehl. Dies ist ja eine Zusicherung, aber an welcher
Stelle ist sowas wirklich sinnvoll? Man könnte dies ja rein theoretisch durch eine
If-Bedingung feststellen... warum also assert?
 
T

Tomate_Salat

Gast
Naja, in deinem Beispiel würde ich eher folgendes schreiben:
Java:
for(int i=0;i<array.length && !wertDreiGefunden;i++) {

Damit ist beim Schleifenkopf schon klar, wann sie verlassen wird. Imho kann ein continue die Leserlichkeit erhöhen:

Java:
for(...) {
   if(...) { 
        ...
          if(...) {

      }
   }
}

solche Verschachtelungen umgehe ich oft mit continue:
Java:
for(...) {
  if(!...) continue;
  ...
  if(!...) continue;
}

finde ich wesentlich angenehmer. Und das ein oder andere break setze ich auch ab und zu mal ein. Man muss eben abwägen, was jetzt am besten ist.

zum assert:
Ich kenne es, aber wirklich benutzt habe ich es (in Java) noch nie. Es muss auch beim starten der Applikation explizit aktiviert werden und dient wohl eher zum testen während der Entwicklung (wobei zum testen von Code man heute wohl eher zu JUnit greift).
 
F

Firephoenix

Gast
Viele (nicht immer alle) von solche Konstrukten kann man mit dem extrahieren einer passenden Methode wesentlich schöner gestalten:

Java:
//...
int[] array = {0,1,2,3,4,5};
		boolean wertDreiGefunden = existiertDreiImArray(array);
//...


public boolean existiertDreiImArray(int[] array){
		for(int i=0; i < array.length; i++) {
			 if(array[i] == 3) {
			  return true;
			 }
			}
		return false;
	}

Zu dem Programmieren mit asserts habe ich noch den Link in der Sammlung:
Programming With Assertions

(Gab hier irgendwo vor ein paar Monaten mal eine super Diskussion zu break, continue und return - ich finde sie nur nicht mehr :( )
Gruß
 

b1zarRe

Bekanntes Mitglied
Danke euch Beiden.

Zu den Themen: Wie man diese implementiert ist mir klar,
nur nicht ein konkretes Beispiel zu Assertions, wo es sinnvoll (bzw. sinnvoller
als eine if-Bedingung) ist!
 
F

Firephoenix

Gast
Das einzige sinnvolle wären wohl die 2 genannten Beispiele im verlinkten Dokument, bei denen man entsprechende Kommentare mit asserts ergänzt (sowas wie //bis hierhin kommen wir garaniert nie, der compiler weiß es nur nicht) oder (else //hier gilt genau situation xyz).
Ich sehe aber kein Problem darin dort einfach eine passende Exception einzubauen.
Gruß
 
S

SlaterB

Gast
ein if hat verschiedene Verwendungen, auch normale Fallunterscheidungen

statt für hammerharte Tests ständig
> if(x) throw new RuntimeException("x ist blöd");
zu schreiben ist
> assert x : "x ist blöd";
erstens kürzer und zweitens besser lesbar, sofort als eine bestimmte Art von Prüfung erkennbar

leider hat man nicht viel Kontrolle auf die Exception, kann auch nicht gleich loggen, laufende Prozesse updaten und ähnliches,
mit Auffangen der Exception kann vielles davon noch mehr oder weniger erreichen, die Alternative ist aber eine eigene Methode:
> check(x, "x ist blöd");

-----

zur Sparsamkeik macht es vielleicht noch einen Unterschied, ob man
> if(x) throw new RuntimeException(x+" ist blöd");
> assert x : x+" ist blöd";
> check(x, x+" ist blöd");
schreibt, das if hätte dazu den Vorteil, dass der String nur im Fehlerfall zusammengebaut wird,
beim assert weiß ich es nicht genau, bei der Methode wäre in jedem Fall Aufwand da

ähnlich bei
> logger.debug(x+y+z+Zwischenraum);
vs
> if (logger.isDebugEnabled()) logger.debug(x+y+z+Zwischenraum);

geloggt wird in beiden Fällen dasselbe, mit if davor spart man aber evtl. teure Arbeit,
wobei es das if natürlich auch nicht umsonst gibt
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Break Continue Java Basics - Anfänger-Themen 4
K Unterschied zwischen break und continue in einer Schleife Java Basics - Anfänger-Themen 14
H break/continue in einer if-Abfrage? Java Basics - Anfänger-Themen 15
G continue und break Java Basics - Anfänger-Themen 1
S break & continue: sprungmarken Java Basics - Anfänger-Themen 10
B break Anweisung Java Basics - Anfänger-Themen 13
A break; mit Einfluss hinter else if Block Java Basics - Anfänger-Themen 3
D Break Sprungmarken Problem einer While True in While True Java Basics - Anfänger-Themen 6
H Best Practice Wie mit break verschachtelte Schleifen komplett verlassen? Java Basics - Anfänger-Themen 2
D Break funktioniert nicht so wie es soll Java Basics - Anfänger-Themen 8
A break mit Sprungmarken Java Basics - Anfänger-Themen 41
I Erste Schritte while anstatt for, if und break Java Basics - Anfänger-Themen 10
M Erste Schritte Break-Anweisung bei if-else Java Basics - Anfänger-Themen 6
S Break in dem Zusammenhang "legitim"? Java Basics - Anfänger-Themen 4
A mit break if beenden Java Basics - Anfänger-Themen 6
P for Schleife mit break, verstehe die Ausgabe nicht Java Basics - Anfänger-Themen 6
S break Label als Spungmarken vorher definieren Java Basics - Anfänger-Themen 4
G Probleme mit break hier; in if-Bedingung Java Basics - Anfänger-Themen 5
T String: NeueZeile (" ") , Break etc. abfangen Java Basics - Anfänger-Themen 2
I Frage zur Ausgabe do while mit break Java Basics - Anfänger-Themen 2
G break? Java Basics - Anfänger-Themen 2
C Switch / Case Problem, break funktioniert nicht! Java Basics - Anfänger-Themen 3
H Schleifen: break Java Basics - Anfänger-Themen 7
T Gültigkeit von break Java Basics - Anfänger-Themen 5
F Methode abbrechen wie mit break in Schleifen ? Java Basics - Anfänger-Themen 2
H break anweisung Java Basics - Anfänger-Themen 4
G break out; funzt nicht Java Basics - Anfänger-Themen 7
Garrit1994 Continue funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
B Schleife von anderer Methode stoppen? (Start continue) Java Basics - Anfänger-Themen 18
V Erste Schritte Warum geht meine continue Anweisung nicht? Java Basics - Anfänger-Themen 8
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
T switch case und continue Java Basics - Anfänger-Themen 5
S 'continue' in catch- und if-blöcken Java Basics - Anfänger-Themen 2
F continue in verschachtelter Schleife Java Basics - Anfänger-Themen 6
hdi continue bei labels Java Basics - Anfänger-Themen 31
W verschachtelte For-Schleife - continue Java Basics - Anfänger-Themen 8
D "Press any key to continue" Java Basics - Anfänger-Themen 2
P JUnitTest Best Practise (Ein Assert pro Test?) Java Basics - Anfänger-Themen 10
P SimpleEntity und Assert, woher nehmen? Java Basics - Anfänger-Themen 8
M JUnit Testmethoden mit mehreren assert Methoden Java Basics - Anfänger-Themen 1
V Methoden Schleifeninvariante Assert Anweisungen Java Basics - Anfänger-Themen 6
K Assert: Fehlerbedingung in String schreiben Java Basics - Anfänger-Themen 14
N Test mit assert Java Basics - Anfänger-Themen 9
A Assert statement Java Basics - Anfänger-Themen 3
S Assert Java Basics - Anfänger-Themen 14
B assert befehl in netbeans Java Basics - Anfänger-Themen 3
O Fragezeichenoperator assert expected Java Basics - Anfänger-Themen 7
L mit "assert" einen String prüfen Java Basics - Anfänger-Themen 5
D assert vor und nachbedingung Java Basics - Anfänger-Themen 9
E Assert Compilerfehler Java Basics - Anfänger-Themen 2
G Assert Java Basics - Anfänger-Themen 5
G Assert in eclipse oder wo/wie? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben