コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

素数が好きすぎてUnderscoreで素数判定つくった。

インターネットやる人間大体素数が好き

へい、メーン僕です。皆さんは素数が好きですか?僕は三度の飯より素数が好きで毎日素数のことを考えていきて……いるわけねーだろバーカ。


というわけでして、UnderscoreというJavaScriptライブラリを無意識にいじっていたら素数判定をつくってしまったので記事にしてみました。件のUnderscoreが何者なのかと言いますと以下のような感じのものになります。

Underscore is a JavaScript library that provides a whole mess of useful functional programming helpers without extending any built-in objects. It’s the answer to the question: “If I sit down in front of a blank HTML page, and want to start being productive immediately, what do I need?” … and the tie to go along with jQuery's tux and Backbone's suspenders.

ざっくりと言いますとJavaScriptの表現力を高めるライブラリとか言われています。よくわかんないけどもイテレータ*1とかいう抽象概念を直感的に使えるようになる気がするツールと僕は認識している。

公式
Underscore.js

操作方法の概要はドットインストールにもあるのでよくわかんなくても安心。
Underscore.js入門


つくったよ
// 整数配列
var arr = [2,3,15,16,7,21,32,27];
// 判定
var x = _.chain( arr )
         .map(function(num){ 
           if(num == 2){return num};
           if(num % 2 == 0){return 0};
           for(i = 3; i<= Math.sqrt(num); i++){
              if(num%i == 0){return 0;}
           }
           return num;
         })
         .reject(function(num){return num == 0});
alert(x);

せっかくメソッドチェーンでつなげられるのに、内部に素数判定処理をごりごりと書いてしまう頭悪い感じの処理を書いてしまった。多分なんかいい感じに処理してくれるメソッドがあるから数行は短く書けそう。なお、入力値は整数以外が入ることは想定していないです。


確認用のJSFiddleリンク置いときますね。

*1:イテレータ(英語: iterator)とは、プログラミング言語において配列やそれに類似する集合的データ構造(コレクションあるいはコンテナ)の各要素に対する繰り返し処理の抽象化である。[Wikiより]