NatureOfCodeの遺伝的アルゴリズムをすこし関数型プログラミングのように実装

NatureOfCodeのサンプルは、初心者にもわかりやすいif文やfor文が使われている文法ですが、最近のモダンな言語はmap/reduceのように関数型プログラミングの文法やAPIを取り入れているので、JavaScriptでまずはfor文を使わない実装を試してみました。

実装する前は、for文をforEachやmapに置き換えるのは大変と考えていましたが、実際にやってみると特に大きな躓きはありませんでした。関数型プログラミングに対する否定的な先入観が大きかったようで、実践的なプログラミングで試してみてそれが大きな間違いだと気づきました。

また、以下を少し意識するだけで、此処の関数がテストしやすくなり実践的なプログラミングで関数型プログラミングの良さを感じられました。

  • メソッドチェーン
  • 小さな関数に分割していく
  • constキーワードによる変数の定数化

以前F#を勉強したときは、あくまでも関数型プログラミングの勉強で演習問題を解くだけだったのですが、新しいプログラミングを勉強した際には、まとめとして実践的なプログラミングを書くことも大切なのを痛感しました。

JavaScriptでバラ曲線Rose Curve Function

最近、Codepen.ioでいくつか三角関数を使ったコードを書いていました。三角関数を複数組み合わせると複雑な動きになるので、調べているうちにバラ曲線というものを知り、JavaScriptで実装してみました。また、日本語のwikipediaにはXY座標について書かれていませんが、英語版のwikipediaにはMATLABでコードを書いたときの方法が書かれていました。

 

https://en.wikipedia.org/wiki/Rose_(mathematics)

https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%A9%E6%9B%B2%E7%B7%9A

See the Pen Rose function with JavaScript by dev001hajipro (@dev001hajipro) on CodePen.

 

JavaScriptで線がなめらかに動くスクリーンセーバー

JavaScriptで線がなめらかに動くスクリーンセーバーのようなものを作ってみました。一見複雑そうに見える動きは、単純に三角関数を足しているだけです。

See the Pen Recreating Vintage Computer Art with JavaScript by dev001hajipro (@dev001hajipro) on CodePen.