break übere mehrere ebenen



  • meinst du seine jetzige Lösung, oder die Exceptions?



  • Findest du es besser extra eine Variable für einen Flag anzulegen und diese dann immer nach jedem Durchgang auf jeder Ebene der verschachtelten Schleifen zu überprüfen (siehe meinen Ansatz), als einfach eine Exception zu werfen und diese dann zu behandeln?



  • Ich habe dir eine bessere Lösung gesagt, die nicht nur speziell wegen diesem Problem generell zu besserem Code führt.
    Und das mit der Exception ist
    - unbeschreiblich langsam (das kann man in Worten nicht ausdrücken)
    - ein verdammter Scherz gewesen?!

    Und dass die Lösung mit der bool Variable auch nicht der Hit ist, hast du ja selber schon erkannt. Wenn du über mehrere Ebenen springen willst, heißt dein Sprungbefehl fast immmer: return



  • machs mit goto 😃



  • Achso du redest jetzt wieder von goto. Sag das doch gleich.



  • Nein rede ich nicht. Ich rede von return. >> return <<

    Wenn du z.B. 2 Ebenen zurückspringen musst, dann lagere diese zwei inneren Schleifen in eine eigene Methode aus und returne von dort.

    - goto lässt sich _immer_ vermeiden, und es ist auch fast immer sinnvoll, das zu tun.
    - deine Lösung mit dem bool ist wohl auch nicht sehr schön.
    - das mit den Exceptions ist sowieso nicht ernst gemeint.



  • Ich hab die verschiedenen Techniken mal ausprobiert und kam zu dem Ergenis, dass goto der Exception gegenüber mir 21% mehr Performance eingebracht hat und dein Vorschlag mit dem return den ich jetzt auch nehmen werde brachte nochmal weitere 12%. Danke für den Tip.



  • Ich habe vor ein paar Tage ein goto gebraucht. Jedenfalls habe ich keinen besseren Weg gefunden, der nicht total umständlich war.



  • Helium schrieb:

    Ich habe vor ein paar Tage ein goto gebraucht. Jedenfalls habe ich keinen besseren Weg gefunden, der nicht total umständlich war.

    manchmal ist sogar ein einfaches goto besser als eine riesiege wulst von Funktionen um ein workaround zu erarbeiten. das ist ja auch nicht unbedingt alls su übersichtlich.
    Der Einsatz muss einem nicht leid tun. goto ist ja nicht dafür da, um mal einfach in der Syntax rumzuliegen.

    bevor hier wieder von irgendwo ein "aber" herschallt:
    es kommt nicht drauf an das mans einsetzt, sondern wo und vor allem wie man es einsetzt!



  • AndreasW schrieb:

    hm,

    man könnte das natürlich auch Methodenübergreifend machen.

    class Rentenkasse
    		{
    			public double altersvorsorge;
                
    		}
    		Rentenkasse rentenkasse;
    		internal class GelderVeruntreuen: Exception
    		{
    			private double _betrag;
    			public double notwendigerBetrag(){return _betrag;}
    			public GelderVeruntreuen(double bedarf)
    				:base(bedarf.ToString())
    			{
    				_betrag=bedarf;
    			}
    
    		}
    		private void NeueAmtsperiode(double Steuergelder)
    		{
    			Alltag(Steuergelder);
    		}
    		private void Alltag(double Steuergelder)
    		{
    			try
    			{
    				
    				while("Regierung" != "Ehrlich" ) // eindeutige endlosschleife
    				{
    					verschwendeSteuergelder(ref Steuergelder);
    				}
    			}
    			catch(GelderVeruntreuen Amtshandlung)
    			{
    				rentenkasse.altersvorsorge-= Amtshandlung.notwendigerBetrag();
    				Alltag(Amtshandlung.notwendigerBetrag());
    			}
    		}
    		private void verschwendeSteuergelder(ref double Steuergelder)
    		{
    			if("Steuerzahler" != "merkt was")
    			{
    				Steuergelder-=100;
    				if(Steuergelder < 0)
    					throw (new GelderVeruntreuen(10000));
    			}	
    			else
                           {	
                            Verschleiern();
    
                            verschwendeSteuergelder(ref double Steuergelder);
                             }
    		}
    	}
    

    *rofl* Ich pack mich weg 😃 👍


Anmelden zum Antworten