次のようになります。
if (!player.owns(flag) && player.near(flag) && flag.isUnlocked()) {
capturingPlayer = player.capture(flag);
}
wherecapturingPlayerは新しいオブジェクトです。その違いplayerは、フラグをキャプチャしたことです。playerへの呼び出しによって変更されませんcapture。
「OO 以外」の構文を好む場合 (それが何を意味するかは関係ありません)
if (!owns(player, flag) && near(player, flag) && isUnlocked(flag)) {
capturingPlayer = capture(player, flag);
}
拡張して、できれば少し明確にするために:
関数型プログラミング コミュニティで採用されている意味での関数型プログラミングは、単に「関数/プロシージャが第一級のオブジェクトである」という意味 ではありません。
それが意味することは、関数は数学的な意味での関数であるということです。
- すべての関数は値を返します。
- すべての関数は、同じ引数が渡されるたびに同じ値を返します。
- 関数には副作用がまったくありません。変更可能なオブジェクトや代入はありません。
したがって、オブジェクトのメソッドがオブジェクトを変更しない限り、「関数型スタイル」でプログラミングするために多くの変更を加える必要はありません。
編集:
残念ながら、「関数型」と「オブジェクト指向」はどちらも (特に) 定義がかなり曖昧な概念です。
「オブジェクト指向」の定義を探してみてください。少なくとも、それを定義しようとしている人の数と同じ数の定義があります。
関数型プログラミングを理解するには、 John Hughes による「なぜ関数型プログラミングが重要なのか」を少なくとも 2 回読んでください。