break mit Sprungmarken

arthas

Mitglied
Moin,


ein paar Leute aus meinem Informatikkurs und ich haben beschlossen, um unseren Lehrer ein bisschen zu nerven ;) in einem kurzem Programm sämtliche Schleifen durch breaks mit Sprungmarken zu erstetzen (ja leider gibt es in Java nicht mehr das wundervolle goto :D ). Ich weiß, dass es kein guter Stil ist und das man das nicht missbrauchen sollte, aber just for fun kann man das ja mal machen. Back to the track:

Das Programm soll per Selectionsort 10 Zahlen sortieren. Hier das was ich geschrieben habe:
Java:
public static void main(String[] args)
	throws Exception
	{
		int n = 0, m = 0, help = 0;
		int a[] = new int[10];
		jump1:
		if (n<10)
		{
			a[n] = (int)(100 * Math.random() + 1);
			n++;
			break jump1;
		}
		getActualArray(a);
		n = 0;
		//for (int n = 1; !rightOrder(number); n++)//Solange die Zahlen ungeordnet sind
		jump2:
		if (!rightOrder(a))
		{
			m = getPostionOfSmallestNumber(a, n); //Index der kleinsten Zahl
			help = a[n]; //Vertauschen der der jeweiligen Zahlen
			a[n] = a[m];
			a[m] = help; 
			getActualArray(a); // Array ausgeben
			n++;
			break jump2;
		}
	}

Kompilieren tut er ohne zu meckern und ausführen auch, aber ausgeben tut er 10 mal eine 0! :shock:
(Die Methode getActualArray(int a[]) gibt ein Array aus, rightOrder(int a[]) prüft ob die Zahlen in der richtigen Reihenfolge sind und getPositionOfSmallestNumber(int a[], int b) gibt die Position der kleinsten Zahl an).
Meine Vermutung wäre, dass er das if gar nicht betritt, also den Array-Elementen keine Werte zu teilt. Dadurch würde das Array aus lauter 0 bestehen und entsprechend würde er es einmal ausgeben und das nächste if gar nicht erst betreten, da sie schon in der richtigen Reihenfolge sind!
Wie kann ich diesen Fehler beheben? ???:L


Gruß Paul!
 
N

nillehammer

Gast
Ein
Code:
break Label
kann nicht dazu benutzt werden, um die Zeile, in der das Label steht anspringen zu können. Das Label dient dazu, einer Kontrollstruktur (if/for/while/do) einen Namen zu geben und damit gezielt diese Kontrollstruktur über break/continue verlassen/fortsetzen zu können. In Deinem Code sagst du also "verlasse die benannte Kontrollstruktur (if-Verzweigung)".

Man kann den Fehler also garnicht beheben. Das ginge nur mit
Code:
goto Label
und das gibt's ja leider (oder zum Glück) nicht.
 
Zuletzt bearbeitet von einem Moderator:

Landei

Top Contributor
Da habt ihr was falsch verstanden: Obwohl die Sprungmarke vor einem Block (sei es jetzt for, while, do - wusste gar nicht, dass es bei if geht) stehen muss, geht der Ablauf danach weiter. Normalerweise braucht man keine Sprungmarken, weil das ja auch ein normales break tut. Sprungmarken helfen nur bei mehreren geschachtelten Blöcken, um nicht nur die inneren Schleife, sondern auch die umgebende (oder deren umgebende u.s.w.) zu verlassen.
 
N

nillehammer

Gast
Ark hat gesagt.:
Tut's auch nicht. break funktioniert nur in Schleifen und in switch -Blöcken.
Doch,
Code:
break label
geht auch bei ifs. Nur ist der Nutzen da noch zweifelhafter als bei Schleifen, weil man es eigentlich überhaupt nicht braucht, wenn man seine ifs richtig programmiert. Nachfolgend mal ein (ziemlich sinnloses) Beispiel:
Java:
  public static void main(String[] args) throws Exception {

    System.out.println("---testBreakInIfs(2)");
    testBreakInIfs(2);

    System.out.println("---testBreakInIfs(11)");
    testBreakInIfs(11);
  }

  private static void testBreakInIfs(int i) {

    outer: if (i > 0) {
      System.out.println("I größer 0");

      if (i > 10) {

        System.out.println("Und sogar größer 10");
        break outer;
      }

      System.out.println("Aber nicht größer 10");
    }
  }
 

