1 名前:デフォルトの名無しさん [2011/08/26(金) 13:32:13.80 ] ないようなので立ててみました 初心者から上級者まで気軽にどうぞ テンプレは今後決めていってください 関連スレ ★★Java質問・相談スレッド147★★ hibari.2ch.net/test/read.cgi/tech/1312958339/ Eclipse統合M31【Java/C++/Ruby/Python/Perl】 hibari.2ch.net/test/read.cgi/tech/1295886572/
809 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:22:23.56 ] うぉおお、スコープの理解が完全に間違ってたことが判明した!! ifやwhileはローカルスコープあると思ってたあああ 道理でイミフな謎のバグがでるわけだorz
810 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:23:02.92 ] for (i=0;i < 10;i++)(function (num) { })(i); そう言えばこんな風に書く人は本スレにいたね
811 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:26:29.95 ] JSとか最近触ったけど可読性がクソということだけは理解できた
812 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:27:53.56 ] >>811 それはない
813 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:29:28.52 ] >>810 ものっそい低速になりそうだな
814 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:31:36.69 ] >>809 普通に書いていれば、ローカルスコープの内外の 変数名を一緒にしたりしないから問題が起きたことがないな。 >>810 それはクロージャーを作る必要があるから そうしていただけ。
815 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:32:02.99 ] ループは普通にループで書けばよろしい。
816 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:35:15.23 ] >>807 がじわじわくるw
817 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:43:18.11 ] >>806 > それでwhileループを書いてみてくれないか じゃあここらで模範解答 while (condition) { ・・・ } これでよい。 即時関数使ってないって? それ必要なの? 俺は必要になったことがないけど、もし本当に必要ならこうすれば良い。 これはどうしても使えといったから使っただけで、俺なら使わん。 (function() { while (condition) { ・・・ } }())
818 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:24:25.98 ] >>797 こっちこそ老害。 今そうなっているからそれでいいのだと主張してる。
819 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:26:29.10 ] ろう がい らう― 0【老害】 企業や政治の指導者層の高齢化が進み,円滑な世代の交代が行われず,組織の若返りがはばまれる状態。 DAIJIRIN Third Edition
820 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:39:33.71 ] >>652 > 今そうなっているからそれでいいのだと主張してる。 そんなことは主張してない 仕様は常に更新されるべきだ
821 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:45:47.21 ] >>818 代替手段のない即時関数をバッドノウハウ扱いする理想主義的意見が否定されてるんじゃないの?
822 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:49:00.32 ] >>821 代替手段あるだろw おまえは>>817 で書くのか
823 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:53:37.90 ] >>817 は、周回ごとのスコープはできていない。
824 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:55:22.00 ] 周回ごとのスコープ作ったら駄目だろw
825 名前:821 mailto:sage [2012/02/20(月) 00:00:08.25 ] >>822 ごめん、わかりにくい書き方だった 件の主はブロックスコープの代替手段として提案された即時関数がバッドノウハウと主張してる ES5には関数スコープしかないんだから関数スコープで代替するしかないのに「ブロックスコープを使うべき、即時関数はバッドノウハウだ」と主張してる 彼の中では関数スコープ自体が受け入れられないんだと思うよ そんなに嫌ならこんなところで主張してないでES.nextで策定予定のletがちゃんと定義されるように議論に参加すればいいのにね
826 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:06:46.79 ] >>824 え?ブロックスコープのある言語では周回ごとのスコープになるやん。
827 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:10:07.05 ] 彼はバッドノウハウの意味わかってるのかな? 即時関数がバッドノウハウなら即時関数に代わるグッドノウハウがなくてはならない 全部が全部バッドノウハウならそれはもうノウハウの問題じゃない
828 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:18:08.41 ] いや別に本当はああ書きたい/書けるべきなのに、現状代替案としてこう書かざるを得ない というのを指してバッドノウハウという表現は、おかしくはないと思うけど
829 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:18:12.74 ] >>826 その論拠は?
830 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:33:27.13 ] >【bad know-how】ソフトウェアなどを使いこなすために、ストレスを感じながらも >しぶしぶ覚えなければならないようなノウハウ。高林哲による造語。氏によると、 >バッドノウハウは、複雑な設定を「奥が深い」として有難がってしまうマニア独特 >の感性によってはびこるという。 これだとちょっと違う気がするな。 >バッドノウハウは、ソフトウェアの複雑怪奇な仕様が歴史的に引き ずられ、根本 >的な改善は行われないまま、そのノウハウが文書によっ て受け継がれることに >よって蓄積が進行する。 これだとまさにバッドノウハウ。 ただ、let使うのはなんか気が進まない
831 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:34:32.39 ] >>823 > >>817 は、周回ごとのスコープはできていない。 ん? ブロックスコープがある言語の場合、 while(cond) { int a=0; b++; } aはwhileの中に閉じ込められて、 bはwhileの外を参照するよね? (function() { var a=0; //同じだよね? while (condition) { //var a=0; //ここでやってもいい b++; //同じくスコープの外 ・・・ } }())
832 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:35:53.30 ] >>829 論拠?試してみれば?
833 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:40:46.11 ] (function() { while (condition) { var a=0; //こっちしかダメだったねw b++; //同じくスコープの外 ・・・ } }())
834 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:41:43.02 ] >>831 それは流石にピントズレてるだろ >>810 >>814 に答え書いてあるだろ
835 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:42:11.59 ] >>832 ゴマかすなよw
836 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:42:37.97 ] (function() { var i=0; //こっちのパターンと勘違いしたw for (var i=0; i<length; i++) { var a=0; b++; ・・・ } }())
837 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:42:50.32 ] >>831 前者の場合、変数 a は、(記号は同じでも) 周回ごとに異なる変数。 >>833 JavaScripit の場合、var a は while の内でも外でも同じ。 >>835 え?
838 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:43:18.56 ] >>834 なぜ?
839 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:44:52.00 ] >>837 > >>833 > JavaScripit の場合、var a は while の内でも外でも同じ。 うん、でも重要な点はvarの位置ではなく、 1.var aのスコープは閉じており、 2.ループの最初で0を代入しているから 実質同じ事になっているとこうこと
840 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:46:56.18 ] >>839 それはこの場合の本質には関係ない
841 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:47:48.54 ] >>832 Javascriptの<ような>言語じゃなきゃ 周回ごとにスコープ出来てるか否かという概念自体がなりたたないだろ
842 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:47:57.94 ] >>840 お前の本質とは、 全く同じ動きをして 代替として使えること以上に 重要なことなのか?
843 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:49:11.23 ] >>842 クロージャ。コレでわからなきゃ半年ROMってろ
844 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:49:20.53 ] >>839 ブロックスコープのある言語だと、while 内で宣言した変数は、 (参照を格納しておくのでもない限り) 別の周回で参照できない、 という意味で >>823 、>>826 。
845 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:50:58.51 ] >>843 即時関数も、クロージャーなんだけどw 無名クロージャーを定義と共にすぐに実行することを 即時関数(パターン)と読んでるだけ
846 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:51:40.29 ] >>845 それと>>839 のどこに関係があるんだ
847 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:52:46.52 ] >>844 うん。だから最初に値を初期化することまで含めて 「 (function(){}())と初期化 」を使った ブロックの実装例だよ。
848 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:53:38.60 ] >>846 馬鹿? (function() { }()) ↑これが無名クロージャの即時実行
849 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:54:03.37 ] >>844 そうじゃない言語もあるよね
850 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:54:27.24 ] C言語か?
851 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:54:32.56 ] >>848 話つながってないことに気づけよ
852 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:56:35.68 ] >>851 勝手に切るな。 どこから別の話なんだよw
853 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:56:36.09 ] クロージャっていまだによくわからん これって無効には出来ないの?
854 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:57:02.92 ] 今まさに、バッドノウハウが生み出されている、その瞬間であります!!
855 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:57:25.80 ] >>853 関数の外に持っていけばいいよw
856 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:58:09.23 ] ちなみに即時関数は オライリー本のJavaScriptによるでも 紹介されている、グッドノウハウです。
857 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 00:59:29.77 ] オライリー本に紹介されるとグッドノウハウになるそうです\(^o^)/
858 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:00:40.05 ] オライリー本にはバッドパーツとして 紹介されているものもありますよ。 即時関数はもちろんグッドですがw
859 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:02:41.34 ] >>844 具体的に何の言語か教えて欲しい >>817 周回スコープが出来てない事が指摘されてるのにクロージャとか関係ない話を続けているのはなぜ?
860 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:02:51.61 ] >>856 >>830 下の典型例
861 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:02:54.35 ] >>858 おまえは何もわかってない バッドノウハウとは、使い方の問題なんだよ 存在の良し悪しじゃないんだ
862 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:05:50.26 ] >>859 クロージャにスコープは関係ありありだろ ちなみに俺は817とかじゃないが
863 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:08:02.57 ] >>858 どの本です? www.amazon.co.jp/s/ref=nb_sb_noss?__mk_ja_JP=%83J%83%5E%83J%83i&url=search-alias%3Dstripbooks&field-keywords=JavaScript%82%C9%82%E6%82%E9&x=6&y=16
864 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:08:52.00 ] >>859 843 名前:デフォルトの名無しさん[sage] 投稿日:2012/02/20(月) 00:49:11.23 >>842 クロージャ。コレでわからなきゃ半年ROMってろ
865 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:09:44.48 ] >>863 www.amazon.co.jp/dp/4873114888
866 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:18:41.61 ] ほかの言語じゃあまり見られないような議論だな やっぱり自由度が高いからか。
867 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:20:27.91 ] >>862 関係ないとはいわんが、前進してないだろう >>834 で「>>810 で答えが出てる」と指摘を受けておきながら「クロージャだ、即時関数だ」と言葉遊びを続ける理由がわからん
868 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:22:46.10 ] >>834 =>>862 なんだが。。。
869 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:24:48.10 ] >>810 はwhileじゃないじゃん。
870 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:28:23.38 ] whileを>>810 っぽく書こうとするとこうなるな。 (function() { var condition; while(condition) (function() { condition = ?; // 条件書き換え })(); })();
871 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:29:40.77 ] 俺が整理してやるよ Javascriptでスコープいったらクロージャは無視出来ない ここまではいいだろ? で >>807 wwでは毎回クロージャが作られる >>831 では毎回クロージャが作られない そこが周回ごとにスコープ出来てない、言われてるんだろ
872 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:30:03.57 ] >>868 それはすまんかった >>839- から続く不毛な議論に終止符を打ちたかったんだが、途中から入ると難しいな… >>869 while でも出来る
873 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:30:43.17 ] >>872 > while でも出来る じゃあ、実際にやってみ。 ?って思うぞ。
874 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:32:32.98 ] >>871 > >>807 wwでは毎回クロージャが作られる お前根本的なところがわかってないんじゃないか? >>807 はループになってない。
875 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:33:07.20 ] >>871 > >>807 wwでは毎回クロージャが作られる ちょwおまwww
876 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:33:13.29 ] >>807 のクロージャーの部分は whileの( 条件 ) だ。
877 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:37:04.76 ] >>873 var i = 0; while (i < 10) (function (i) { console.log(i++); }(i));
878 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:37:26.72 ] whileにクロージャーを使えというレスに 対するボケを見抜けない人は辛いなw
879 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:38:45.15 ] >>877 想定通り、無限ループやっちゃったねw
880 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:40:58.13 ] ねぇねぇ 今どんな気持ち? ∩___∩ ∩___∩ ♪ | ノ ⌒ ⌒ヽハッ __ _,, -ー ,, ハッ / ⌒ ⌒ 丶| / (●) (●) ハッ (/ "つ`..,: ハッ (●) (●) 丶 | ( _●_) ミ :/ :::::i:. ミ (_●_ ) | ___ 彡 |∪| ミ :i ─::!,, ミ、 |∪| 、彡____ ねぇ今どんな気持ち? ヽ___ ヽノ、`\ ヽ.....::::::::: ::::ij(_::● / ヽノ ___/ ねぇねぇったらー / /ヽ < r " .r ミノ~. 〉 /\ 丶 / /  ̄ :|::|>>877 ::::| :::i ゚。  ̄♪ \ 丶 / / ♪ :|::| ::::| :::|: \ 丶 (_ ⌒丶... :` | ::::| :::|_: /⌒_) | /ヽ }. :.,' ::( :::} } ヘ / し )). ::i `.-‐" J´(( ソ トントン ソ トントン
881 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:41:44.01 ] 0 0 0 0 0 0 0 0 0 0 0 0 0
882 名前:877 mailto:sage [2012/02/20(月) 01:47:11.21 ] そういうことか var i = 0; while (i < 10) i = (function (i) { console.log(i++); return i; }(i));
883 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:47:49.11 ] (function(){ var i = 0; while (i++ < 10) (function (i) { console.log(i); }(i)); }());
884 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:49:30.70 ] >>882 iがスコープに閉じてない。
885 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:49:56.89 ] var i = 0; while (i++ < 10) (function () { console.log(i); }()); こうだろwww
886 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:50:31.07 ] リロードしろとあれだけ(ry
887 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:52:35.57 ] で話は>>831 という最終形態に戻る。 普通はこれでいいし、 var i=0; while(i<10) { console.log(i++); } どうしてもというのなら、 (function() { var i=0; while (i<10) { console.log(i++); } }()) これだけでいい。へんなコード書くな。
888 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:54:07.31 ] >>887 だから、それだとスコープが毎回できないだろ 毎回スコープを作るのがお題なんだから そのお題の理由はわからんけどw
889 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:55:01.25 ] 結局のところ、>>800 が正しいならむしろES.nextのletがバッドノウハウになる気がするんだがそこんとこどうよ?
890 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 01:56:45.03 ] whileとかどうせループの最初で変数初期化するんだから これでいいが (function() { var i=0; while (i<10) { var j=0, k=0; ・・・ } }()) 変数初期化サボるとかどうしてもやりたいのなら (function() { var i; while (i<10) {(function() { var j, k; ・・・ }())} }()) こう書けば? { ・・・ } が JavaScriptでは (function() { ・・・ }()) に なるってだけの話をいつまで続けてるんだ?
891 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 02:01:51.13 ] >>884 そこまで求めるのか while 文の体裁を崩して条件式に関数を入れないと無理だと思うのだが
892 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 02:09:23.12 ] すごく変態です……ってことだろ 少なくともブロックスコープさえあれば自然に書ける(C++派) あるいは末尾再帰が最適化されるなら開き直って全部再帰で書ける(Scheme派) letがなくてどっちもできない現状のJavaScriptは中途半端だなって気はする つーかブロックスコープなんていらんから末尾再帰の最適化しろと言いたい
893 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 08:57:39.20 ] >>885 のは無意味 (function() { var i=0; while (i++ < 10) (function (n) { console.log(i++); })(i); }()); これと (function() { var i=0; while (i<10) { console.log(i++); } }()); これじゃ意味が違うだろ
894 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 08:58:16.95 ] 上の方のconsole.log(i++)はnに置き換えてねw
895 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 10:32:13.71 ] while(i ? i < 10 : (i = 0, true)) (function(i) { console.log(i) })(i++)
896 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 11:53:50.87 ] Javascriptは、条件式の部分で変数宣言ができないから、 条件式まで含めなくても実用上は困らないと思う。
897 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 15:04:50.75 ] >>889 es6はlet定義しかないけど (function() { let x = 10; {let x = x + 20; console.log(x)}})() //->NaN (function() { let x = 10; let x2 = x + 20; console.log(x2)})()//->30 (function() { let x = 10; {let( x = x + 20)console.log(x)}})() //->30 を理解してりゃ問題ないと思う。 letでブロックスコープになると思ってるのが間違い。 >>800 の言いたいことは多分こういうのだと思う。
898 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 17:21:27.95 ] >>889 >>800 は正しくない。 全てObjectなんて言えるのはSmalltalkみたいに 制御文の中のbodyもObjectにできるような言語。 Javascriptは、Schmeに多くを担いながら、 Cのsyntaxを使い、なおかついろいろと削ぎ落してブラウザ向けに軽量にした言語。 ECMAScriptの仕様的にも”primitive value"は"Object"ではない。
899 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 17:23:21.85 ] 意識しないうちにboxing/unboxingをするんだっけか
900 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 17:31:02.68 ] >>892 Schemeは、letに関しては、 ラムダ式さえあれば、letも簡単に実現できる。(当時はBLOCKマクロ) 意味論的にも問題ないし、コンパイラもシンプルになる。"RABBIT: A Compiler for SCHEME" けどプログラム書く時に不便だからletは言語仕様に入れようね派。"RnRS"
901 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 17:45:36.88 ] ちなみに、Brendan Eichは、Javascript(Mocha, Livescript)を設計した時に、 "RABBIT: A Compiler for SCHEME"にもろに影響を受けて、 言語を小さくするためletは導入しない決定をしたと思われる。 Schemeを実装する予定でNetscape社に入ったと後に語っているので。 ただ「小さくする」制約が、今では全く無意味になったので、 EichはECMAScript仕様策定ではかなり盛り込む派に立っている。 moduleも付け加えたほうがいいと考えている。 けどそれは現在のWebの世界を尊重して慎重にやらないといけないという立場。 だからHarmonyを仕切ってES4を一旦白紙に戻した。 けど捨てたわけじゃなくて個別の項目について継続審議中。
902 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 17:49:31.65 ] letは、lambdaを使うマクロとして実装することもできるけど、プリミティブとして実装すると、 作ったらすぐその場で適用する関数として、最適化できるんだよな確か。
903 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 18:24:48.37 ] let式じゃなくてlet文なら持ち運ばれる可能性ないからね。 エスケープ解析しなくてもクロージャ生成を端折れる。
904 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 21:28:25.03 ] javascriptって結局lispのパクリemacsのパクリなんだろ もうjavascript廃止してlispを標準にしろよ
905 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 22:11:25.64 ] ブラウザ標準スクリプト言語として? 妄想は他の人の目に付かないところでやってくれ
906 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 22:31:42.97 ] 見た目がC言語っぽくないと拒絶しちゃう人がいかに多いかわかってないだろ >>904
907 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:09:13.62 ] まあ、ブロックスコープがないC言語でも UnixやLinuxが作れるように、合ったら便利だけど 無くても問題ないものなんだろうね。 関数にしておけばいいだけなわけだし。
908 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:18:17.08 ] > ブロックスコープがないC言語 > ブロックスコープがないC言語 > ブロックスコープがないC言語
909 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:27:47.91 ] 早速一匹釣れたかw
910 名前:1/2 mailto:sage [2012/02/20(月) 23:27:57.98 ] そもそもCはオブジェクト指向じゃない。その上、for文にブロック変数が作れるよ。ミスリー? スコープが簡単に作れないってのはJavaScriptが根本に抱えてる問題の一つだよ 現実から目を背けたって意味ない
911 名前:2/2 mailto:sage [2012/02/20(月) 23:30:19.23 ] JavaScriptは 他のオブジェクト指向言語のように直感的にブロックでスコープが作れないし (ex.ループ内にスコープを作ろうとするだけで複雑なコードになる) Function objectでスコープ作れるけど、Lisp/Schemeほどの便利さはない (ex.末尾再帰最適化されない、高階関数が簡単にはできない)
912 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 23:55:05.01 ] いや、高階関数は結構得意。 Javascriptの特徴といっていいくらい。 設計時にクロージャを導入する決断をしたのは素晴らしい。 Schemeと一緒で部分適用は苦手。(ML, Haskellは得意)
913 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:03:31.16 ] 玄人向きの機能が無駄に充実してるのに基本的な機能が足りない でもそんなところが可愛いよJavaScript
914 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 00:20:58.15 ] 釣り人が足滑らせて溺れながら「釣れたか」とか言ってる?
915 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 03:24:10.03 ] >>903 var x = eval("let (x = 20) { x }") これで簡単に外に漏れる。 var xの実行コンテキストがGlobalならCallがメモリリークするのと同じ問題が起きる。
916 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 08:43:22.34 ] evalはバッドノウハウだから どうでもいい。
917 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 10:17:16.82 ] 次のテンプレ案これでどうかな。 【言語設計】JavaScriptスレ 2.0【限定】 言語としてのJavaScriptに関する議論のスレです。 Web製作におけるJavaScriptの質問はWeb製作板へ。
918 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 10:37:29.46 ] せっかくのホイホイスレなんだから限定にすんなよ
919 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 10:53:08.81 ] 次スレイラネ ECMAScriptスレで必要充分だろ
920 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 13:22:20.88 ] 無いと分かってない奴が立てるんじゃないかな。このスレみたいに。
921 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 13:28:03.39 ] 立てなくてもいいからdartスレのバカどもをちゃんと引き取ってくれよ
922 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 13:55:52.87 ] おまえが誘導しろよ
923 名前:デフォルトの名無しさん [2012/02/21(火) 15:21:48.40 ] 2ちゃんねるはオワコン 質問サイトに移行したほうが俺らのため
924 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 16:00:52.24 ] 質問サイトもいいかげんオワコンだろがw はてなはあいかわらずのはてなクオリティだし、他のサービスはほとんどの回答者がハズレ回答者だし。
925 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 20:40:17.66 ] dartは別スレでいいだろ
926 名前:デフォルトの名無しさん [2012/02/21(火) 21:32:28.60 ] 連想配列をキーそのものでソートする方法を教えてください
927 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 22:31:52.58 ] 連想配列はソートできませんので連想配列のキーをソートしてください。
928 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 22:47:05.49 ] javascrpitを使って、skypeのチャットのようなことをブラウザでやりたいのですが可能でしょうか? サーバからの要求を受ける機能があるかどうかというところだとは思っているのですが
929 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 22:52:47.17 ] >>928 Ajaxで検索
930 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:01:45.08 ] >>929 早い返信ありがとうございます www.openspc2.org/JavaScript/Ajax/Ajax_study/chapter02/001/index.html ↑ググってすぐに見つかった、ここをとりあえず見てました。 ざっと読んだ感じ、同期を取ることがJSでは不可能なため、setIntervalなどを使っていくしかないという認識でよいでしょうか?
931 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:07:09.36 ] Push自体は無理なので 定期的なポーリングによるPushもどきになるのは仕方ない
932 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:14:36.15 ] なるほど、やはりそうなりますよね 私はチャットのデータをMySqlで管理したく思っているのですが、 とすると、数秒起きに最新何十件のチャットを読み込みにいくということになりそうですね。 あとはどのようにレスポンスをあげていくか頑張ってみます。 ありがとうございました
933 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:35:17.53 ] >>932 「何かあるまで応答を返さない」 という手もあるぞ
934 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:38:33.57 ] ローカルストレージはブラウザによって作法が違うのでよく調べたほうが良い。 今後はHTML5 client-side database storageに集約されていくのだろうが。
935 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 00:15:40.04 ] pushが無理とかHTML4時代の人間ばかりだなw
936 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 00:24:19.87 ] スレがすげー伸びてるw >>727 >>725 が言っているのは、 var foo = function foo() {} function foo() {} と全く同じ意味だから前者は無駄ってことなんじゃ?
937 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 00:53:58.05 ] >>930 よろしくありません ピント:ggrks
938 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 01:59:31.06 ] >>935 >>937 まぁそう言わずに、勉強する気はありますので、せめて何という技術かくらいは教えていただけませんか
939 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 02:41:36.40 ] >>936 どっちかと言えば var foo = function(){}; と同じと言いたかった。 fooを二度書く意味あんのかよと。格好悪いし。
940 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 03:19:41.23 ] >>939 同じじゃないよ nameとスコープと変数の実体化に影響する
941 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 03:23:04.22 ] >>936 スタイルで書いてると(必ずしも同じ名前である必要はない) 幸せになれるよ
942 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 09:18:42.72 ] >>936 ,939 var f = function (){};console.log(f.name); var f = function hoge(){};console.log(f.name); var f = function hoge(){},b = f;console.log(b.name); この3つ実行すりゃ違いわかるよ
943 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 11:08:36.16 ] >>941 後者で書いてると幸せになるの?
944 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 11:27:48.11 ] >>938 横レスだけど、HTML5前提でよければ、WebSocketという技術がある 詳しくは、WikipediaなりGoogleで調べてちょ
945 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 11:32:34.23 ] (>>944 の補足) WebチャットなりWebSocket技術はWebブラウザ前提の話題だから、 もし続きの質問がしたいのであれば、このスレよりも WebProg板のHTML5スレのほうが期待するレスをもらえると思う
946 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 11:36:43.74 ] こういうプッシュとかを使う物って、その間ずっとセッションを残してる訳だろ? サーバ側が対応してないと実際使用するのは難しい
947 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 11:49:04.39 ] WebSocketは(socketという名前が示すように)双方向通信技術であって、 プッシュ技術ではないし、さらにはサーバ側の対応は(最初から)必須
948 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 14:33:11.47 ] >>939 それは違う。>>936 の2つとは違う。 >>942 >>936 の2つは同じ。
949 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 16:20:31.58 ] >>948 var f = function hoge () { console.log(hoge); }; console.log(hoge); まぁ両方fooだから同じとも言えるけど
950 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 16:59:58.57 ] var foo = function foo() { alert(foo) } var bar = foo; foo = undefined; bar(); // IE以外で動作 これならarguments.calleeで良い気がするけど、 他にメリットあるんだろうか。
951 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 17:02:02.86 ] function expressionのnameはbody内で有効な識別子に過ぎないから当たり前。 再起その他、自己参照のある関数用。
952 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 20:58:44.24 ] >>944-947 遅くなりましたが返信ありがとうございます HTML5対応ブラウザはWebSocket、未対応ブラウザはsetIntervalで動くように試してみたいと思います さっそく勉強に入ります これから作るぞーという今の気持ちが一番楽しくていいですね
953 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 22:30:45.66 ] arguments.calleeは使ったらダメ
954 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 22:31:31.36 ] で、最終的にはアレを使えばいいから 作らなくてよくなるんだよなw
955 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:07:51.56 ] アレってなんだよ websocketはサーバー側が対応してないとどうにもならんしポーリングはラグるしcommetは接続数たらんくなるしなので同期はやるだけの価値がないというのが俺の結論
956 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:41:02.25 ] サーバーは対応してるの使えばいいだけ
957 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:42:07.70 ] >>955 やるだけの価値がない理由が 技術的制限の話しかでてないぞ。 価値というのはそれを使うユーザーが 必要かどうかだろ。
958 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 00:37:20.11 ] >>953 なんで?
959 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 04:33:02.14 ] >>953 これを見て思い出したけども、 そういや何でES5でarguments.calleeって使えなくなるの? もともと自分自身への参照がargumentsの中にあるのは違和感があったけど。
960 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 09:51:34.43 ] >>958-959 togetter.com/li/215907
961 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 09:56:02.34 ] 本来callerとかcalleeとか、スタックフレームから参照するはずのものを、 関数オブジェクト経由で参照するとか、設計が変だったからな、あれ。
962 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 11:52:37.38 ] >>961 arguments.caller: call site依存 (要はスタックフレームへの参照) arguments.callee: 自分のことだからセルフリファレンスがちゃんと定義されれば必要ない。
963 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 12:20:55.93 ] callerが危険だから廃止なのは分かる。 calleeはargumentsにぶら下げるのが不恰好だから廃止って感じなのか。
964 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 12:39:51.85 ] argumentsは動的に決まるのに、calleeは参照場所で静的に決まってるからね。 あまりいい整理の仕方じゃなかったね。
965 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:34:12.67 ] 関数名は__FUNC__で取得できるようにすれば良い。
966 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:49:03.73 ] WMIをつかうとき、取得結果をEnumeratorに食わせなければいけない 理由をおしえてください。
967 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 00:24:37.57 ] WMIのメソッドがコレクションを返すから
968 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 11:33:13.91 ] コレクションは直接見れないの?