Path: csiph.com!feeder.erje.net!2.eu.feeder.erje.net!border1.nntp.ams1.giganews.com!nntp.giganews.com!newsreader4.netcologne.de!news.netcologne.de!.POSTED!not-for-mail From: Patrick Roemer Newsgroups: de.comp.lang.java Subject: Re: Rekursion bricht nicht ab Date: Mon, 25 Apr 2016 17:38:36 +0200 Organization: news.netcologne.de Lines: 32 Distribution: world Message-ID: References: NNTP-Posting-Host: xdsl-87-79-196-168.netcologne.de Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit X-Trace: newsreader4.netcologne.de 1461598717 19374 87.79.196.168 (25 Apr 2016 15:38:37 GMT) X-Complaints-To: abuse@netcologne.de NNTP-Posting-Date: Mon, 25 Apr 2016 15:38:37 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.24) Gecko/20100411 Thunderbird/2.0.0.24 Mnenhy/0.7.6.0 In-Reply-To: Xref: csiph.com de.comp.lang.java:12961 Responding to Christian H. Kuhn: > 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. Das ist ja auch völlig legitim. > Was mir gar nicht gefällt: Ich habe > die Legalität an zwei Stellen codiert, die ich bei Änderungen beide > anpassen muss. Wenn das in beiden Fällen ähnlicher Code sein sollte, ist das in der Tat ein Designfehler, der sich leicht beheben lassen sollte. Falls Du damit meinst, dass Du einmal "synthetischen" Code hast (in #getMoveList(), wo die Regeln implizit im Code sind, der die gültigen Züge erzeugt) und einmal "analytischen" (zum Prüfen der externen Eingaben, wo die Regeln explizit in Form von if/throw-Validierungen vorliegen) - das wird sich wohl kaum mit vertretbarem Aufwand vermeiden lassen und ist eigentlich gut verargumentierbar: Das eine ist die Implementierung eines Spielers, das andere die Implementierung des Spiels. Aber die Regeln an sich dürften sich ja eher selten ändern. Und dass man beide Stellen anpacken muss, wenn man z.B. eine andere Datenrepräsentation wählt - tough luck. Aber auch das sollte ja nicht ständig passieren. Viele Grüße, Patrick