Ark

Top Contributor
@nillehammer: Okay, dann hatte ich wohl ein schlechtes Beispiel erwischt oder die Fehlermeldung von Eclipse ("break cannot be used outside of a loop or a switch") ist irreführend. Ohne ein Label funktioniert break nicht, mit Label dagegen schon.

Obwohl ich Labels für Schleifen schätze, weiß ich nicht so recht, was ich bezüglich der ifs davon halten soll. Ich meine, schon ab und zu vor Code gestanden zu haben, wo ein break in einem if nicht schlecht gewesen wäre, meine aber, dass ich das komplett durch Umstrukturieren umgehen konnte (und zwar ohne booleans).

Ark
 
T

trääät

Gast
gott sei dank wurden wir in java vor GOTO bewahrt ... denn GOTO wird z.b. in einem batch-script für loops oder "sprünge" verwendet welche man in java durch richtiges verwenden der möglichkeiten deutlich besser umsetzen kann ...
GOTO ist also unnötig und wir nur in sprachen gebraucht die keine blöcke haben wie eben ein batch-script ...

breaks mit label machen wie schon beschrieben allerhöchstens bei geschachtelten loops sinn um vom inneren ohne komplexe flags direkt den äußeren loop steuern zu können ...

bei einem IF weis ich jetzt nicht wirklich wie es sich dort verhält ... aber mit BREAK wird man sicher keinen loop simulieren können ... da würde mir jetzt noch allerhöchstens einfallen CONTINUE missbrauchen zu wollen ...

alles in allem würde ich aber schon sagen das es besser ist das man mit java nicht so einen schund machen kann und daher entsprechende keywords nicht vorhanden sind und solche lustigen "hacks" nicht funktionieren ...
sicher wäre es mal ein alternatives looping ... aber for() und (do-)while() sollte bei richtiger programmierung mit if() und passenden flags die verwendung von labels komplett überflüssig machen ... wobei natürlich break und continue weiterhin bestandteil von loops und switch sind ...
 
T

tröööt

Gast
oh nein bitte nicht ... ich seh schon förmlich die "shell-scripte" als java-klassen vor mir ...
wenn die in Java8 echt GOTO einbauen ... naja obwohl ... ist genau so ein totaler schwachsinn wie TYPE-ERASURE ... so langsam wundert mich echt nichts mehr ...
 

Mikrowelle

Bekanntes Mitglied
Nehmen wir an es gäbe das goto.

Mich als Lehrer hätte es nicht gestört wenn ihr es mit goto gemacht hättet.

.....instant "6 - nicht betanden" rein stempeln und weiter chillen
 
N

no0b

Gast
Manchmal ist
Code:
break [...];
extrem nützlich, wenn man nicht extra ein Variable u. Überprüfung auf Abbruch einbauen will.

Das hat nichts laienhaftes, aber viele bewerten es so, weil sie es nicht besser wissen.
 

arthas

Mitglied
Ok anscheinend hab ich das dann doch falsch verstanden :( . Eigentlich schade, weil der Lehrer verdiente es einfach mal so richtig getrollt zu werden! ;D (uns für die Stunde ne 6 geben?! :D der typ hat weniger Ahnung von Java als ich, obwohl ich eigentlich C++ gelernt habe :D aber auch egal ;) )

Zu der if-Frage:
Ich hatte das eigentlich auch so in Erinnerung, dass man break/continue nur in Schleifen einsetzen könne, doch in "Java ist auch eine Insel" (die aktuelle Version, also JDK7), stand, dass man mit break auch einen Anweisungsblock abgebrechen kann. In meinen Augen ist das ja auch logisch, weil z.B. Switch-Case ja auch keine Schleife in dem Sinne ist! ;) Zumindest hat er es bei mir durchgehen lassen, der Compiler... :)

