Path: csiph.com!feeder.erje.net!2.eu.feeder.erje.net!newsfeed0.kamp.net!newsfeed.kamp.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: "Christian H. Kuhn" Newsgroups: de.comp.lang.java Subject: Re: Rekursion bricht nicht ab Date: Mon, 25 Apr 2016 12:07:44 +0200 Lines: 38 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit X-Trace: individual.net fXm53wmfKeVo9EXHo32Y2AKWjTZO2Rx1suqg8mdaG60SYawRM= Cancel-Lock: sha1:uZDPSbrXokhbZh5VJoUYpRrPlUQ= User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2 In-Reply-To: Xref: csiph.com de.comp.lang.java:12958 Am 23.04.2016 um 16:13 schrieb Wanja Gayk: > Das klingt ganz danach, als ob du die Exceptions nicht als "Ausnahme" > benutzt, sondern Mittel für den regulären Kontrollfluss. Jain. Der Grundgedanke ist schon der, dass Methoden mit korrekten Parametern aufgerufen werden; es sollte der Ausnahmefall sein, wenn das nicht passiert, und dann gibt es halt eine Exception zurück, die auch genau beschreibt, was los ist. In getMoveList() habe ich es dann übertrieben: Ich habe alle kombinatorisch möglichen Züge erzeugt und dann Exceptions werfen lassen. DAS war ein Mißbrauch des Mechanismus. Aktuell erzeuge ich nur erlaubte Züge in getMoveList(). Weil die Schnittstelle erlaubt, dass auch irgendwo Züge als Parameter übergeben werden, die nicht aus einer mit getMoveList() erzeugten Liste stammen, muss ich weiterhin eine Überprüfung von auszuführenden Zügen machen, und die arbeitet weiter mit Exceptions. Was mir gar nicht gefällt: Ich habe die Legalität an zwei Stellen codiert, die ich bei Änderungen beide anpassen muss. Alternativen zum Exception-Mechanismus gefallen mir alle nicht. Rückgabe boolean ist zu vage, da kann man nicht spezifizieren, was los ist. Rückgabe int (mit darin codierten Flags) ist C-Style, sowas von Achtziger und semantisch in komplexen Situationen nicht immer zu durchschauen, weil das Prinzip der Kapselung verletzt ist. > Dort gibt man zum Beispiel sowas, wie ein "Optional" zurück, Das kannte ich noch nicht, das schaue ich mir an. > Oder eben, wenn man den Konstruktor des Optionals umgehen muss, das > Objekt selbst oder null. Das bringt auch nicht mehr Information als boolean. lg Christian