私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript の質問用スレッド vol.115 +
JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
どう見ても責任>>552にあるだろw
なんで謝るんや
なんで謝るんや
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()も知らないでいるとハマる可能性がある
for (var j = 0; j < (i / 3|0); ++j) { console.log(j); }
ようするに整数を想定している所は |0 を念入りに仕込む必要がある
console.log((Math.random() * 100000) % 5); => 4.623614703014027
みたいにMath.random()も知らないでいるとハマる可能性がある
Math.random() じゃなかった % の方だった
しかし % が実数の余りを返すってのは正直便利でもある
しかし % が実数の余りを返すってのは正直便利でもある
関数言語的なプログラミングをすると、
一つの処理の中で二種類以上のものを作ることに違和感を感じます
reduceが一つのものしか返さないように出来ているということもありますが、
単純に、美しくない、関数言語のパラダイムとそぐわない、と感じます
こういう場合どうするのがいいのでしょうか
関数言語におけるデザインパターン的なものとか、出てるんでしょうか
一つの処理の中で二種類以上のものを作ることに違和感を感じます
reduceが一つのものしか返さないように出来ているということもありますが、
単純に、美しくない、関数言語のパラダイムとそぐわない、と感じます
こういう場合どうするのがいいのでしょうか
関数言語におけるデザインパターン的なものとか、出てるんでしょうか
>>607
ECNMAScriptは関数言語じゃない
ECNMAScriptは関数言語じゃない
>>608
それがどうかしたの?
それがどうかしたの?
>>609
関数言語でないのに関数言語的アプローチを目指すことが間違い
関数言語でないのに関数言語的アプローチを目指すことが間違い
JavaScriptは関数型でもオブジェクト指向型でもありません
無理やり関数型やオブジェクト指向っぽく書こうとするのはやめましょう
無理やり関数型やオブジェクト指向っぽく書こうとするのはやめましょう
>>610
その言語の特徴を活かしたアプローチをスレばいいんじゃないの?
つまり、関数型とオブジェクト指向の両方を
バランスよく取り入れた言語なんだから、
関数型とオブジェクト指向の両方のアプローチを
バランスよく行えばいい。
どちらにしろ何らかのアプローチをしないといけないんだしさ。
その言語の特徴を活かしたアプローチをスレばいいんじゃないの?
つまり、関数型とオブジェクト指向の両方を
バランスよく取り入れた言語なんだから、
関数型とオブジェクト指向の両方のアプローチを
バランスよく行えばいい。
どちらにしろ何らかのアプローチをしないといけないんだしさ。
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");
分割代入 (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");
>>618
素朴な疑問だが
> 配列に似た構文を使ってその結果を返します
とあるが、 配列そのものを返しているようにも見えるが
「配列に似た構文」とは関数の中の return ではなく
代入の左辺を指すのではないのか?
var a = f();
var [b, c] = f();
があるとき a は配列になるのでは?
function f() {
return new Array(1, 2);
}
だったら?
素朴な疑問だが
> 配列に似た構文を使ってその結果を返します
とあるが、 配列そのものを返しているようにも見えるが
「配列に似た構文」とは関数の中の return ではなく
代入の左辺を指すのではないのか?
var a = f();
var [b, c] = f();
があるとき a は配列になるのでは?
function f() {
return new Array(1, 2);
}
だったら?
>>621
> 「配列に似た構文」とは関数の中の return ではなく
> 代入の左辺を指すのではないのか?
「配列に似た構文を使って」だから文章的には矛盾はないと思うけど...
あなたの理解で合ってる
> 「配列に似た構文」とは関数の中の return ではなく
> 代入の左辺を指すのではないのか?
「配列に似た構文を使って」だから文章的には矛盾はないと思うけど...
あなたの理解で合ってる
指定した関数を何回呼ばれたか分かるようにするライブラリみたいのありますか?
>>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
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
>>626
指摘するとしたらこんなところかな。
・関数名がかぶると困る
・count_hash がグローバル変数なのでよくない
・+=1よりも++の方が一般的で短いので推奨
で上記の指摘点を考慮しつつ、こんな感じのインターフェースにするといいかもね。
counter = call_counter(foo); // fooをクロージャと差し替えてカウンターオブジェクト生成
foo()呼び出し省略
console.log(counter.count);
もしくは
before_hook(foo, function() { count++; }); // 関数呼び出し前にフックを仕込む
foo()呼び出し省略
console.log(count);
指摘するとしたらこんなところかな。
・関数名がかぶると困る
・count_hash がグローバル変数なのでよくない
・+=1よりも++の方が一般的で短いので推奨
で上記の指摘点を考慮しつつ、こんな感じのインターフェースにするといいかもね。
counter = call_counter(foo); // fooをクロージャと差し替えてカウンターオブジェクト生成
foo()呼び出し省略
console.log(counter.count);
もしくは
before_hook(foo, function() { count++; }); // 関数呼び出し前にフックを仕込む
foo()呼び出し省略
console.log(count);
>>627
・counter がグローバル変数なのでよくない
・counter がグローバル変数なのでよくない
>>628
counterはローカル変数ねw
counterはローカル変数ねw
>>630
たんなるつけ忘れってことw
たんなるつけ忘れってことw
>>627
このインターフェイスでどうやってfooを置き換えられると?
このインターフェイスでどうやってfooを置き換えられると?
寝てないからなぁw
メソッドが属するオブジェクトも
引数に入れてやってください。
メソッドが属するオブジェクトも
引数に入れてやってください。
俺ならこうする
カウントしたい関数=test();
function test(){}
↓
xxxx=0;//global
function test(){console.log(xxxx++)}
これじゃイカンのか?態々getterみたいなことせんでも
カウントしたい関数=test();
function test(){}
↓
xxxx=0;//global
function test(){console.log(xxxx++)}
これじゃイカンのか?態々getterみたいなことせんでも
指定した関数名じゃなく指定した関数のカウント回数
>>634 指定すらしてない
>>634 指定すらしてない
countTest = 0;
function test(){
countTest++;
console.log("test");
}
test();
test();
console.log(countTest + "回呼ばれました");
function test(){
countTest++;
console.log("test");
}
test();
test();
console.log(countTest + "回呼ばれました");
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());
ありがとうございます
高階関数?を使ってこんな感じで出来ました
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());
>>639
誰もlodashに触れてないのにどこから出てきたんです?
誰もlodashに触れてないのにどこから出てきたんです?
結局、>>626と同じじゃねーかw なんでこんなに手間増やしてベンチ激遅にしなきゃらんのだw アホ過ぎる
いや関係有るよ。正確に言えばパソコンの性能だが。
ほんの15年前まで、速度が必要な所にJavaScriptを
使うこと自体ありえない話だった。
速度が気になる? じゃあJavaScriptなんかやめろよ。
これが常識だった。
ほんの15年前まで、速度が必要な所にJavaScriptを
使うこと自体ありえない話だった。
速度が気になる? じゃあJavaScriptなんかやめろよ。
これが常識だった。
JavaScriptのリクエスト数の方が問題になるからねぇ。
目的がリアルタイムゲーム以外なら、
JavaScriptの実行速度を考慮する必要はない
という結論でいいんじゃないか。
目的がリアルタイムゲーム以外なら、
JavaScriptの実行速度を考慮する必要はない
という結論でいいんじゃないか。
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.113 + (1001) - [97%] - 2014/1/25 12:46
- + JavaScript の質問用スレッド vol.135 + (1002) - [97%] - 2018/11/23 10:30
- + JavaScript の質問用スレッド vol.125 + (1001) - [97%] - 2015/10/7 17:45
- + JavaScript の質問用スレッド vol.119 + (1002) - [97%] - 2014/10/3 15:30
- + JavaScript の質問用スレッド vol.118 + (1002) - [97%] - 2014/8/29 22:30
- + JavaScript の質問用スレッド vol.117 + (1009) - [97%] - 2014/8/5 3:30
- + JavaScript の質問用スレッド vol.116 + (1002) - [97%] - 2014/7/1 0:45
- + JavaScript の質問用スレッド vol.114 + (1001) - [97%] - 2014/5/3 10:45
- + JavaScript の質問用スレッド vol.112 + (1001) - [97%] - 2013/11/27 16:46
- + JavaScript の質問用スレッド vol.111 + (1001) - [97%] - 2013/11/4 6:00
- + JavaScript の質問用スレッド vol.110 + (1001) - [97%] - 2013/10/13 14:01
- + JavaScript の質問用スレッド vol.113 + (1001) - [97%] - 2014/3/15 21:30
- + JavaScript の質問用スレッド vol.105 + (1001) - [97%] - 2013/5/20 4:45
- + JavaScript の質問用スレッド vol.109 + (1001) - [95%] - 2013/10/7 13:16
- + JavaScript の質問用スレッド vol.121 + (1001) - [95%] - 2022/11/29 16:30
- + JavaScript の質問用スレッド vol.126 + (348) - [95%] - 2023/1/12 17:00
- + JavaScript の質問用スレッド vol.100 + (1001) - [95%] - 2012/6/13 22:46
トップメニューへ / →のくす牧場書庫について