Jetzt nochmal, wir hatten nicht vor ein ernsthaftes Programm zu schreiben! :D Mir ist klar, dass die Benutzung jener besagten Befehle nicht sonderlich vorteilhaft ist, wenn auch manchmal verlockend. Im ursprünglichen Q-Code zu dem Programm, also dem Ordentlichen ;) , habe ich auch nur, glaube ich, einmal ein break benutzt. An der Stelle war es aber meiner Meinung nach auch wirklich sinnvoll, weil es einen Sonderfall behandelte.

Jetzt nochmal eine "wissenschaftliche" Fragestellung zum Schluss. :) Was ist eigentlich schneller/effizienter:
Sprünge, wie goto, oder richtige Schleifen? (Ich würde es ja selber testen, jedoch ist mein PC nicht sonderlich leistungsstark, was dazu führen, kann, dass die Ergebnisse verfälscht werden) Was ich damit meine, ist, dass man mit Sprüngen Schleifen nachstellen kann.
Ja "moralisch" ist es vielleicht nicht unbedingt vertretbar und sinnvoll ist es wahrscheinlich auch nicht, aber was soll's! :D (Ich meine seht euch Sprachen wie Brain**** an, sonderlich viel besser als goto und co. sind sie ja auch nicht ;) , selbst wenn selbst nur Studien :) )


Gruß Paul!
 

Marco13

Top Contributor
:):):):):):):):):):):):):):):):):):):) Nur ein Test, wie viele Smileys man in einem Post verwenden kann (20 ... mach ich aber auch meistens :oops: )

Im Java Bytecode gibt es nur "normale" Sprünge, d.h. man sieht ggf. kaum noch, ob was eine Schleife oder irgendwas anderes ist (bytecode JNE, JGTZ und so...). Da spielt höchstens die Frage eine Rolle, wie weit man springt, aber das ist in der Praxis irrelevant.
 

Marco13

Top Contributor
Da es kein Goto gibt, ist das schon eine sehr akademische Frage - und selbst wenn es das gäbe, gäbe es mehrere Möglichkeiten wie das (bzw. eine for-oder while Schleife) in bytecode übersetzt werden könnte, und dann nochmal mehrere, wie das vom JIT in native Befehle übersetzt werden könnte, und dann nochmal mehrere, wie diese Befehle in Hardware umgesetzt sein könnten. Eine Diskussion darüber entbehrt sich also nicht nur einer, sondern mehrerer Grundlagen.
 
N

no0b

Gast
Ich hätte sel sort so implementiert:

Java:
    public static void selectionSortWithBreak(int[] a) {
        one:
        for (int i = 0; /*i < a.length - 1*/; i++) {
            if (i == a.length - 1) {
                break one;
            }
            int min = i;
            two:
            for (int j = i + 1; /*j < a.length*/; j++) {
                if (j == a.length) {
                    break two;
                }
                if (a[j] < a[min]) {
                    min = j;
                }
            }
            int tmp = a[i];
            a[i] = a[min];
            a[min] = tmp;
        }
    }

    public static void main(String[] args) {
        int[] a = {9, 3, 8, 9, 4, 2, 5, 9, 8, 3, 4, 7, 2, 5, 1};
        selectionSortWithBreak(a);
        System.out.println(Arrays.toString(a));
    }

Im Prinzip verhält es sich mit den beiden break-Bedingung so wie mit der normalen Abbruchbedingung. Mit zwei Anmerkungen*.

Einen erfahrenen Lehrer, wie Landei z.B., könnt ihr damit aber nicht ins Schwitzen bringen. (Leider ist es mir im Moment nicht möglich, mich anzumelden und aus Danke zu klicken :D .)

