cametan_42さんのブログに石取りゲームのjavaの回答があります。javaと聞くと、Scala で出来るんでない?と思ってしまいます。置き換えることだけ考えます。コードの内容については、チョット自分には思いつかない感じです。
cametan_42さんのブログにやり方が詳しく有るので、それで良いのですが、自分はIDEが無いと駄目なのでintellij IDEAを使ってみます。実行はMainに変えてます。普通にやるとそうなります。Env.javaは全くその通りです。上のjavaのコードをScalaのプロジェクトへ貼るわけですが、今回は多少手こずりました。やった結果がしたです。
なんとかコンパイルは通ったのですが、下の実行時のエラーが出ます。Scalaは基本breakは使わないようにとのことですが、javaみたいに使っているとこがまずいのかもしれません。式が複雑で、意味もわかりませんしね。(笑)入力の有効性をチェックしているのですかね。breakしないときは、this多分。でもthis.xやthis.numやthis.ternあるんでそれをまとめて返している。breakの時は返さないんですか?
ここで一旦ギブアップ。
うん。
関数型言語だったらbreakはまず使わないでしょうね。
Lispにもbreakとかないし。
> 入力の有効性をチェックしているのですかね。
そのとおりです。
> breakしないときは、this多分
そうですね。
break消しちゃって、最後のthisも消しちゃって、そこでthisを返しちゃえばいいのかな。
自分で書いたコードでも何考えて書いたんだか忘れちまう(笑)。
つまり、そこでbreak使った理由は、構文的には
while (true)
if (何とか) {
return this;
} else {
return this;
}
ってなるトコをreturn thisって二回書きたくなかったから、ですね。
そうすると、
while (true) {
if (何とか) {
break;
}
return this;
}
にしちまえば、return this一個だけで済む、とか言うそういうしょーもない理由です。
だからロジック的には前者のようにやれば良いんじゃないかしらん。
いや、それでいいと思いますよ。
と言うかそれは結構重要な観点だ。
ある言語で書かれたプログラムを別の言語に移植してみて「動くか動かないか?だけやっている」、つまり調べる、ってのはその「別の言語」の理解を深めます。
大体、「移植作業」で学ぶ事って意外と多いです。