私は、命令的で機能的な方法で実装された方法を持っています。このメソッドは、ArrayBuffer [Creature]を反復処理し、各クリーチャーとの距離を計算し、最も近いかNoneを返します( 'this'以外の世界にクリーチャーがない場合)。命令的なものと機能的なものによるもの
命令型:
private def closestEnemy: Option[Creature] = {
var closest: Option[Creature] = None
var distanceToClosest = Int.MaxValue
for(creature <- game.creatures if creature != this) {
val distance = distanceTo(creature)
if(distance < distanceToClosest) {
closest = Some(creature)
distanceToClosest = distance
}
}
closest
}
機能:
private def closestEnemy: Option[Creature] =
game.creatures filter { _ != this } map { creature => (creature, distanceTo(creature)) } match {
case creaturesWithDistance if creaturesWithDistance.isEmpty => None
case creaturesWithDistance => Some(creaturesWithDistance minBy { _._2 } _1)
}
機能コードはそれほど明白に見えます(おそらく、それを簡素化することができるが、私はどのように表示されていない)と私ならば、私はわからないんだけどそれを月に飛ぶことができる。私の質問は、それが習慣の問題か機能的ではないということですか? Scalaを開始したときに疑問がありましたか?あなたの機能的スキルは、しばらくして大幅に改善され、すべてが命令的アプローチを打ち負かしましたか?あなたの経験を投稿してください。
ありがとうございます!
FAQを参照してください。 –
これらを試してみてください:http://aperiodic.net/phil/scala/s-99/ –
この質問はここでは無効です(プログラマーの_or_)。私はあなたが[Quora](http://quora.com)のような制限のない質問を受け入れる他の場所を試してみることをお勧めします。一方で、機能コードを[Code Review](http://codereview.stackexchange.com)に投稿してフィードバックを求めることができます。 –