*: - Die label sind unnötig, denn in der inneren Schleife muss nicht die äußere verlassen werden,
- wenn man
Code:
==
schreibt, gibt es bei leeren Arrays keinen Abbruch (AIOOB-Exception), und die Umkehrung von
Code:
<
wäre
Code:
>=
.
 

arthas

Mitglied
@Landei: Ich versteh nicht, warum du das postest?! Ich meine wie in den Kommentaren unter dem Q-Code schon steht, ist das nur eine sinnlose Verschandelung von den Möglichkeiten in Java ;) . Klar kann man in Java, genauso wie in allen anderen Sprachen sinnlosen Code schreiben, doch war dies ja nicht der Sinn und Zweck der ganzen Aktion. Während das nur eine Komplizierung (oder sehe ich das etwa falsch ;) ) ist, würde ein Code mit Sprüngen anstatt von Schleifen sogar einen Sinn ergeben. Zum einen würde er Sinn im sinne von einer Studie machen und zum anderen ist er keine Komplizierung sondern Umformulierung. Nach einem Gedankenspiel bin ich sogar zum Schluss gekommen, dass in manchen Situationen goto, break und co. potenziell sogar besser leserlich sind, als Schleifen! (Ich sehe schon die ersten mit Mistgabeln angelaufen kommen und schreien auf dem Scheiterhaufen mit dem Ketzer :D )

@Marco: Als solches war es auch gemeint! Es war durchaus als eine theoretische (akademische) Frage gemeint, weil es mich einfach mal interessiert hat. ;D Ich werde vielleicht mal demnächst entsprechenden C/C++-Code implementieren (wahrscheinlich eher C, weil es ohne oop ist und somit da das unverfälschteste Ergebnis rauskommen müsste oder?) und das testen.

@noob: Du hast Schleifen drin, was im Endeffekt nicht darauf hinausläuft, dass man auf sie verzichten kann. Ja "leider" geht es ja nicht mit goto! :D
 
N

no0b

Gast
Ohne Schleifen/Loops bleibt dir nur die Rekursion, um dein Vorhaben zu verwirklichen. :D (Oder, wie angedeutet, auf andere Sprachen ausweichen, die etwas mehr erlauben.)
 
P

pappawinni

Gast
Goto-Verfechter sollen Spaghetti essen, von mir aus auch mit der Mistgabel, aber nicht programmieren.
Das ist auch alles was es dazu zu sagen gibt.
 

arthas

Mitglied
Ich mag Spagetthi, ;D wobei mit Mistgabeln ist's glaub ich nicht allzu schmackhaft! :D
goto ist einfach nur lustiger Befehl, ist aber nicht ernst gemeint (ich hab noch nie goto eingesetzt in meinen Programmen und hab es eigentlich auch nicht vor, außer zu wissenschaftlichen Zwecken ;) )... :oops:
 
B

bone2

Gast
Goto-Verfechter sollen Spaghetti essen, von mir aus auch mit der Mistgabel, aber nicht programmieren.
Das ist auch alles was es dazu zu sagen gibt.

Jemand hat mir geflüstert, Schleifen sind eigentlich auch nur goto in Schönschrift sind.
Schonmal weniger hochentwickelte Sprachen programmiert? ;)

Wenn bei goto-Nutzern schlechter Code rauskommt, liegt das nicht am goto, deren code wäre auch in Java schlecht...
 

Landei

Top Contributor
@Landei: Ich versteh nicht, warum du das postest?! Ich meine wie in den Kommentaren unter dem Q-Code schon steht, ist das nur eine sinnlose Verschandelung von den Möglichkeiten in Java ;)

