のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,837人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレ+ JavaScript の質問用スレッド vol.115 +

    JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    601 : Name_Not - 2014/05/17(土) 02:12:00.93 ID:??? (+64,+29,-16)
    どう見ても責任>>552にあるだろw
    なんで謝るんや
    602 : Name_Not - 2014/05/17(土) 02:13:25.81 ID:??? (-2,-30,-79)
    var i = 5;
    for (var j = 0; j < (i / 3|0); ++j) { console.log(j); }

    ようするに整数を想定している所は |0 を念入りに仕込む必要がある

    console.log((Math.random() * 100000) % 5); => 4.623614703014027

    みたいにMath.random()も知らないでいるとハマる可能性がある
    603 : Name_Not - 2014/05/17(土) 02:16:08.66 ID:??? (-1,-29,-9)
    Math.random() じゃなかった % の方だった
    しかし % が実数の余りを返すってのは正直便利でもある
    604 : Name_Not - 2014/05/17(土) 03:58:42.26 ID:??? (+68,+29,-19)
    >>598
    循環小数って知ってる?
    小学校じゃ習わないか
    ごめんね
    605 : Name_Not - 2014/05/17(土) 04:05:10.88 ID:??? (+7,-29,-25)
    >>604
    有理数か分数って言え
    自然数⊂整数⊂有理数(分数)⊂無理数⊂実数⊂複素数
    606 : Name_Not - 2014/05/17(土) 04:25:07.17 ID:??? (+57,+29,-35)
    なんでお前ら下らないことで言い争いしてるの
    両方ともよそでやれよ
    607 : Name_Not - 2014/05/17(土) 07:07:47.86 ID:??? (+184,+29,-67)
    関数言語的なプログラミングをすると、
    一つの処理の中で二種類以上のものを作ることに違和感を感じます
    reduceが一つのものしか返さないように出来ているということもありますが、
    単純に、美しくない、関数言語のパラダイムとそぐわない、と感じます
    こういう場合どうするのがいいのでしょうか
    関数言語におけるデザインパターン的なものとか、出てるんでしょうか
    608 : Name_Not - 2014/05/17(土) 11:18:18.91 ID:??? (+38,-29,-7)
    >>607
    ECNMAScriptは関数言語じゃない
    609 : Name_Not - 2014/05/17(土) 13:12:02.10 ID:??? (+91,+29,-1)
    >>608
    それがどうかしたの?
    610 : Name_Not - 2014/05/17(土) 13:15:41.16 ID:??? (+105,+28,-21)
    >>609
    関数言語でないのに関数言語的アプローチを目指すことが間違い
    611 : Name_Not - 2014/05/17(土) 13:39:53.06 ID:??? (+57,+29,-46)
    JavaScriptは関数型でもオブジェクト指向型でもありません
    無理やり関数型やオブジェクト指向っぽく書こうとするのはやめましょう
    612 : Name_Not - 2014/05/17(土) 14:58:00.07 ID:??? (+151,+29,-117)
    >>610
    その言語の特徴を活かしたアプローチをスレばいいんじゃないの?

    つまり、関数型とオブジェクト指向の両方を
    バランスよく取り入れた言語なんだから、
    関数型とオブジェクト指向の両方のアプローチを
    バランスよく行えばいい。

    どちらにしろ何らかのアプローチをしないといけないんだしさ。
    613 : Name_Not - 2014/05/17(土) 15:23:15.27 ID:??? (+75,+29,-50)
    >>612
    関数型言語的性質がないから>>607のような問題が起きているのだと思うのだけど
    それでも異論があるなら、関数言語的アプローチとしてあなたが具体案を提案すべきでは?
    614 : Name_Not - 2014/05/17(土) 15:33:32.08 ID:??? (+203,+29,-67)
    >>607の問題ってなんですか?
    一つの処理で二種類以上のものを作ることでしょうか?
    関数型言語では、そんなことしないですよ?

    JavaScriptは関数型言語の思想が混じっているので、
    関数言語的アプローチでいうからこそ、
    >>607の問題はできないのです。関数型言語だから。
    615 : Name_Not - 2014/05/17(土) 16:07:09.62 ID:??? (+88,+30,-30)
    >>614
    横からだけど、ちゃんと質問に沿った回答を心がけた方がいいよ
    >>612とニュアンスが微妙に変化してるし、その突っ込みは本当に必要だったの?
    初めから>>614の回答だけなら何も言わないけどさ
    616 : Name_Not - 2014/05/17(土) 16:12:16.73 ID:??? (+85,+29,-40)
    >>614
    > 一つの処理で二種類以上のものを作ることでしょうか?
    詳しくは知らんのだが、関数型言語はリストで返り値を持てたような
    俺の記憶違いかな?
    詳しい人の説明を求む
    617 : Name_Not - 2014/05/17(土) 16:16:20.19 ID:??? (+51,+23,-2)
    それならJavaScriptも配列を返せばいいじゃない。
    618 : Name_Not - 2014/05/17(土) 16:20:18.38 ID:??? (+9,-30,-236)
    http://developer.mozilla.org/ja/docs/Web/JavaScript/New_in_JavaScript/1.7
    分割代入 (destructuring assignment) は、配列やオブジェクトの

    リテラルの構造とそっくりの構文を使って、配列やオブジェクトからデータを抽出することを可能にします。

    複数の値を返す

    分割代入のおかげで、関数は複数の値を返すことができます。関数から配列を返すこと自体はいつでもできたものの、分割代入はさらなる柔軟性を提供します。

    function f() {
    return [1, 2];
    }
    見ての通り、すべての返り値を角カッコで囲んだ、配列に似た構文を使ってその結果を返します。
    この方法で任意の数の返り値を返すことができます。この例では、f() はその出力として [1, 2] を返します。

    var a, b;
    [a, b] = f();
    document.write ("A is " + a + " B is " + b + "<br>\n");
    621 : Name_Not - 2014/05/17(土) 16:35:57.88 ID:??? (+40,-30,-88)
    >>618
    素朴な疑問だが

    > 配列に似た構文を使ってその結果を返します
    とあるが、 配列そのものを返しているようにも見えるが

    「配列に似た構文」とは関数の中の return ではなく
    代入の左辺を指すのではないのか?

    var a = f();
    var [b, c] = f();

    があるとき a は配列になるのでは?

    function f() {
    return new Array(1, 2);
    }
    だったら?
    623 : Name_Not - 2014/05/17(土) 16:58:54.76 ID:??? (+68,+29,-46)
    >>621
    > 「配列に似た構文」とは関数の中の return ではなく
    > 代入の左辺を指すのではないのか?
    「配列に似た構文を使って」だから文章的には矛盾はないと思うけど...
    あなたの理解で合ってる
    624 : Name_Not - 2014/05/18(日) 00:37:55.93 ID:??? (+64,+29,-12)
    指定した関数を何回呼ばれたか分かるようにするライブラリみたいのありますか?
    625 : Name_Not - 2014/05/18(日) 05:38:04.24 ID:??? (+6,-21,+0)
    JavaScriptプロファイラ で検索
    626 : Name_Not - 2014/05/18(日) 06:04:04.78 ID:??? (+0,-30,-85)
    >>624

    http://ideone.com/HVfnDI

    function foo() { } /* カウントしたい関数 */


    var count_hash = {};

    function callcounter(func) {
     count_hash[func.name] = 0;
     return function() {
      count_hash[func.name] += 1;
      return func.apply(this, arguments);
     };
    }

    foo = callcounter(foo); /* fooをクロージャと差し替え */

    for (var i = 0; i < 100; i++) {
     foo();
    }

    console.log(count_hash.foo); // 100
    627 : Name_Not - 2014/05/18(日) 06:21:32.09 ID:??? (-16,-30,-139)
    >>626
    指摘するとしたらこんなところかな。
    ・関数名がかぶると困る
    ・count_hash がグローバル変数なのでよくない
    ・+=1よりも++の方が一般的で短いので推奨

    で上記の指摘点を考慮しつつ、こんな感じのインターフェースにするといいかもね。

    counter = call_counter(foo); // fooをクロージャと差し替えてカウンターオブジェクト生成
    foo()呼び出し省略
    console.log(counter.count);

    もしくは

    before_hook(foo, function() { count++; }); // 関数呼び出し前にフックを仕込む
    foo()呼び出し省略
    console.log(count);
    628 : Name_Not - 2014/05/18(日) 06:34:13.58 ID:??? (+2,-29,-15)
    >>627
    ・counter がグローバル変数なのでよくない
    629 : Name_Not - 2014/05/18(日) 06:43:33.04 ID:??? (+2,-29,+0)
    >>628
    counterはローカル変数ねw
    630 : Name_Not - 2014/05/18(日) 06:51:07.18 ID:??? (+30,-28,-22)
    >>629
    var ついてないけど、ローカル変数?
    (多分、>>626も同じ事を思ってるよ)
    631 : Name_Not - 2014/05/18(日) 06:58:53.61 ID:??? (+61,+29,-2)
    >>630
    たんなるつけ忘れってことw
    632 : Name_Not - 2014/05/18(日) 07:01:05.58 ID:??? (+49,+23,-4)
    >>627
    このインターフェイスでどうやってfooを置き換えられると?
    633 : Name_Not - 2014/05/18(日) 07:04:00.87 ID:??? (+55,+27,-72)
    寝てないからなぁw

    メソッドが属するオブジェクトも
    引数に入れてやってください。
    634 : Name_Not - 2014/05/18(日) 09:02:34.26 ID:??? (+7,-30,-42)
    俺ならこうする
    カウントしたい関数=test();
    function test(){}

    xxxx=0;//global
    function test(){console.log(xxxx++)}

    これじゃイカンのか?態々getterみたいなことせんでも
    635 : Name_Not - 2014/05/18(日) 09:34:29.72 ID:??? (-1,-29,-7)
    指定した関数名じゃなく指定した関数のカウント回数
    >>634 指定すらしてない
    636 : Name_Not - 2014/05/18(日) 11:17:10.55 ID:??? (+3,-30,-53)
    countTest = 0;
    function test(){
    countTest++;
    console.log("test");
    }
    test();
    test();
    console.log(countTest + "回呼ばれました");
    637 : Name_Not - 2014/05/18(日) 11:44:08.83 ID:??? (+52,+29,+0)
    だめだ わかってないなぁ
    638 : Name_Not - 2014/05/18(日) 12:20:03.06 ID:??? (+31,+8,-2)
    ×わかってない
    ◎質問者の説明不足
    639 : Name_Not - 2014/05/18(日) 12:24:22.13 ID:??? (+36,-30,-172)
    http://jsbin.com/yufumaqe/1/edit

    ありがとうございます
    高階関数?を使ってこんな感じで出来ました
    lodash最高ですね

    _.mixin({
    countable: function(fn){
    var wrapper = function wrapper(){
    var result = fn.apply(this,arguments);
    wrapper.counter++;
    return result;
    };
    wrapper.counter = 0;
    wrapper.getCounter = function() {
    return wrapper.counter;
    };
    return wrapper;
    }
    });

    function test(s){
    console.log(s);
    }

    var countableTest = _.countable(test);

    countableTest('hoge');
    countableTest('hoge');
    countableTest('hoge');
    console.log(countableTest.getCounter());
    641 : Name_Not - 2014/05/18(日) 12:44:21.60 ID:??? (+66,+29,-18)
    >>639
    誰もlodashに触れてないのにどこから出てきたんです?
    642 : Name_Not - 2014/05/18(日) 12:49:05.21 ID:??? (+57,+29,-21)
    最初から触れるとレス貰えなくなるから学習したんでしょ
    643 : Name_Not - 2014/05/18(日) 12:52:08.25 ID:??? (-1,-29,-12)
    >>640
    ありがとうございます
    fn.nameにしてこちらを採用させていただきます
    644 : Name_Not - 2014/05/18(日) 13:40:48.95 ID:??? (+13,-14,-28)
    >>640
    これグローバルに無い関数は計測出来ないじゃん0点
    プロファイラで計測する以外に方法はない
    645 : Name_Not - 2014/05/18(日) 14:07:02.22 ID:??? (+6,-29,-32)
    >>641
    高階関数とlodashの親和性は高いので。
    もちろんlodash使わなくても出来ますよd(^_^o)
    646 : Name_Not - 2014/05/18(日) 17:39:50.71 ID:??? (+58,+29,-24)
    結局、>>626と同じじゃねーかw なんでこんなに手間増やしてベンチ激遅にしなきゃらんのだw アホ過ぎる
    647 : Name_Not - 2014/05/18(日) 17:47:08.38 ID:??? (+57,+29,-9)
    今の時代はベンチ速度よりも、
    メンテンス性の方が重要視されるからだよ。
    648 : Name_Not - 2014/05/18(日) 17:51:04.24 ID:??? (+57,+29,-4)
    何をとるかは目的によるのであって、時代は関係ないねw
    649 : Name_Not - 2014/05/18(日) 18:31:36.12 ID:??? (+96,+29,-64)
    いや関係有るよ。正確に言えばパソコンの性能だが。
    ほんの15年前まで、速度が必要な所にJavaScriptを
    使うこと自体ありえない話だった。

    速度が気になる? じゃあJavaScriptなんかやめろよ。
    これが常識だった。
    650 : Name_Not - 2014/05/18(日) 18:34:44.83 ID:??? (+57,+29,-40)
    JavaScriptのリクエスト数の方が問題になるからねぇ。

    目的がリアルタイムゲーム以外なら、
    JavaScriptの実行速度を考慮する必要はない
    という結論でいいんじゃないか。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について