Nein, ist es definitiv nicht. Zum einen zeigt das Beispiel die Grenzen der Sprache auf (in vielen anderen Sprachen wie C#, Scala, Ruby, Python - oder auch Java 8 - wäre das Beispiel trivial), zum anderen, dass man diese eben auch mit etwas brachialer Gewalt überwinden kann. Gezeigt wird, wie man das (ungetypte) Lambda-Kalkül als eines der grundlegenden Modelle für Berechenbarkeit in Java umsetzen kann, und auch kompliziertere Anwendungen (wie hier der Fixpunkt-Operator) damit funktionieren. Deshalb handelt es sich um alles andere als "sinnlose Verschandelung": das Beispiel ist subversiv, einfallsreich, tiefsinnig und - wie der Autor selber schreibt - pervers, aber bestimmt nicht sinnlos.

Damit begehst du den gleichen Fehler wie diejenigen, für die moderne Kunst nur "Geschmiere" ist: Sie versuchen damit, auch Dinge, die sie nicht verstehen, in ihr Weltbild zu pressen, ohne die Möglichkeit auch nur in Betracht zu ziehen, dass dieses Weltbild einfach zu eng sein könnte. Wenn du das Beispiel nicht verstehst, liegt das einfach an einer Bildungslücke auf dem Gebiet der theoretischen Informatik (Modelle der Berechenbarkeit, Lambda-Kalkül u.s.w.) - und wenn du die füllst (was durchaus Spaß machen kann), wirst du ein besserer Programmierer, auch wenn du im richtigen Leben nie solchen Code schreiben wirst und solltest. Das ist wirklich nicht böse gemeint, sondern nur eine Anregung.
 
Zuletzt bearbeitet:
B

bone2

Gast
Nicht wirklich.
Auf Maschinensprachebene siehst du, dass Schleifen bedingte Verzweigungen sind, keine unbedingten Sprungbefehle. Also z.B. BEQ, BNE (Branch if equal, Branch if not equal)

Optimiert die VM das weg?
Java:
While () {
foo()
}
==
Code:
loop:
 compare
 bne afterloop
 foo()
 goto loop
afterloop:
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Geek And Poke: Coding Is An Art

Jeder sieht "Sinn" vielleicht in etwas anderem. Der Übergang zwischen "Kreativen Abstraktionsüberlegungen zum Aufzeigen transzendenter typetheoretisch-konzeptioneller Einschränkungen etablierter Programmiersprachenentwurfsparadigmen" und "Code hinschreiben, der Sachen macht" ist fließend.
 

langhaar!

Bekanntes Mitglied
@bone2
Dein Beispiel enthält doch eine bedingte Verzweigung. Ohne die wäre keine Schleife möglich. Ohne goto hingegen schon. Dass in deinem konkreten Fall ein goto vorkommt, widerspricht dem doch nicht.
 
B

bone2

Gast
@bone2
Dein Beispiel enthält doch eine bedingte Verzweigung. Ohne die wäre keine Schleife möglich. Ohne goto hingegen schon. Dass in deinem konkreten Fall ein goto vorkommt, widerspricht dem doch nicht.
umgekehrt ist die einzige schleife die ohne jmp möglich ist do-while und die ist oft :noe:
 

Ark

Top Contributor
Optimiert die VM das weg?
for- und while-Schleifen werden mit einem unbedingten Sprung (also einem goto ;)) in eine do-while-Schleife umgebaut:
Java:
public class _Test{

	private static boolean blubb;
[…]
	private static void schleife(){
		while(blubb){
			System.out.println();
		}
	}
}

Code:
public class test._Test {
  
  // Field descriptor #6 Z
  private static boolean blubb;
[…]
  // Method descriptor #8 ()V
  // Stack: 1, Locals: 0
  private static void schleife();
     0  goto 9
     3  getstatic java.lang.System.out : java.io.PrintStream [21]
     6  invokevirtual java.io.PrintStream.println() : void [94]
     9  getstatic test._Test.blubb : boolean [96]
    12  ifne 3
    15  return
Alle Basisoperationen, wie man sie bei regulären Ausdrücken findet (Auswahl, Verkettung, Wiederholung), haben Entsprechungen in typischen Kontrollstrukturen wie etwa in Java (if, die Hintereinanderschreibung von Anweisungen, while). All diese drei Operationen können aber auch mittels einer bedingten Sprunganweisung der Form IF b THEN GOTO x beschrieben werden. So gesehen sind GOTO-Konstrukte sogar noch primitiver als etwa if/do/while/for/switch.

Wenn man dann noch Epsilon-Übergänge (=unbedingte Sprünge) und (eigentlich nicht sinnvoll programmierbare Mehrdeutigkeiten) Nichtdeterminismus verbietet, hat man es sozusagen geschafft, einen regulären Ausdruck in einen deterministischen endlichen Automaten zu überführen. Dass das Ergebnis Spaghetti-Code ist, merkt man, wenn man versucht, den DEA wieder in einen halbwegs sinnvollen regulären Ausdruck zu überführen.

Ark
 

arthas

Mitglied
das Beispiel ist subversiv, einfallsreich, tiefsinnig und - wie der Autor selber schreibt - pervers, aber bestimmt nicht sinnlos.

Vielleicht, vielleicht auch nicht, das sollte jedem einzelnen überlassen sein, darüber zu urteilen! ;)
Zu deinem Kunst-Beispiel:
Ich persönlich halte 99,99999 % für sinnlos (genauso wie den größten Teil der Musik, insbesondere der Klassik, und recht viel Literatur, wobei hier eher moderne, 20/21.Jh erschienene...). Ich meine du stehst vor einem Bild und von dir wird verlangt darüber nach zu denken. Der Künstler maßt sich an, dass seine Meinung wirklich so wichtig sei, dass es sich lohnen würde sein Bild zu interpretieren! Doch bei was für Bildern lohnt sich den die Meinung? Beim 10000 Aussagen, dass das Leben endlich ist, oder, wenn man belehrt wird, dass Naturwissenschaften nicht alles seien? Ganz ernsthaft mir sind solche Meinungen egal! :pueh: Wenn mir einer ernsthaft was sagen will, dann soll er gefälligst von seinem hohen möchte-gern-Thron runterkommen und mir es direkt sagen... :mad: Ansonsten kommt mir die ganze Kunstszene, mit ihren ganzen Künstlern und Journalisten etc., vor wie in dem Märchen "Des Königs neue Kleider" (Achtung: Metapher bitte nicht ausrutschen :D ). ;)
So das war eine kurze Zusammenfassung meiner Meinung nur für dich! ;) :D

Back to the tracks:

Wenn du das Beispiel nicht verstehst, liegt das einfach an einer Bildungslücke auf dem Gebiet der theoretischen Informatik (Modelle der Berechenbarkeit, Lambda-Kalkül u.s.w.) - und wenn du die füllst (was durchaus Spaß machen kann), wirst du ein besserer Programmierer, auch wenn du im richtigen Leben nie solchen Code schreiben wirst und solltest.

Das mag sein und diese Bildungslücke werde ich auffüllen, sobald ich die Zeit dazu habe oder in dem Mathe und Informatik-Studium, welches ich vor hab (im Moment mach ich nur ein Frühstudium, also nur eine Vorlesung, bis Februar Analysis 1, pro Semester). :) Und würde mir dieses Gedöns kein Spaß machen, würde ich mich ja wohl kaum damit in der Freizeit beschäftigen! :D
 

Landei

Top Contributor
Zu deinem Kunst-Beispiel:
Ich persönlich halte 99,99999 % für sinnlos (genauso wie den größten Teil der Musik, insbesondere der Klassik, und recht viel Literatur, wobei hier eher moderne, 20/21.Jh erschienene...).

Das ist traurig. Die Klassik ist in Wahrheit der Beginn der modernen Musik - weg von Kirchentonarten und der reinen Stimmung, hin zu Dur und Moll, und unserer gewohnten temparierten Stimmung. Johann Sebastian Bach hat Musik geschrieben, die geradezu "mathematisch" ist, wie ein kompliziertes Gleichungssystem, dessen Lösung man mit Spannung erwartet. Wenn die Maler nicht die Perspektive entdeckt hätten, würden wir heute keine Fotographien oder Egoshooter kennen. Und selbst die perfekte Abbildung war ihnen nicht genug, später versuchten sie Naturgewalten, Eindrücke, Stimmungen, Gefühle auf die Leinwand zu bannen. Und was stört dich an moderner Literatur, die doch immer ein Spiegelbild der Gesellschaft ist? Die Visionen eines Huxley oder Orwell, das genaue Hinschauen eines Dürrenmatt, Ehrlichkeit bis zur Schmerzgrenze, Versteckspiele, das Hinter-die-Fassade-Schauen, Phantasien und politisierende Pamphlete, es ist alles ein Abbild einer immer komplexer werdenen Welt, ein notwendiges Abbild. Selbst schlechte Bücher können sehr interessant sein, weil sie eben die Weltsicht ihres Verfassers, seine Widersprüche, seine Denkfehler offenbaren. Schönstes Beispiel dafür ist, wenn Serdar Somuncu aus "Mein Kampf" liest: serdar somuncu liest.... - YouTube

Du lebst nicht in einem Vakuum. Du kannst dich auch nicht in Watte packen, nur "deine" Musik hören, nur "deine" Literatur lesen. Gerade die Menschen, mit denen du nicht übereinstimmst, können dich inspirieren. Sollte ich als Atheist nicht Bibel und Koran lesen, oder als Christ Nietzsche? Sollte ich nicht in eine Ausstellung chinesischer Künstler gehen, weil mir das zu kompliziert und fremd ist, weil mir das nicht "gefällt"? Dazu kann ich nur mit D. Miller sagen: "In the age of information ignorance is a choice."
 
Zuletzt bearbeitet:
P

pappawinni

Gast
Jemand hat mir geflüstert, Schleifen sind eigentlich auch nur goto in Schönschrift sind.
Schonmal weniger hochentwickelte Sprachen programmiert?
Sicher.. assembler u.a. auch auf 6510 (C64)..
auch Steuerungen von Maschinen sind mitunter relativ einfach gestrickt...
Wer redet denn davon?
Aber ich habe z.B. auch einige hundert Fortran-Programme umgeschrieben...
Goto ist gut für Spaghetti-Code, für nichts sonst.
 

arthas

Mitglied
Wenn man von 99,99999% spricht, dann gibt es immer noch 0,000001% an Dingen die mir gefallen! Ich liebe Dürrematt und seinen Schreibstil (Die Physiker habe ich mehrmals hintereinander gelesen und bin einfach nur begeistert gewesen) und für einige Stücke der Klassik (aber auch Moderne) sind durchaus genießbar, jedoch wie ich schon gesagt hab, ist der größte Teil dessen unnötig. Krabat las ich durch, Faust las ich durch, doch als ich begonnen habe einige moderne Bücher, so zu sagen "Bestseller" ;) , zu lesen kam mir schon das Brechen auf den ersten Seiten. Beim einem wird der Leser gleich auf der ersten Seiten beleidigt, beim nächsten ist der Schreibstil so grotig, dass man gänzlich die Lust am Lesen verliert! Sorry, aber der größte Teil moderner Literatur, Kunst und Musik ist einfach nur Rotz!
Ist ja schön, dass du deinen Spaß an Dur, Moll und Kontrapunkten hast ;) , aber ehrlich gesagt hängt mir dieses ganze Musik-Analyse-Gedöns schon zum Hals raus! :D Mag ja sein, dass das dort evolutionär war, doch was soll es mich kümmern? Entweder ich mag Musik oder nicht (im übrigen hab ich keinen festgelegten Stil, denn ich bevorzugt höre :) ).
Das mit der Perspektive und so, da hast du teilweise recht, da manch Künstler dort Pionier war und somit geholfen hat, doch trifft dies nur auf die wenigsten zu!

Sollte ich als Atheist nicht Bibel und Koran lesen, oder als Christ Nietzsche? Sollte ich nicht in eine Ausstellung chinesischer Künstler gehen, weil mir das zu kompliziert und fremd ist, weil mir das nicht "gefällt"?
Ja du darfst selber entscheiden, ob du die Bibel liest! Nein du musst nicht in eine Ausstellung gehen, wenn sie dir nicht gefällt, warum auch?
Inspiration zu was? Weder Kunst, noch Musik hat mich jemals dermaßen "inspiriert", dass ich etwas rein deshalb gemacht habe! (Literatur ist in dem Feld eine Ausnahme, da es doch sehr gelungene Werke gibt, die einem zum Denken anregen und sich klar positionieren, ohne irgendeine "hoch-künstlerische" Note dazu zu geben) Menschen, die was geleistet haben, wie Newton oder Einstein inspirieren mich, aber keine Künstler! (Ich weiß wir geraten gerade total off-Topic :D )


Nun interessiert mich diese goto-Frage doch. Wie könnte ich vorgehen, um dies zu untersuchen? Hochsprache nutzen oder Assembler? Was für Rechner?
 
S

Spacerat

Gast
Goto ist gut für Spaghetti-Code, für nichts sonst.
Ohne GOTO geht's auch in Java nicht, zumindest nicht auf Bytecode-Ebene (Opcode 0xA7). Die Sache ist nun mal die, dass Hochsprachen im Allgemeinen quasi versuchen, eine Logik dem menschlichem Verstand anzupassen. Wenn einer diese Logik verstanden hat, produziert er mit GOTO auch keinen Spaghetti-Code mehr. Jemand, der schon mal einen C64 programmiert hat, sollte das wissen, bzw. frag' mal die Entwickler des Java-JIT-Compilers.
Ich selbst hätte nichts gegen GOTO in Java, man muss es ja nicht benutzen. Nötig ist es jedoch nicht, BREAK LABEL ist ja schon zu viel. Wer solche Konstrukte nötig hat, kann ja evtl. gleich in ByteCode programmieren (Was, geht nicht? Von wegen! ;)).

@arthas: was genau willst du denn herausfinden? Wie GOTO effektiv eingesetzt wird? Dafür sind sämtliche Opcode-Sprachen (Assembler) gut und Java Bytecode ist eine davon (darf man nie vergessen). Welcher Rechner? Äheee... Nicht welcher Rechner, sondern welcher Prozessor. Antwort: Egal.
 
Zuletzt bearbeitet von einem Moderator:
S

Spacerat

Gast
So in etwa. Ich meine was effizienter ist Sprünge oder Schleifen!?
Hast du dir mal Arks Beitrag angesehen, wo er Java Quellcode mit Schleife dekompiliert darstellt? Da ist doch ein GOTO drin. Es ist nicht die Frage, was effizienter ist, sondern eher die Frage was sich besser lesen lässt. Wenn du in Opcode-Sprachen erst von A nach Z gejagt wirst, nur um festzustellen, dass es von Z unter Umständen gleich wieder bei B weiter geht, ist der Code gleich halb so verständlich als in der ursprünglichen Hochsprache (Quelltext). Effizient ist beides (bzw. aus Schleifen werden nun mal irgendwelche, bedingte oder unbedingte Sprungmarkenkonstrukte, was anderes versteht der Prozessor nicht), wenn man's richtig programmiert. Wenn eine Hochsprache Schleifenkonstrukte bietet, sollte man um Sprunmarkenkonstrukte einen Bogen machen, weil besser als der Compiler implementiert man das garantiert nicht (Spaghetti-Code usw. ;)).
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Break Sprungmarken Problem einer While True in While True Java Basics - Anfänger-Themen 6
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
T Break Continue Java Basics - Anfänger-Themen 4
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
I Erste Schritte while anstatt for, if und break Java Basics - Anfänger-Themen 10
B Break, Continue und Assert Java Basics - Anfänger-Themen 5
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
K Unterschied zwischen break und continue in einer Schleife Java Basics - Anfänger-Themen 14
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
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 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
G Sprungmarken Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben