+ JavaScript の質問用スレッド vol.120 + [無断転載禁止]©2ch.net
+ JavaScript の質問用スレッド vol.120 + [無断転載禁止]©2ch.net
: デフォルトの名無しさん [sage] 2016/05/22(日) 19:51:33.37 :WwOYSBmy JavaScript を自ら学ぶ人のための質問スレッドです。 のテンプレを読んだ上で質問してください。次スレはがのテンプレ案(本スレで改善案があれば考慮)を元に立ててください ■質問を書く上で (1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。 (2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。 (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など) (3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。 (4) 常に自発的に調べる心構えを持ってください。 具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。 わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。 (5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。 (6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。 ※必ず「問題の事象が再現されること」を確認してください。 必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。 (7) サンプルコードに HTML が含まれる場合は ttp://http://validator.w3.org/ "> ttp://validator.w3.org/ で [Check] してみてください。 (8) 質問を具体的かつ詳細に書くと回答を得られやすいです。 : デフォルトの名無しさん [sage] 2016/05/22(日) 19:57:06.35 :Jbe/yyc4 荒 ら し が 立 て た ス レ で す。 ス ル ー 推 奨 。 : デフォルトの名無しさん [sage] 2016/05/22(日) 20:14:45.33 :FTGg1fS8 荒らしってか三日間騒ぎ続けてるキチガイ : デフォルトの名無しさん [sage] 2016/05/22(日) 21:13:57.23 :5X2RDQPH 未だにお前らが何をやりたいのかさっぱり分からないが。 まず、次立てずに埋めた馬鹿は荒らしだろ。IDコロコロだし。 次に、このテンプレでいいのなら124を再利用すべきだろ。 そしてこのスレで行くつもりなら続きのテンプレも落とせよ。 ライブラリ禁止ならテンプレが異なるので立て直すべき。 個人的にはワッチョイの方がいいと思う。IDない頃よりはだいぶマシになってるし。 IDコロコロ埋め立て放置荒らしはWeb板に戻ってきて欲しいのかもしれないが、 どっちかというとお前らは議論したがっているし、(と言うよりは蘊蓄を披露したいだけか?) 正直今のお前らの日本語力でID無しでの議論は無理だから、この板が妥当だろう。 議論内容は正直どうでもいいものだけど、それでも議論したければするがいいさ。 ただ、あの内容については、500行程度のコードを書くようになれば自然に納得いくから、 もやもやしている奴は、こんな所で時間を消費するのではなく、コードを書いた方がいい。 お前らは本当に「50行のコードしか書いてないんだな」と思える展開が多すぎる。 : デフォルトの名無しさん [sage] 2016/05/22(日) 21:26:22.79 :FTGg1fS8 長い3字で済ませろ : デフォルトの名無しさん [sage] 2016/05/23(月) 00:01:13.45 :nh4t1HCu 前スレの ID:WwOYSBmy を見てきたが、酷いな : デフォルトの名無しさん [sage] 2016/05/23(月) 09:44:02.18 :09f5J8xU ワードサラダっぷりも誰かにそっくり : デフォルトの名無しさん [sage] 2016/05/23(月) 19:52:15.88 :aItG7/va - いきなりかよw : デフォルトの名無しさん [sage] 2016/05/24(火) 01:18:13.42 :1wjjU4Dv プロパティを持っていないときに代入をしたいんですが var foo = {}; foo.bar = foo.bar || "value"; こういう書き方意外になにかありますか? もしくは、rubyのHash.new("value")みたいにデフォルト値を与える方法はありますか? 初心者なのでどうすべきなのかさっぱりわかりません : デフォルトの名無しさん [sage] 2016/05/24(火) 02:37:42.45 :wmKZ/4EE if(!hoge.a) hoge.a='aaa'; がわかりやすくてよく使う。 オブジェクトなら、mergeObjって関数作ってて、デフォルト値のオブジェクトにマージする関数も作ってる。 : デフォルトの名無しさん [sage] 2016/05/24(火) 11:09:37.02 :57joSblr foo.bar || "value" は foo.bar に falsy な値が入っていた場合に上書きされる プロパティチェックには in 演算子か hasOwnProperty を使う if (!('bar' in foo)) { foo.bar = 'value'; } デフォルト値はプロトタイプで指定する function Foo (bar) { if (arguments.length > 0) { this.bar = bar; } } Foo.prototype.bar = 'value'; console.log(new Foo); console.log(new Foo(1)); : デフォルトの名無しさん [sage] 2016/05/24(火) 11:43:05.72 :Fup9czqT foo.barがどのような過程で生成されるかで違ってくるよ : デフォルトの名無しさん [sage] 2016/05/24(火) 12:18:09.22 :fTRdDZnU すみません、質問です。 サイトで時間で表示非表示のスクリプトを入れているのですが 非表示でもリロード時に一瞬表示されてしまいます。 このちらつきを防止する策はありませんでしょうか? コードははこんな感じです↓ <script type= : デフォルトの名無しさん [sage] 2016/05/24(火) 12:23:18.22 :iG1UUWT4 www ごめんでも笑えた : デフォルトの名無しさん [sage] 2016/05/24(火) 12:24:06.53 :c4cnVHPj 茶碗の中みたいだな : 13 [sage] 2016/05/24(火) 12:35:17.27 :fTRdDZnU ごめんなさい 途中で切れてしまいました <script type="text/javascript"> <!-- window.onload = changeDisplay; function changeDisplay(){ var objDate = new Date(); var now = (new Date()).getTime();//現在のタイムスタンプ(ミリ秒)を取得 var changeTime = (new Date("2016/05/25 20:00:00")).getTime();//切り替える日時のタイムスタンプ(ミリ秒)を取得 //切り替え前 if (now < changeTime) { document.getElementById('hoge1').style.display = "block"; document.getElementById('hoge2').style.display = "none"; setTimeout("changeDisplay()", 1000);//1秒ごとに実行(◯秒ごとの場合は、第2引数に 「◯ * 1000」 と記述) //切り替え後 } else { document.getElementById('hoge1').style.display = "none"; document.getElementById('hoge2').style.display = "block"; } } // --> </script> : デフォルトの名無しさん [sage] 2016/05/24(火) 13:16:31.22 :iG1UUWT4 window.onloadじゃなくてDOMContentLoadedで処理するとか : デフォルトの名無しさん [sage] 2016/05/24(火) 13:21:28.18 :57joSblr s document.styleSheets で #hoge1 { display: block; } #hoge2 { display: none; } を宣言する : デフォルトの名無しさん [sage] 2016/05/24(火) 13:47:40.17 :Fup9czqT var timer = 0; function changeDisplay(){ clearTimeout(timer); ... if (now < changeTime) { ... timer = setTimeout("changeDisplay()", 1000); } else { ... timer = setTimeout("changeDisplay()", 1000); } 方法は色々あるけどこれで良いんじゃない? : デフォルトの名無しさん [sage] 2016/05/24(火) 19:32:47.77 :cROy8nMz 手元にある変数をhashtableとして使って var model = {}; model[a][b][c] = value; // ←これができるような準備をしたい みたいにして実行時に受け取ったkeyを使ってモデルを構築したいんですね それをするためにデフォルト値の設定か、key所持の有無を知りたかったんです > プロパティチェックには in 演算子か hasOwnProperty を使う ありがとうございます。さっそくそれらをぐぐって学びました。 まさにそれです。hasOwnPropertyでピッタリのようです。 > if(!hoge.a) hoge.a='aaa'; ありがとうございます。タイピング量的にはこれがいいですね。 今回、厳密にプロパティ所持の有無だけをチェックする必要も実は無いですし。 : デフォルトの名無しさん [sage] 2016/05/24(火) 21:04:07.49 :TKpsNxtt > すみません、質問です。 > サイトで時間で表示非表示のスクリプトを入れているのですが <html class="ng"> <script> if (new Date() < new Date("2016/05/25 20:00:00")) { document.documentElement.className = 'ok'; } </script> <style> .ng #hoge1 { display: none } .ok #hoge2 { display: none } <style> <body> <div id="hoge1">hoge1</div> <div id="hoge2">hoge2</div> </body> </html> : デフォルトの名無しさん [sage] 2016/05/24(火) 21:08:36.04 :TKpsNxtt 一つ言っておきたいのは、ブラウザのJavaScriptでシンプルなコードを書こうと思ったら、 CSSの知識が必要不可欠ってこと。(もちろんHTML自体の知識も必要) CSSを使ううちに不満が出てきて、SASS(SCSS)に乗り換えることだろう。 見た目に関する多くの処理をCSSでやることで JavaScriptは驚くほどシンプルになる。 : デフォルトの名無しさん [sage] 2016/05/24(火) 22:57:09.14 :fFhHkZMI JSDocで、JSONを返すAPIなどのオブジェクトを定義出来ますか? : デフォルトの名無しさん [sage] 2016/05/25(水) 00:22:00.09 :oaeRtxYk JSON はただの String 型 : デフォルトの名無しさん [sage] 2016/05/25(水) 00:38:42.00 :Jdaj3qLb それは、なんか関数用意したほうがいいんじゃないの? model={} keys=[a,b,c] setModel(model,keys,value){ var k=keys.pop(); model[k]=keys.length==0?value:setModel(!model[k]?{}:model[k],value); return model; } みたいな感じで。 : デフォルトの名無しさん [sage] 2016/05/25(水) 01:02:30.80 :e2/1A4Vq お疲れさまです 板TOPに書かれているルール >JSはweb管理板で 現行スレ + JavaScript の質問用スレッド vol.130 + ttp://echo.2ch.net/test/read.cgi/hp/1463395557/50 : デフォルトの名無しさん [sage] 2016/05/25(水) 01:49:09.77 :VNiDmyVP Web板って自演がウザイだけじゃん : デフォルトの名無しさん [sage] 2016/05/25(水) 07:14:03.46 :cVBZ9i9Y それができた経緯と現状を顧みずにルールに縛られるのはドアホのすること。 ルールのために我々があるのではない。 : デフォルトの名無しさん [] 2016/05/25(水) 07:23:06.88 :hMNMImmN JSONをパースしたオブジェクトの構造を定義しておけば、IDEの支援受けられるやろ? だからソース上にはないクラスの定義できるかって聞いた JSONが文字列って事くらい誰でもわかる : デフォルトの名無しさん [sage] 2016/05/25(水) 09:26:14.89 :Yyi7LTu7 お前の使ってるIDEの仕様なんか知らねえw : デフォルトの名無しさん [sage] 2016/05/25(水) 09:59:51.34 :oaeRtxYk JSON は String 型なのでオブジェクトとしての補完機能は必要ない String.prototype 系の補完機能が働けばそれでいい まさかとは思うが、JSON をパースしたオブジェクトを JSON と誤解してないだろうな... : デフォルトの名無しさん [sage] 2016/05/25(水) 14:33:22.24 :Jdaj3qLb その頃のjsは、Webだけのためのものだったからなぁ : デフォルトの名無しさん [sage] 2016/05/25(水) 17:16:25.85 :hMNMImmN そうなんだ 例えば、TwitterAPIで返ってくるJSONをパースしたオブジェクトの構造をJSDcoコメントで定義しておけば、オートコンプリートの支援が受けられるやろ? それみたいに、APIで返ってくる形式をDocで定義したい : デフォルトの名無しさん [sage] 2016/05/25(水) 18:20:50.93 :6lXHJSGu JSON.parse したオブジェクトは new Object か new Array のどちらかしかない JSON Interface のオブジェクトというものは存在しない : デフォルトの名無しさん [sage] 2016/05/25(水) 18:30:33.44 :Rwgeje6L JSONデータにまで、インテリセンスを効かせたいの? : デフォルトの名無しさん [sage] 2016/05/25(水) 18:50:53.98 :hMNMImmN うん : デフォルトの名無しさん [sage] 2016/05/25(水) 20:50:05.00 :RmI4sgQT あきらめろん : デフォルトの名無しさん [sage] 2016/05/25(水) 23:00:15.35 :cOSJO7dH それなら、Object 型を指定するだけで済むはずだが() : デフォルトの名無しさん [sage] 2016/05/26(木) 00:59:59.52 :xmgEeB9V 実質的に今も大して変わらず、9割以上ブラウザだろ。 それよりは、XHRがでかい。 あれで単なるブラウザ専用DSLからプログラミング言語へと脱皮した。 脱線するが、君はあいかわらずのコードを書いてるな。 指摘は正しいし、そのコードも悪くはないが、良くはない。8/10だ。 普通はshiftだろうし、keysが抜けているが、俺が言っているのはそういう文法的なことではない。 それはさておき、君はC++出身ということでいいのかな? これをちょっと聞きたかった。 あと、君は ID:WwOYSBmy か? これについては荒れるリスクがあるから、答えたくなければ無視でいい。 その代わり、回答があれば、そちらに有益な情報(と俺が思っているだけだが)を一つ出すことにする。 : デフォルトの名無しさん [sage] 2016/05/26(木) 01:22:55.48 :cAjDmLh7 のコードに素人臭さを感じるのは 当たり前に入れるべきスペースすら無いからかな。 経験の低さがにじみ出てる : デフォルトの名無しさん [] 2016/05/26(木) 01:48:29.92 :xw9RGDuQ 質問です 初めてnodejsのexpress?というのでwebアプリ作成してみたのですが 非同期が難しすぎるし、IDEの補完がきかないのでメソッドもいちいち調べるの面倒です(以下コードです) ttps://github.com/himanannyaga/angular2-express-mongo-quiz/blob/master/server/app.js 受け取ったJSONの型チェックとかバリデーション簡単にできる方法ってないんですか? そもそもnodejs自体やめたほうがいいんでしょうか? やめるとしたら今流行りのサーバーサイドのフレームワークってどれがいいんでしょうか? : デフォルトの名無しさん [sage] 2016/05/26(木) 02:21:24.67 :dKizvVLh : デフォルトの名無しさん [sage] 2016/05/26(木) 02:55:58.29 :Zah1U3qm ,40 すまんな。スマホで書いてるから。 普段はそういう瑣末な事は、beautifyで綺麗にしてるよ。 俺はperlとgauche。 1ではないよ。 : デフォルトの名無しさん [sage] 2016/05/26(木) 03:07:20.77 :cAjDmLh7 なるほど。経験者はつい入れてしまうから それができないってのはやはり初心者のようだね。 : デフォルトの名無しさん [sage] 2016/05/26(木) 07:33:19.93 :QBGIcNJU ? : デフォルトの名無しさん [sage] 2016/05/26(木) 07:40:08.69 :CRvI10Ce 補完がどうとか型チェックがどうとか言ってるやつはtypescript使ったらいんじゃない : デフォルトの名無しさん [sage] 2016/05/26(木) 07:55:50.23 :clpr93dz ビルドしたらjsになるし開発時だけの機能じゃないんですか? : デフォルトの名無しさん [sage] 2016/05/26(木) 08:40:29.43 :Zah1U3qm つい入れてしまうが分からん。 どのみち機械が解決してくれる内容は手で修正なんかしないだろ。 瑣末な所を気にしすぎて納期的に死ぬ自称中級者みたいなこと言ってないでさ。 popじゃなくてshiftじゃね?ってのは凄く恥ずかしいが。 : デフォルトの名無しさん [sage] 2016/05/26(木) 08:42:44.53 :wYXEPUUA JSON は String 型固定だから型チェックする必要はないよね : デフォルトの名無しさん [sage] 2016/05/26(木) 12:08:35.93 :z6iFNo2h JSON-Schemaで検索 : デフォルトの名無しさん [sage] 2016/05/26(木) 12:12:08.35 :grnWiB9o 補完は好みによるので自分で構築しろよ : デフォルトの名無しさん [sage] 2016/05/26(木) 12:54:37.58 :z6iFNo2h スマホじゃ仕方ないと思うが、その結論はどうなんだ beautifierや規約強制系のツールは、必要最低限で人が意識して書くほどには綺麗にならないし つかそもそも作業中に自分でも見づらいし、コード書いてたら普通は入れるだろうよ : デフォルトの名無しさん [sage] 2016/05/26(木) 13:13:53.91 :z6iFNo2h あとコードに補足するが !obj.prop の判定はfalsy値も含むから、 (obj.prop == null) のが良い : デフォルトの名無しさん [sage] 2016/05/26(木) 13:15:55.40 :Zah1U3qm うーん。タイプ数がとにかく減ってくれれば。 ショートカットもバインドしてあるから、2・3行書いて叩いて、って普段はしてるよ。 人の意識なんかそれぞれだから、規約で縛っちゃったほうが後から来る人に引き継ぎやすいし、rcファイルを撒いてる。 規約は真面目に決める。 : デフォルトの名無しさん [sage] 2016/05/26(木) 13:19:24.85 :Zah1U3qm それは微妙では? やるなら、 ((typeof obj.prop === "undefined") || obj.pro===null) で見てやったほうがいいと思う。 : デフォルトの名無しさん [sage] 2016/05/26(木) 13:29:07.06 :z6iFNo2h それは初心者がやること undefined == nullだからやらんでよろしい 少しは他人に突っ込む前に考えろって : デフォルトの名無しさん [sage] 2016/05/26(木) 13:31:26.42 :z6iFNo2h スタイル強制ツールも完全じゃないんだってば それも本当に使ってりゃわかるだろ : デフォルトの名無しさん [sage] 2016/05/26(木) 13:44:38.38 :Z4ePso6q falsy な値を考慮するなら null, undefined だけ特別扱いするコードも微妙 in 演算子か hasOwnProperty を使う方がよい : デフォルトの名無しさん [sage] 2016/05/26(木) 13:47:14.61 :azrLOfn9 処理の内容から想像するに in演算子よりhasOwnPropertyメソッドのほうが処理が軽かったりもするのかな? : デフォルトの名無しさん [sage] 2016/05/26(木) 14:14:23.15 :z6iFNo2h 一般にはデフォルト値を与える場合はnullを置き換える事が多いから、こうしてる nullが入る事も考慮する場合ならそれに同意する ただ、JSON相手ならinよりhasOwnPropertyのが良いぞ : デフォルトの名無しさん [sage] 2016/05/26(木) 14:16:43.93 :z6iFNo2h しまったJSONは別の人か まあどちらにしろ in 使う場合はモンキーパッチとかしてる場合でも無い限りまず無いと思う : デフォルトの名無しさん [sage] 2016/05/26(木) 14:25:27.17 :tAENBh2t 素朴な疑問なんだけどfor文の条件部の区切りってなんでセミコロンなの? 中でカンマ使うから? : デフォルトの名無しさん [sage] 2016/05/26(木) 15:08:38.61 :iU2f12RA 誰に聞くべきだ デニスリッチーとかブライアンカーニハンとかケントンプソンに聞くべきじゃねえのか : デフォルトの名無しさん [sage] 2016/05/26(木) 15:25:45.42 :7MaZAWY8 ==での比較とか、もう!の誤爆と発想のレベルが変わらなさすぎてなんと言うかだなぁ。 まぁ、完全じゃないってか少し冗長になる事は多いが、完全じゃない、ってのはどんなとき? 文だから。 : デフォルトの名無しさん [sage] 2016/05/26(木) 15:34:27.62 :e0xtAfbK 論理演算で不可能なケースが発生するのは 論理的なコードを書いていない証 パーフォーマンスが悪くなるよ : デフォルトの名無しさん [sage] 2016/05/26(木) 15:35:50.71 :DQmxlFQb なるほど 頭がパーだからパーフォーマンスか ははは : デフォルトの名無しさん [sage] 2016/05/26(木) 15:38:36.64 :uxvxPhHy そもそもなんでfor文なの? forってどういう意味なの? なんでふんどしなの? : デフォルトの名無しさん [] 2016/05/26(木) 15:50:42.51 :z6iFNo2h >==での比較とか、もう!の誤爆と発想のレベルが変わらなさすぎてなんと言うかだなぁ。 俺から言わせればお前さんが同レベルだよ そうやって仕様をまるで把握していないから、そういう事を平気で言えるんだろうけどね : デフォルトの名無しさん [sage] 2016/05/26(木) 15:57:13.56 :VNKitGFp いつまでもうるせえな どうでもいいだろこんな初心者がひっかかるような話 俺ら上級者様には一切関係ねえ話だろうが undefinedなんて出すバカなんてほっとけや : デフォルトの名無しさん [sage] 2016/05/26(木) 16:03:05.34 :z6iFNo2h リッチー先生はもうこの世におらん… : デフォルトの名無しさん [sage] 2016/05/26(木) 16:09:23.69 :CcMPN8b7 リッチのくせに不死じゃないだと? そんなバカな : デフォルトの名無しさん [sage] 2016/05/26(木) 16:14:10.74 :z6iFNo2h リッチーにジョブズ、リーナスにゲイツ 最近は本当に惜しまれる人ばかりがいなくなってるな : デフォルトの名無しさん [sage] 2016/05/26(木) 16:36:33.73 :UN7L7nZy >リーナスにゲイツ最近は本当に惜しまれる人ばかりがいなくなってるな 2人とも生きているのでは? : デフォルトの名無しさん [sage] 2016/05/26(木) 16:39:58.63 :z6iFNo2h まさかこんなすべったレスにマジレスで突っ込まれるとは思わなかったぞ! : デフォルトの名無しさん [sage] 2016/05/26(木) 16:42:16.87 :rGVMPRNj 名誉毀損 : デフォルトの名無しさん [sage] 2016/05/26(木) 16:51:40.48 :7MaZAWY8 あーあー、お前のコードでもういいよ。 obj.propがnullで初期化されてればそれで良くなったら、改修がめんどくさいとかほっとくよ。 : デフォルトの名無しさん [sage] 2016/05/26(木) 17:01:57.05 :TSvbJ/YB 伝説の呂布はあかん : デフォルトの名無しさん [sage] 2016/05/26(木) 17:22:20.13 :99YjRWAc 2ちゃんでしか威張れないなんてなんてかわいそうな人たちなんだろう : デフォルトの名無しさん [sage] 2016/05/26(木) 18:50:41.26 :ZS10B00B nullとundefinedは違うの? : デフォルトの名無しさん [sage] 2016/05/26(木) 18:58:27.62 :etrunD2E んなもんぐぐれぼけ いつからここは初心者レクチャー講座になったんだ鬱陶しい : デフォルトの名無しさん [sage] 2016/05/26(木) 19:23:51.43 :e0xtAfbK nullとundefined 視覚的な違いがある : デフォルトの名無しさん [sage] 2016/05/26(木) 19:26:21.87 :z6iFNo2h nullも欲しいならそもそも判定する必要すらないだろ お前が何を言ってるのか、何を想定して何を問題としてるのかもわからん はっきり言えよ : デフォルトの名無しさん [sage] 2016/05/26(木) 19:37:17.07 :e0xtAfbK いちばん不思議なのことは obj.prop がどうしてnull になるのか? だ : デフォルトの名無しさん [sage] 2016/05/26(木) 19:42:34.13 :OguWhub7 ==を使った場合という意味? だとしたら==で比較すりゃ型変換されるからでは : デフォルトの名無しさん [sage] 2016/05/26(木) 20:18:59.79 :7MaZAWY8 あるわ。 未定義と、正しくnullで初期化しました、は相当違う。 要は、横着するならfalsyなオブジェクトを容認すりゃ良いし、 横着しないのであれば型と中身はチェックすべき。 null==trueはfalseで、null==trueもfalseで、余計な地雷を生む。 って話。 : デフォルトの名無しさん [sage] 2016/05/26(木) 20:19:52.73 :WcKFKF+t よくアクセスランキングとかにaタグでリンクを貼って飛ばしたりすると思いますが、マウスでクリックした場合は、リンク先で正しくカウントされますが、ジャバスクリプトでページ変更した場合はカウントされないのは、どうしようもないのでしょうか? : デフォルトの名無しさん [sage] 2016/05/26(木) 20:31:24.69 :z6iFNo2h いやその違いが問題だと言うなら問題となる事例を出せと… 少なくとも自分の経験上では、効率考えるとこれが一番妥当 それ以上厳密な型が欲しいならそもそもJavsScriptなんて使わない : デフォルトの名無しさん [sage] 2016/05/26(木) 20:32:48.87 :iLE0aKXK 質問者もいねえんだからもうよそでやれよクソッタレどもが : デフォルトの名無しさん [sage] 2016/05/26(木) 20:35:37.26 :z6iFNo2h >要は、横着するならfalsyなオブジェクトを容認すりゃ良いし、 まずこの結論が極端 0を容認するが、null/undefinedを容認しない事例なんてゴマンとあるのに対し、 nullを容認するがundefinedを容認しない事例はほとんどない : デフォルトの名無しさん [sage] 2016/05/26(木) 21:53:32.28 :7MaZAWY8 しつこいやつだな。お前が正しいでもういいよ。 : デフォルトの名無しさん [sage] 2016/05/26(木) 21:56:38.20 :cAjDmLh7 これに従えばいいだろ ttps://github.com/airbnb/javascript/ 今時typeofつかって"undefined"と比較するのはアホ : デフォルトの名無しさん [sage] 2016/05/26(木) 22:11:08.45 :5gTTFtf/ hasOwnPropertyでいいやん、ってだけの話を何をグダグダとw : デフォルトの名無しさん [sage] 2016/05/26(木) 23:10:54.73 :UjMbTLsx また、null, undefind の論争か DBでも、null があって、3値論理で手一杯で、 偉い学者が唱えた、undefind も入れての4値論理は、ややこし過ぎて、否定されただろ Rubyの偽は、nil, false だけ。 これが覚えるルールが少なく、最もシンプル JSはおかしい。言語実装者用の内部ルールが、 一般のプログラマーにも見えてしまっている : デフォルトの名無しさん [sage] 2016/05/27(金) 00:40:25.02 :fXm66YRc よくねえよ 問題とするなら具体的にどう問題になるのか出せって それが正しいならこっちだって改める : デフォルトの名無しさん [sage] 2016/05/27(金) 01:55:13.24 :10EzBfKp でもなぁ、現実問題便利なんだよ null・・・データーベースの値としてnullを代入 undefined・・・省略(何も変化させない) : デフォルトの名無しさん [sage] 2016/05/27(金) 02:38:39.80 :5O2HSGrs 改めて貰わなくて結構。 自分が正しいと盲信してる人間に説明し付けるほど無駄なことは無い。 : デフォルトの名無しさん [sage] 2016/05/27(金) 02:58:22.81 :fXm66YRc なんだそれ、事例出すなんて一言で済む話だろ それを虚勢で言っていないなら、ただ荒らしてかき回してるだけの嫌な奴でしかない : デフォルトの名無しさん [sage] 2016/05/27(金) 03:03:17.59 :fXm66YRc 具体的に実装コードが見えないがそれ便利なのか? : デフォルトの名無しさん [sage] 2016/05/27(金) 04:27:40.50 :Ck73qeVz 気持ち悪い奴が言い合ってるな。 : デフォルトの名無しさん [sage] 2016/05/27(金) 08:31:12.52 :bXpUR2n8 前のスレもそうでしたよ^^ : デフォルトの名無しさん [sage] 2016/05/27(金) 08:44:39.94 :N6sFDxPG nullとundefinedはレイヤーが違う。 nullはオブジェクトに置けるNaNみたいなもので、 基本オブジェクトを扱う文脈で基本効果を持って取り扱われる値。 あくまで参照が同じな特殊な役割を持った偽性のオブジェクトのようなサインが共有されていると思えばいい。 undefinedはもっと広く、何も扱うべき値がない時に充てがわれる基本効果の無い値。 : デフォルトの名無しさん [sage] 2016/05/27(金) 08:53:49.08 :UCpt+1On 少し違う。 null 値の定義はES2015で定義されてる。 --- primitive value that represents the intentional absence of any object value ttp://www.ecma-international.org/ecma-262/6.0/#sec-null-value --- null 値は意図的にオブジェクトが存在しないことを表す値。 undefined は未定義値。文脈上、初期化される前の値を表す。 : デフォルトの名無しさん [sage] 2016/05/27(金) 08:55:46.53 :u/p+Wu9Y そんなややこしい事考えるくらいならnullだけ有ればいいよね : デフォルトの名無しさん [sage] 2016/05/27(金) 09:10:27.24 :N6sFDxPG ESの範囲だけならそうだが、実際はESの範囲でnullは極めて限定的にしか表に現れない。 実際のnullのイメージというのは外様APIが作ってる面が大きい。 そしてprompt()みたいに基本文字列型を返す代わりにnullを返すものもある。 よって、nullは”明示的”な「サイン」と考えるのが一番現実に合っている。 undefinedもしかり。ただこちらはESの範囲でも様々に”暗黙的”に表に現れる。 そういう意味でレイヤーが違う。 どちらかというと内部的には両方の概念が合ったほうがいい。 表に出す時nullだけに絞ると言ったことは勿論可能。 nullだけあればいいというより、nullだけに絞る選択をすることも可能というべきか。 だが使える道具の大小というのはどっちもメリット・デメリットがあって、 個人的に考えるに両方ほぼ同価値で優劣は付けられないと思う。 : デフォルトの名無しさん [sage] 2016/05/27(金) 10:14:21.43 :wAuO+eAi > null 値は意図的にオブジェクトが存在しないことを表す値。 > undefined は未定義値。文脈上、初期化される前の値を表す。 論理的にはこれが正しい 構文が論理的ではないからnullが必要になる : デフォルトの名無しさん [sage] 2016/05/27(金) 11:52:08.31 :5O2HSGrs 真偽しか扱えない奴が多すぎるんだろ。 nullも、undefinedも、NaNもある理由があってあるんだから。 nullだけで良かったはずなんてアホみたいな事言われても困る。 nullを四則演算したら0として扱われるが、undefinedに四則演算したら、NaNになる。 NaNに四則演算しても、NaNのままだし、x=NaNでも、x==NaNはfalse。 当たり前。数値ではない事が確定しているが、「数値ではない」だけで、足し引きした結果は、「別の「数値ではない」もの」だから。 nullってのは、明確にnullだと代入ないし宣言されてるもの。 undefinedは、宣言すらされていないもの。 これを不要という人間は、そこまで考えないといかんシステム作ってないだけ。 mongoのdocumentを出し入れ返しれするapiなんか想定したら良いと思うが、少なくともnullで初期化されてるフィールドは使っても良い。 nullで初期化されていないundefinedなフィールドはもしかすると使うべきでないかもしれない。 それくらいの問題。 : デフォルトの名無しさん [sage] 2016/05/27(金) 12:16:24.73 :9jKz8E7p 取りあえず10億ドルの過ちをテメェで精算してから喋って、どうぞ : デフォルトの名無しさん [sage] 2016/05/27(金) 12:28:34.05 :AZKYjFu+ window.open(" ttp://localhost/1.html", "localhost", "width=100, height=100"); window.open(" ttp://localhost/2.html", "localhost", "width=200, height=200"); window.openでウィンドウを開くときに指定したサイズで開きたいんですが 2回目のwindow.openでサイズが1回目のウィンドウサイズのまま変わりません どうやってwindow.openで開いた時にウィンドウサイズを指定したサイズにできますか? : デフォルトの名無しさん [sage] 2016/05/27(金) 12:58:47.82 :5O2HSGrs nullable型の必要性だなんだって議論は、そもそもjsに明確な型がプリミティブなものしかないんだから無意味だろ。 : デフォルトの名無しさん [sage] 2016/05/27(金) 13:35:54.88 :mSvZp4nB レスは繰り返す : デフォルトの名無しさん [sage] 2016/05/27(金) 14:02:06.44 :61QydpaF イメージというのは各々で異なるものだと思うのだが、他者に意見するほどのものがそこにあるのだろうか…。 prompt も getElementById も「存在しない事を表す」という意味ではES2015の範囲内でおさまっている。 (ES2015的には prompt が空文字を返した方が返り値が String 型で統一されてそれらしいとは思うが、イメージの話なら多少の誤差は許容されるだろう。ここでは文字列が存在しない事を null で表している。) サインという表現を使うぐらいなら、それが定義済値(null)か未定義値(undefined)かで区別する方がES2015らしい。 関数が undefined を返すのは返り値が未定義(指定されていない)だからだ。 明示的にないことを表すなら定義済のnull が望ましい。 そうでなければ、その関数が初期値のundefined を返したのか、明示的にundefined を返したのかを区別できないだろう。 : デフォルトの名無しさん [sage] 2016/05/27(金) 15:20:53.00 :fXm66YRc だからそこまで考えないといかんシステムって具体的になんなんだよって 出してる例もデフォ値とか、Map返して列挙で十分なものばっかりじゃん : デフォルトの名無しさん [sage] 2016/05/27(金) 15:37:37.19 :fXm66YRc あんまり細かく突っ込んでもなんだけどさ、 言語実装側が使う分には便利、という言い分は事例もすぐ出せるし納得はできるが NaNになるとかのユーザー側の仕様ついては、 本来はundefinedの使用は全てエラーとすべき事で是とするものではないだろ : デフォルトの名無しさん [sage] 2016/05/27(金) 16:28:18.28 :5O2HSGrs うち医療系のシステム屋。 NaNも、undefinedも、nullも検査なんかだと戻す値としてあり得る。 サチった、検査項目に入ってない、検査としては行ったが、検体の問題などで結果は出なかった。 : デフォルトの名無しさん [sage] 2016/05/27(金) 16:41:32.15 :swGPgzcA 黙れゴミニートのくせに : デフォルトの名無しさん [sage] 2016/05/27(金) 16:46:54.76 :fXm66YRc そんなので反論するのはいいけど、実際医療システムでそういう仕様にする? しないっしょ? 全部専用の型用意すべきだし、未定義じゃ例外送出だし、 サチったらNaNとかInfinityじゃなくてエラー吐かせるし : デフォルトの名無しさん [sage] 2016/05/27(金) 16:47:23.18 :ftcnTlL4 > サチった、検査項目に入ってない、検査としては行ったが、検体の問題などで結果は出なかった。 これJavascriptで判定するの? : デフォルトの名無しさん [sage] 2016/05/27(金) 16:55:34.96 :fXm66YRc 飽くまで実装事例の話としての話だから、 そういうシステム実装はありえないとは言ってないよ 実際にあるなら黙るし : デフォルトの名無しさん [sage] 2016/05/27(金) 16:56:34.37 :7C5pluWz 戻す値としてあり得る……ってことは return NaN; return undefined; とかがあるってことか エラーコードでも例外ブジェクトでもなく : デフォルトの名無しさん [sage] 2016/05/27(金) 17:41:11.86 :5O2HSGrs すごい食いつきだな。 あるよ。ビューアで。 サーバから返すけど、トラフィックの都合上昔ながらの電文でそれを解釈してるのは足回り。 専用の型って言うけど、オブジェクトのメンバがnullかundefinedかはだいぶ違う。 違うよ。 解釈した結果をobjectに入れるけど、 解釈した結果そのフィールドが無ければ単にそのフィールドを持ってないオブジェクトになる。 エラーでも、例外でもなく結果だからね。 エラーはエラーで吐くよ。 : デフォルトの名無しさん [sage] 2016/05/27(金) 17:55:45.05 :7C5pluWz if (なんか結果ある) { obj.result = なにか(null含む) } return obj; ってことか 呼び出し側はそのobj.resultがundefinedなのかnullなのか判断する : デフォルトの名無しさん [sage] 2016/05/27(金) 18:10:16.56 :fXm66YRc なんだ表示だけか それも結局Mapと列挙で済むからundefinedいらんな : デフォルトの名無しさん [sage] 2016/05/27(金) 18:11:25.03 :ftcnTlL4 > サーバから返すけど、トラフィックの都合上昔ながらの電文でそれを解釈してるのは足回り。 サーバ側でコンテキストに応じたコードなりなんなりを生成して戻すべきだ と俺は思う : デフォルトの名無しさん [sage] 2016/05/27(金) 18:16:51.38 :fXm66YRc >専用の型って言うけど、オブジェクトのメンバがnullかundefinedかはだいぶ違う。 でもそのビュワーの元データ受け取る時はundefinedなんて入れてないでしょ? 有効活用の事例としてはかなり微妙でしょ わざわざ複雑な仕様にしてるように見えるもの : デフォルトの名無しさん [sage] 2016/05/27(金) 18:41:50.65 :zWRALPjL 文ではないけど、LexicalDeclaration や Expression に存在しない区切り文字として都合が良かったからかな : デフォルトの名無しさん [sage] 2016/05/27(金) 18:48:41.37 :fXm66YRc ただのCの名残っしょ : デフォルトの名無しさん [sage] 2016/05/27(金) 18:53:39.13 :5O2HSGrs 病院の回線ってそんなに贅沢に使えないんよ。 undefinedを入れないよ。 受け取るときにと言うより、受け取っていないから、そのキーがundefinedで、nullチェックではなくて、undefinedチェックしないとならん。 台帳表示でも何でも良いが、患者/日/項目のピンポイントで見た時に、値/失敗/結果無しが取れる必要があるってこと。 RDBで言うと、 ・行自体が存在しない ・行の中身がNULL ・行の中身に有意な値が入っている と似たようなもんだよ。 : デフォルトの名無しさん [sage] 2016/05/27(金) 18:56:39.91 :fXm66YRc それって初期値のビューに対して、そのまま列挙して設定すればいいだけだと思うけど、 わざわざ未定義と判定する事で利便性が高まる事あるの? : デフォルトの名無しさん [sage] 2016/05/27(金) 19:02:06.07 :5O2HSGrs expression(opt) を2つ以上取るからで、expressionとexpressionの区切りはセミコロンだからじゃねえの? 言語仕様に書いてあったと思うけど。 : デフォルトの名無しさん [sage] 2016/05/27(金) 19:03:11.34 :5O2HSGrs そのまま列挙して設定したものを、 未定義と判定して「未検査」と表示する話をしてるんだが。 頭おかしいの? : デフォルトの名無しさん [sage] 2016/05/27(金) 19:04:16.73 :fXm66YRc もしかして、相手の出力データ型が不整合な事があり、 その型チェックをJS側がやってるってこと?ひえー それならまあ必要といわれても仕方ないか : デフォルトの名無しさん [sage] 2016/05/27(金) 19:08:24.93 :fXm66YRc ???? そのサービスから受け取ったrowにプロパティがなければ未検査なんでしょ? なら普通に列挙していけば設定されないデータを、未定義か判定する必要ないっしょ? それをわざわざなんで判定するの? : デフォルトの名無しさん [sage] 2016/05/27(金) 19:15:05.42 :fXm66YRc 簡単にいうと、初期値のビュー項目を「未検査」にしておいて、 列挙の度に設定していけば済む話でしょ? わざわざ複雑にしてるように見えるけど : デフォルトの名無しさん [sage] 2016/05/27(金) 19:18:13.93 :IDoL/fjn キチガイの共演 : デフォルトの名無しさん [sage] 2016/05/27(金) 19:21:01.02 :7C5pluWz たぶん、 [{"検査項目":"視力","結果":1},{"検査項目":"聴力","結果":"100db"}] っていうデータじゃなくて、 {"視力":1,"聴力":"100db"} っていうデータなんじゃないかな(実際はjsonじゃないんだろうけどとりあえず分かりやすさの為ね) だから {"視力":1} ってデータがあると、JavaScript側は kensa.tyoryokuがundefinedになるから 表示する際はundefinedチェックをするっていいたいんじゃないかな? ※その場合俺ならinを使うかも : デフォルトの名無しさん [sage] 2016/05/27(金) 19:29:01.92 :fXm66YRc うん…その場合にundefinedのチェック付ける必要ないよねと Viewを初期化し、各カラムに対応するView側項目を一個ずつ設定すれば、 無駄な処理もなくて効率いいでしょ? : デフォルトの名無しさん [sage] 2016/05/27(金) 19:37:17.42 :fXm66YRc イメージとしては、Object.assign({初期値},{取得値})とすれば十分じゃないか? それを敢えてundefinedを確認するようにするのは、 わざわざ複雑にしてるように見えるけど 言ってる事が伝わった上で、何か自分がわかってない問題があるのか? : デフォルトの名無しさん [sage] 2016/05/27(金) 19:47:32.72 :JIhds0M1 ちになみにxがundefinedかどうかを調べるベストな方法は (x === void 0)でおk? : デフォルトの名無しさん [sage] 2016/05/27(金) 20:07:52.97 :5O2HSGrs あ、そうそう。 ただ、何人も並べたり、何日も並べたり、そういう事する。 inでも良いね。コスト低そうだし。 、で既に俺言ってるけど。 その中で、ちゃんとオブジェクトをマージするか横着するかって話。 : デフォルトの名無しさん [sage] 2016/05/27(金) 20:17:12.65 :Dt+fFMyq ReferenceError になるケースを除けばそう : デフォルトの名無しさん [sage] 2016/05/27(金) 20:27:35.45 :fXm66YRc いや別にオブジェクトのマージの話じゃないんだけど まあどちらにしろ必要ないっしょ? : デフォルトの名無しさん [sage] 2016/05/27(金) 20:37:53.46 :fXm66YRc まあ正直納得いってないけど 実際使ってる実装があるならundefined値も必要ってことでいいやもう あとで消化しよう : デフォルトの名無しさん [sage] 2016/05/27(金) 20:38:54.16 :5O2HSGrs どーしても必要ない事にしたいんだな。 手入力や、他システムから飛んでこられた時に、画面定義にもデータにもない、ってのはどう判断するのかね。nullを取りうる値を持ってんのに。 仕事として開発したこと無いんじゃねえの? 自分の無知が認められない人間とはみっともないもんだ。 : デフォルトの名無しさん [sage] 2016/05/27(金) 20:39:37.88 :5O2HSGrs undefinedを値として必要としてる訳じゃねえよ。 お前マジで頭おかしいんじゃねえの? : デフォルトの名無しさん [sage] 2016/05/27(金) 20:45:22.04 :Dt+fFMyq ID:5O2HSGrs がいいたいのはの事かね > undefinedは、宣言すらされていないもの。 これがプロパティの事を指すなら in 演算子か Object#hasOwnProperty で解決できるという事をでいってるんだろうけど、マージ云々は何を言いたいのかわからない : デフォルトの名無しさん [sage] 2016/05/27(金) 20:50:00.83 :fXm66YRc なぜ急に煽る? まあ言わせてもらうけどね、本当に仕事でやってるならそんなクソ仕様「ありえない」だよ 「医療システム」用なら本来は別途に未検査を表す値を用意するべき内容 でも実装してるってならそうなんだろう : デフォルトの名無しさん [sage] 2016/05/27(金) 20:51:42.45 :fXm66YRc つか医療用でそんなLAMPみたいなシステム見たこと無いけどね… : デフォルトの名無しさん [sage] 2016/05/27(金) 20:56:48.42 :5O2HSGrs そうそう。 検査はしたけど、まだ結果は出てない、だとか、 例えば尿検査だと、尿少なすぎて検査結果出せませんでした、って結果はnullが入ってる。 検査進捗は別に持つから。 それを、テーブルやらグラフに出すときに、 患者一日、みたいなテーブルにガサッと載せたいのであれば、 先に daily:{ koumokuA:"", koumokuB:"", } みたいなオブジェクト作っといて、その上に、ret.filter(hasKeyIn(daily)).map(convToStr)したものをマージしちゃえば、表は簡単に書けるよねって話。 グラフならconvToScaleとか、何とでもなる。 : デフォルトの名無しさん [sage] 2016/05/27(金) 21:00:52.88 :5O2HSGrs クソ仕様w その、まぁ、未検査ではないんだが、結果の無い状態を現す値、がnullなんだけど。 何故別途必要なのか聞いてみたい。 さらに、その値が永劫、その値を返す検査が現れないか、と。 : デフォルトの名無しさん [sage] 2016/05/27(金) 21:03:22.58 :5O2HSGrs LAMPと全然関係ないと思うが。 何社か医療渡ってるけど割と普通。 : デフォルトの名無しさん [sage] 2016/05/27(金) 21:06:38.13 :Dt+fFMyq その実装はわかるけど、の主張と結びつかない の「undefined と比較する必要ないよね、in 演算子で十分だよね」に対してで「オブジェクトのマージ」を仄めかしてるよね マージ処理なら in 演算子や hasOwnProperty で十分に実装できると思うけど まあ、ディープマージでなければ Object.assign で十分ではあるけど : デフォルトの名無しさん [sage] 2016/05/27(金) 21:08:37.38 :5O2HSGrs 物にもよるんよ。検査って。 2項目以上帰ってくるものの、片方だけ表させたいとか。 : デフォルトの名無しさん [sage] 2016/05/27(金) 21:14:25.30 :fXm66YRc もう一回見てきたけど、 控えめに見てもundefinedの計算結果がNaNという部分は 「未定義値」という値を明確に容認してるよ 少なくともhasOwnPropertyだけで済むと言ってるのとは相容れないし って…もう最初から何も問題なかったってことでいいや 面倒くせえわ : デフォルトの名無しさん [sage] 2016/05/27(金) 21:18:25.17 :Dt+fFMyq よくわからない プロパティが存在しないことを判断する方法は大きく分けて3つある 1. obj.prop === undefined 2. !('prop' in obj) 3. !(obj.hasOwnPropery('prop')) 1. はあなたが推奨する方法だけど、obj.prop = undefined にも反応する 2. や 3. でも問題ないし、そっちの方が厳密 ここで 1. でなければマージできない理由は? : デフォルトの名無しさん [sage] 2016/05/27(金) 21:24:59.90 :fXm66YRc いやお前自分で >そのまま列挙して設定したものを、 >未定義と判定して「未検査」と表示する話をしてるんだが。 >頭おかしいの? と言ってるし 本来この未検査ってのはリクエストに対して、ちゃんと定義されたデータを返す物だろ、 適当なWeb環境じゃないんだから、ビュー側で判別して表示とかありえないだろ つか取得時のコンテキストどうなってんだよ : デフォルトの名無しさん [sage] 2016/05/27(金) 21:26:20.32 :Dt+fFMyq ちなみに、Object.assign は [[GetOwnProperty]] でプロパティをマージするね Polyfill も当然、Object#hasOwnPropery を使う 条件別マージだから Object.assign を流用できないとしても根幹となるマージ処理は同じで問題ないと思うんだよね ttp://www.ecma-international.org/ecma-262/6.0/#sec-object.assign : デフォルトの名無しさん [sage] 2016/05/27(金) 21:30:34.70 :5O2HSGrs 未定義じゃないんだって。さっきの例みたら分かるだろうけど、数値に変換できない検査結果はNaNにしてるの。 0/1で持ってて、インフルエンザの検査結果を何を血迷ったかグラフで見て、陰性と陽性がピコピコ蠢くグラフ見て楽しいか? 単に、「である」を否定を使って比較しない、ってコーディングルールの問題。 : デフォルトの名無しさん [] 2016/05/27(金) 21:32:08.16 :fXm66YRc いやお前は最初の方で undefined との四則演算を容認してただろ つまり値としての undefined が必要と説いてる こっちはその値としてのundefinedがいらんとさんざんそれを否定してるわけ : デフォルトの名無しさん [sage] 2016/05/27(金) 21:34:19.11 :5O2HSGrs 未定義は未検査、検査したけど何らかの結果で…って話だよ。 ある検体検査の中で、結果無しと返してるものに対して、電カル側が持ってる項目リストをピンポイントで開いてきたりするんだよ。 適当なWebじゃねえからいちいち処理してんじゃねえか。 : デフォルトの名無しさん [sage] 2016/05/27(金) 21:35:39.58 :5O2HSGrs してないから。 四則演算するとこうなるから、四則演算が成り立たないものは正しく判定しなきゃね、そのためには、null,0,undefined,NaN全部扱い違うよねって言ってんじゃん。 : デフォルトの名無しさん [sage] 2016/05/27(金) 21:44:03.54 :h7QAH+sV うるせえ消えろゴミ : デフォルトの名無しさん [sage] 2016/05/27(金) 21:44:10.18 :Dt+fFMyq > 単に、「である」を否定を使って比較しない、ってコーディングルールの問題。 そのコーディングルールの話を初めからいっておけばここまでこじれなかったんじゃないの? 端的に言ってあなたは説明が下手だと思う 自分の主張が伝わらなくて憤慨している様子は伝わってくるけど、原因のほとんどはあなたの中で当然と思うコーディングルールが皆に伝わってないことにあるんじゃないかな で ! (否定)を使っているのが気になるけど、何かしらのあなたなりのコーディングルールがあるんだろうね 自分のコーディングルールが万人受けするとは限らないことは気に留めておくといいと思う : デフォルトの名無しさん [sage] 2016/05/27(金) 21:46:10.68 :fXm66YRc それって本来は未検査、結果待ち、結果無しって 別の値を定義して分けるべき内容でしょ? 悪いけど普通にクソ仕様だと思います 四則演算できると言ってる時点で値として認めてる事になるよね、違う? : デフォルトの名無しさん [sage] 2016/05/27(金) 21:48:08.24 :UggnfNpm undefined | null の等価が必要な糞みたいな 構文書いているんじゃないよ はっきり言ってゴミだ : デフォルトの名無しさん [sage] 2016/05/27(金) 21:48:48.08 :fXm66YRc いや、違うかそうは言ってないんだな もうちょっと待ってくれ : デフォルトの名無しさん [] 2016/05/27(金) 21:52:05.84 :OuviwO3+ がいきなり何を言ってるのか良くわからない件w : デフォルトの名無しさん [sage] 2016/05/27(金) 21:53:49.64 :7C5pluWz 俺もがなにをいってるかわからんwww : デフォルトの名無しさん [sage] 2016/05/27(金) 21:54:15.57 :Y3oSSTyA 一人で10も20も連投するようなキチガイ説明云々以前に頭おかしいだろ : デフォルトの名無しさん [sage] 2016/05/27(金) 21:59:59.70 :/K+aNa26 こういうやつって自分より明らかに上のヤツが面と向かって話きいてやるから出て来いっていうと出てこないんだよな 所詮その程度のカス : デフォルトの名無しさん [sage] 2016/05/27(金) 22:00:29.40 :fXm66YRc >nullも、undefinedも、NaNもある理由があってあるんだから。 >nullだけで良かったはずなんてアホみたいな事言われても困る。 これで適切に処理しましょうって事は、undefinedは使用禁止にしても良いでしょ? 別にhasOwnPropertyとかinで検査する事になるんだから その事には同意してるの? : デフォルトの名無しさん [sage] 2016/05/27(金) 23:20:18.13 :Ajerz5wW おっと?ちょっと見立てが狂った。まあそれはさておき、回答ありがとう。 ちなみにリクエストある? 見立てが狂っていたので、俺が勝手に「君にとって有益」だと思っているのもゴミでしかないかもしれんし。 君はこの一連の会話には参加してないと思うけど、こいつらが駄目な点を指摘しろと言われればできるけど。 放置しておけば収まるかと思いきや、そういう感じでもないし。 ただ一番カスなのは、単発で煽っている奴だと思うが。 俺個人のスタンスは、この手の技術的応報は「気が済むまでやれ」だからね。 : デフォルトの名無しさん [sage] 2016/05/27(金) 23:21:03.48 :Dt+fFMyq のマップオブジェクト的なものの判定処理で最終的に行き着くのは 3. の hasOwnProperty obj.prop = undefined とか、NaN の比較とか、定義順の列挙とか、諸々の問題は new Map で解消される ID:5O2HSGrs が作る医療システムは構造が複雑なので単純なオブジェクトマップで対応するよりも、独自のインターフェースを作る方がいい ttps://jsfiddle.net/oo1777o0/ : デフォルトの名無しさん [sage] 2016/05/27(金) 23:51:31.16 :64E4c/Qq Rのデータでも、null, NaN は理解できるけど、 undefined はプログラムのバグじゃないの? それは、アカン DBでも、null, undefined を加えて、4値論理だと、SQLが複雑化して、バグが増える : デフォルトの名無しさん [sage] 2016/05/27(金) 23:56:13.71 :10EzBfKp undefinedは同じ関数名でsetter/getterを作るときに使うな。 たとえば、obj.data('name') だと getter、 obj.data('name', 'hoge') だとsetter。 nullだけいいかと思うかもしれないけど、 obj.data('name', null)という風にnullを代入するsetterがあるかもしれないので nullとundefinedは区別がついたほうがいい。 : デフォルトの名無しさん [sage] 2016/05/28(土) 00:01:17.19 :2CcTCqQn 一番のカスは質問でも回答でもねえ話を続ける場違いなカスに対し 「俺個人のスタンスは〜」とかドヤ顔で言ってしまう脳味噌馬糞野郎だから安心して : デフォルトの名無しさん [sage] 2016/05/28(土) 00:03:07.76 :lIlkJ1va null と undefined は区別すべきだと思うけど、その場合はarguments.lengthで判定するのが普通 : デフォルトの名無しさん [sage] 2016/05/28(土) 00:15:41.95 :Q7pM0tvA おねがいします : デフォルトの名無しさん [sage] 2016/05/28(土) 00:17:23.16 :U+yYkFDL argumentsって展開できる? rubyでa = [0, 1, 2] def f(a, b, c); endに対して f(*a)できるようなやつある? もしくは g = funciton () {/*arguments使う処理*/}; f = function () {/*g()にargumentsを渡す何らかの手段*/}; gを変更せずにf側の工夫だけで何とかなればいいんだけど : デフォルトの名無しさん [sage] 2016/05/28(土) 00:23:14.01 :UVJrtMwg 次の開く前に前のcloseするとか : デフォルトの名無しさん [sage] 2016/05/28(土) 00:24:56.37 :6huP5UCX 単発キチガイって なのか? そうでなければここまで粘着する意味が分からん。 こいつらは質問にも答えた上で「技術的に」やり合ってるんだから、 文句言う必要も筋もないと思うが。 このスレがこの調子なのはいつものことだし。(少なくとも1年以上前からこう) 単発キチガイが「人格的な」批判だけをしている方がうざいし、 気に入らないのなら出ていけばいいだけだろ。 : 178 [sage] 2016/05/28(土) 00:28:43.02 :U+yYkFDL 自己レス var g = function () {alert(arguments.length);}; //var f = function () {g(arguments);}; // ダメ var f = function () {g.apply(this, arguments);}; // これでいい f(0, 1, 2, 3); : デフォルトの名無しさん [sage] 2016/05/28(土) 00:45:35.77 :F7SYakCj ああーいい感じに簡潔にまとまってていいね 自分もMapと専用型派だから、そのまま便乗させてもらいたい : デフォルトの名無しさん [sage] 2016/05/28(土) 00:48:21.69 :lIlkJ1va Rubyは知らんが、Function#apply の事か? : デフォルトの名無しさん [sage] 2016/05/28(土) 00:50:15.08 :F7SYakCj 俺なら考えるの面倒だからpostMessageでリサイズしちゃう : デフォルトの名無しさん [sage] 2016/05/28(土) 01:21:36.93 :4RY8P4hk 10は、評価した結果falseでなければ、だよ。 undefinedである、もしくは、nullであれば、とはちと違う。 当然と思うコーディングルールというか、xxx==null、と書いておいて、実はnull以外にもundefinedも判定されます、という理屈の方が明らかに間違ってる。 だから、それは状態として持ってるの。 結果の話なんだよ。 状態と結果をごっちゃにしてはいかん。 結果がある見込みすら無い、少なくとも現時点ではまだ無いか有意では無い、有意な結果がある、のたった3つの、結果の値なの。 クソ仕様はお前の頭。 だから、してはいけないって言ってるんじゃん。 undefinedは状態で、nullは値なんだよ。 使用禁止って何だ?お前何言ってるか全く理解してないのか? 代入してないから、undefinedで、別にundefinedを突っ込んでる訳ではない。 apply : デフォルトの名無しさん [sage] 2016/05/28(土) 01:30:01.42 :4RY8P4hk 確かに綺麗だと思う。 進捗と結果は分けた方が良いね。 進捗は、同じ検体でも検査によって異なるフェーズを辿るし、ひとつの検査で2つ以上の結果が帰ってきたり、2つ以上の検査でひとつの結果が帰ってくるので、そいつらは分割する必要がかる : デフォルトの名無しさん [sage] 2016/05/28(土) 02:00:19.58 :F7SYakCj 未定義という概念だけが必要だから、jsのundefinedはいらないよね 言ってる意味わかる? というか >当然と思うコーディングルールというか、xxx==null、と書いておいて、実はnull以外にもundefinedも判定されます、という理屈の方が明らかに間違ってる。 ってfalsy判定するって言ってる人がそれ言う?酷すぎでしょ >状態と結果をごっちゃにしてはいかん。 >結果がある見込みすら無い、少なくとも現時点ではまだ無いか有意では無い、有意な結果がある、のたった3つの、結果の値なの。 >クソ仕様はお前の頭。 いや糞仕様だよ普通に つかなんでいちいち煽りを入れてくるかね… 俺は散々その未検査とかの状態をundefinedじゃなくて、 サービスの値として別で定義するべきと言ってるわけ 電カル云々ってのは結合って意味でしょ? その結合するにしても、「undefinedを判定に使う」なんてのはやるべきじゃないでしょ? アプリケーションレベルの話なのだから、きちんと「未検査」「なし」という値を定義すべきでしょ? きちんとここまで理解できてる? : デフォルトの名無しさん [sage] 2016/05/28(土) 02:08:55.19 :F7SYakCj というか実際はどうかはしらないけどさ、 説明聞く限りだと、明らかにまともなシステムじゃないよ? そんなのをお手本として語っちゃうのは駄目だと思うよ : デフォルトの名無しさん [sage] 2016/05/28(土) 02:42:07.52 :F7SYakCj もうこの話題は埒が明きそうにないからレスしないことにする すみませんでした : デフォルトの名無しさん [sage] 2016/05/28(土) 03:04:53.76 :4RY8P4hk よほど指摘されたのが悔しかったんだなぁ。 らちがあかないおつむでご苦労なこった。 おつかれさん。 : デフォルトの名無しさん [sage] 2016/05/28(土) 03:09:13.25 :4RY8P4hk undefinedという状態を使う、その行が無いという情報を使う、開始電文+データ長0+データ(ゼロバイトの)+終了電文。 全部、有意な「何もない」という情報なんだけどな。 0を発明する前の、指で数を数える原始人みたい。滑稽よね。 : デフォルトの名無しさん [sage] 2016/05/28(土) 03:22:22.32 :4RY8P4hk jsのundefinedは要らない、もよくわからんな。オブジェクトとして存在していなくてもよい、予約語であれば良い、とでも言いたいんだろうか。 それとも、概念が必要ないんだろうか。 phpのissetも、perlのexistsも、Mの$Dも、はたまたcのプリプロセッサマクロのifdefも要らんというか、使いこなせないんだろうな。 : デフォルトの名無しさん [sage] 2016/05/28(土) 03:43:50.37 :/MxDZHtX すでに「nullという値」という概念が存在してるんだから 「何もない」ものと区別する必要があるだろ。 : デフォルトの名無しさん [sage] 2016/05/28(土) 04:51:05.16 :BWGRJTpr 宇宙の真理として絶対に必要あるものでもないし、必要ないものでもない。 JS界では有意義に使い分けられてるのだからあってもいいと思う。 無い言語では別の機能で代替してそれは成り立ってるのだからなくてもいいと思う。 ただそれだけの無意味な議論。 : デフォルトの名無しさん [sage] 2016/05/28(土) 05:52:30.30 :/MxDZHtX C言語なんかint型に数値以外入らないから -1で代用したりでなんとかなってるしなw ないならないで工夫次第で何とかなるが、 あれば楽になるっていうものなのだろう。 : デフォルトの名無しさん [sage] 2016/05/28(土) 09:38:09.38 :PPUGo99f 専門家でない自分が検査の詳細を知る由もないんだけど、必要であれば Interface を拡張するか、上位 Interface を作ればいい 例えば、検査フェーズ毎に結果が欲しかったら、上位に Interface MedicalCheckPhase を作る ttps://jsfiddle.net/oo1777o0/1/ 患者毎に管理したければ更に上位に Interface を作ればいい --- あなたの管理法が否定されているのは「調査予定の有無」「調査の実施状況」を一つのプロパティにまとめているから switch (obj.prop) { case undefined: console.log('本件は調査予定がありません'); // プロパティが存在しない === 調査予定そのものがない break; case null: console.log('本件は調査予定ですが、未調査です'); // プロパティが存在する === 調査予定がある / null === 未調査 break; default: // なにがしかの処理 } これは「調査予定の有無」「調査の進捗状況」の2つを別々のプロパティで管理した方がいい MedicalCheck でいう implement, progress がそれにあたる : デフォルトの名無しさん [sage] 2016/05/28(土) 09:48:10.32 :UVJrtMwg まったく同意ではあるんだけど で > 病院の回線ってそんなに贅沢に使えないんよ。 ってあるから やむをえずそうしたってことがあるのかねって思ってた : デフォルトの名無しさん [sage] 2016/05/28(土) 10:07:17.12 :oSugN8gY undefined は後で拡張し易くするためにある。 undefined 処理のロジックを入れておけば、新たなフィールドが追加されても プログラムの修正はそのフィールドを直接扱う所だけで済む。 ゆえに、決して拡張されない領域内では undefined も不要になる (null と undefined はむしろ全然関係ない話) という理解でok? : デフォルトの名無しさん [sage] 2016/05/28(土) 10:17:45.97 :PPUGo99f > 10は、評価した結果falseでなければ、だよ。 がの "「である」を否定を使って比較しない" のコーディングルールと接触しないのか、って事 「hoge.a が truthy である」の否定を使って比較しているよね? if 文は内部的に ToBoolean を通して true と比較するから「肯定の否定で比較」してる if 文に限っては ! を使ってもいいルールなら if (!obj.hasOwnProperty('prop')) も許可しなければおかしい あと、改めて考えると if (obj.hasOwnProperty('prop') === false) で肯定式のみのコーディングが成立するから hasOwnProperty を敬遠する理由がなくなるね : 196 [sage] 2016/05/28(土) 11:11:02.33 :PPUGo99f 「実施の有無」はInterfaceの内部処理として隠れるから実際のところはそれ程コード量は増えないと思うんだよね Interfaceを作ればその後のコード量が少なくなるから相殺されるか、逆にコード量が少なくなる場合もあると思う このぐらいのコード量ならzlib圧縮してminifiedしたら十分に小さくなるし : デフォルトの名無しさん [sage] 2016/05/28(土) 11:20:22.38 :6huP5UCX おい、一応言っておくけどももゴミだぞ。 それから、お前は概ね間違ったことは言っていない。 お前ら、設計が出来るつもりなのなら、OPPのスレでも見てこい。 お前らにはいい教材になるかもしれん。 ttp://echo.2ch.net/test/read.cgi/tech/1463663267/ : デフォルトの名無しさん [sage] 2016/05/28(土) 12:01:27.82 :oFxbpGnE ここは質問スレッドであって議論スレじゃない スレタイも読めない阿呆は出て行ってくれ : デフォルトの名無しさん [sage] 2016/05/28(土) 12:12:29.14 :8NhNw/7c しょーもない宣伝するな しかもOPPて : デフォルトの名無しさん [sage] 2016/05/28(土) 13:07:01.36 :6huP5UCX 単発キチガイ粘着乙 お前の回答はどれなのさ? こいつらは回答してるし、質問は掃けているのだから、回答もしていない奴が口を挟む筋はないよ。 最近、お前みたいな「筋をわきまえないキチガイ」は2ch一般に増えたけどね。 : デフォルトの名無しさん [sage] 2016/05/28(土) 13:29:38.68 :GZb66p/J 場を弁えないキチガイの方がいらねえは : デフォルトの名無しさん [sage] 2016/05/28(土) 15:14:44.57 :h5j9D0+l すまんが、否定派は結局何が主張したいのかがわけわからん。 true/falseはいらない、1と0でいいと言ってるのと同じでしょ。 無くてもどうにかなるからという論を散々されても、 無いほうがいいということにはならないからね。 でも最初の話はそうじゃなかったでしょ? JSにおいてnullとundefinedの関係及び立ち位置がやや難しいという話だったでしょ。 undefinedが要るか要らないかのような単純な話じゃないし、 今からJS2を作ろうというのでもないのだからそんな話をしても全く意味が無い。 それよりも関係及び立ち位置をここで、またこれから振り返って整理していこうというのが 正しい論議だと思うよ。 : デフォルトの名無しさん [sage] 2016/05/28(土) 15:34:39.73 :7z0JA/T2 const obj = { age: 1, f: () => { console.log(this.age); } }; obj.f(); functionじゃなくて() =>で関数を書いた時にf()の中からageの値を取得する方法を教えてください : デフォルトの名無しさん [sage] 2016/05/28(土) 16:01:02.90 :jKO2qa04 ソースコードはヒューマンリーダブルなので 自己満足で解決 : デフォルトの名無しさん [sage] 2016/05/28(土) 16:28:58.11 :6huP5UCX その場合はfunctionと書く方が正解 : 196 [sage] 2016/05/28(土) 16:47:58.29 :PPUGo99f 一緒くたにされてるけど、別に undefined 不要は唱えていない 自分が主張したのはプロパティが存在しない事を確認する為に obj.prop === undefined を使うべきではない、という事と ID:5O2HSGrs が考える医療システムコードの問題点だけ null, undefined の違いはで説明したことが全て undefined 比較はほとんどの場合において不要 : デフォルトの名無しさん [sage] 2016/05/28(土) 16:53:14.43 :F7SYakCj すまん レスしないと行ったけどむかついたから言わせて なぜそう煽るの?しかもそのレスってこっちの内容まともに読めてないよね? まず未定義の判定操作がいらないとは言ってないよ 未定義を値として扱う事全般が駄目と言ってる まず大前提として、こっちは端的にBoolean、Number、文字列やユーザー定義の列挙型と、 Nullable、Undefinable(?)な型はそれぞれ直交した概念ときちんと分けて考えてるわけ (NaNはNumber型の値の一つとして見てるから、その点でそちらとは考えが違う) で君の言ってるシステムは本来アプリケーションの1つの型(もちろん値が直交した型なら複数)として実装する物を 変数の未定義状態を表す型(Undefineable)に対し、 なぜかアプリケーション側の定義値の一つをぶっこんでいるでしょ? それ普通に糞仕様だよねって話 理解できてる? 違うと言うならズレた煽りを入れずに、何が違うか具体的に言ってね? : 196 [sage] 2016/05/28(土) 17:01:36.87 :PPUGo99f obj.age で可能だけど、そこでアロー関数を使う意図が疑問 アロー関数はthis値を変化させないときに使うもの : 196 [sage] 2016/05/28(土) 17:22:13.49 :PPUGo99f お疲れ様 多分、彼( ID:4RY8P4hk )はあなたの意見を誤読してるだけだと思う あなたの主張「の状況でundefinedと比較する仕様(設計)がNG」 彼が解釈したあなたの主張「JSにundefinedは必要ない」 : デフォルトの名無しさん [sage] 2016/05/28(土) 17:31:05.73 :B2G67qEl nullは確かにESの範囲から追い出すことは容易。 でもってアプリレベルでは共通するシンボルを使えばいいとも考えられる。 但し、1つ理由のためnullは存在価値がある。 それは偽性だということ。 では偽性のシンボルを自由に作れれば良いのかというとそれは微妙。 偽性な値というのは各型に1つくらいしかなく限られてるからこそ、 その性質を活用しやすいと言うこともある。 nullはだいたいオブジェクト型の唯一な犠牲の値としての立場を振るう。 よって、nullという存在を用意しておくのは、 シンプルや汎用的にし過ぎて利便性を犠牲にすることがない 良いバランスを狙えていると思う。 : デフォルトの名無しさん [sage] 2016/05/28(土) 17:37:37.39 :F7SYakCj すまないありがとう、落ち着いたよ まさにおっしゃるとおりなので、に便乗させてもらいます よく考えたらコードに一切落としてないから、人に強く言える立場でもないなあ… : デフォルトの名無しさん [sage] 2016/05/28(土) 18:51:22.49 :bfGuDmoK がなぜ今そんなことを言い出したのか意味不明。 : デフォルトの名無しさん [sage] 2016/05/28(土) 19:13:15.00 :B2G67qEl がなぜそんなことを気にするのかが意味不明。 : デフォルトの名無しさん [sage] 2016/05/28(土) 19:21:59.51 :4RY8P4hk ぶっこんでないから、undefinedなんだけど、まぁいいや。 定義されていない、を定義してるっておかしいと思わないのかな。 クソ仕様は、undefinedを代入してる、って誤解してるババロアと取り替えても支障のないレベルの脳ミソだと思うけどね。 : デフォルトの名無しさん [sage] 2016/05/28(土) 19:59:16.01 :1ecGmLwK ババロアバカにするとか許さないんだけど てめえのあたま埃でも入ってんじゃねえの : デフォルトの名無しさん [sage] 2016/05/28(土) 20:06:57.74 :6huP5UCX いや違うぞ。 の主張は、「undefinedを代入するな」ではなく、「undefinedを有効値(意味のあるもの)として使うな」だ。 プログラミング言語上のundefinedに対し、アプリケーション上の意味をオーバーロードしていることを問題視している。 といってもこの表現では君には伝わらないだろう。そこでさらに平易に言い換えると、 例えば、Ruby等、undefinedがない言語で組んだ時、 アプリ上で「未実施」「成功」「失敗」「情報無し」の4値状態が必要であれば、 当然 true/false/nil では足りないから何らかの対策をするだろ。 それをJavaScript(4値状態可能)であったとしてもやれと言っている。 まあ君はNaNも導入しているので5値状態まで行けるのかもしれんが、どこまでそれやるの?という話になる。 : デフォルトの名無しさん [sage] 2016/05/28(土) 20:14:47.49 :19MLvfJY よかったこんな阿呆が身近にいなくて : デフォルトの名無しさん [sage] 2016/05/28(土) 21:13:45.88 :/MxDZHtX Scalaのnull/Nothing/Nil/Noneはやりすぎなのか? ttp://bleis-tift.hatenablog.com/entry/scala-null-none-nothing-nil 似たような意味でも違う概念なら違うものに割り当てるべきだよ。 : デフォルトの名無しさん [sage] 2016/05/28(土) 21:22:05.08 :ynWa4gys undefinedはcのdeleteと同じと思った方がいい 変数の初期化をしたいけど、いれる物がない時はnullを入れるべき undefinedを入れるのは間違っている : デフォルトの名無しさん [sage] 2016/05/28(土) 21:34:27.07 :ubVCvz+a お願いだから書き込むのをもうやめてくれ 何いきなり「cのdelete」とか言い出しちゃってるの? : デフォルトの名無しさん [sage] 2016/05/28(土) 21:42:53.12 :ynWa4gys まだ一回しか書き込んでいない : デフォルトの名無しさん [sage] 2016/05/28(土) 21:43:39.30 :LvedKHwv 俺c/c++メインだが、その例えは意味がわからん : デフォルトの名無しさん [sage] 2016/05/28(土) 21:44:56.20 :ynWa4gys 俺がいいたいのは、undefinedをフラグや何もないという意味を表す物として使うなと言う事 c言語で、フラグの為にnullを代入することはあっても、deleteで消すことはないだろ? : デフォルトの名無しさん [sage] 2016/05/28(土) 21:50:45.87 :LvedKHwv 言いたいことはわかったけど、それと例えが全くマッチしてない気が… : デフォルトの名無しさん [sage] 2016/05/28(土) 21:51:00.22 :ubVCvz+a cでnullとかdeleteとかお前頭の病気か? : デフォルトの名無しさん [sage] 2016/05/28(土) 21:52:08.66 :UVJrtMwg 周回遅れ感になんかほっこりしたw : デフォルトの名無しさん [sage] 2016/05/28(土) 22:55:04.19 :4RY8P4hk 何もない事を現すものに、何かを使うと、それは、「何もない事を現すもの」という実体になっちゃうでしょ。 1つ2つの欠けうるフィールドにであれば意味はあるだろうけど、 数千の項目のうち必要なものだけが帰ってくるというものに対して、 この項目は今回入ってません、って通信する意味はあるのかな。 : デフォルトの名無しさん [sage] 2016/05/28(土) 23:20:30.96 :6huP5UCX とりあえずデータ取得はJSONでサーバからもらって、フォーマットはみたいなのなんだろ? つまりネットワークバンド幅をケチるためにundefinedは最初から抜けていると。 そこまではその実装で正しいと思うぞ。問題はその先だ。 あとついでに答えも言っておくと、どっちの実装でも一長一短あるんだよ。 だからそれぞれの利害得失を分かった上でその実装にしているのならそれでいいんだよ。(これを設計という) ただ、お前らどちらも「俺の方が正しい」と思っているだけで、 相手側の実装も含めての利害得失をさらっと言えないだろ。 それじゃ駄目なんだな。 なお、俺ならお前らの中間の実装にする。でも君達はこれも想像できないだろ? 君達には実装時のオプションが足りてない。 まあ、でもこういう風に議論することは多分お互いのためになるだろうから、頑張れ。 : デフォルトの名無しさん [sage] 2016/05/28(土) 23:31:47.42 :viYscYES 滑稽やなこいつw : デフォルトの名無しさん [sage] 2016/05/29(日) 00:46:26.74 :0W+JhSU+ ネットワークからもらうのは通信電文だよ。 通信電文自体イメージできてないかもしれないけど。 意味のない中間の実装とか要らないの。 相手側の実装、結果の値の入っていないものに、わざわざ結果が入ってませんと入れていく、に文句つけるとすればただ一つで、 結果が入っていないことが問題になるのは、その結果を使用しようとするときで、電文をパースしてオブジェクトに乗せた段階では、 どれに結果が入っていて欲しいか、なんて事は把握してないんだよ。 だから、足回りが結果が入ってなかったと設定する事はできないし、 「知りうるすべてのフィールドに対して、これは入っていなかった」って設定する事も無駄すぎるの。 知りうるすべてのフィールド、も保守管理していくとなると、永遠に保守を続ける必要が発生するよね。 そうなると、話はシンプルで、貰っていない≒入っていない、の構造を維持するのが一番よね。 あと、検査結果に対して、(今のところ)結果無しを何か定数(文字列でも)で持つのはよろしくない。 その後、新しい検査結果として、同じ、またはとてもよく似たものが入ってきた時に、それと鑑別するのが不可能だったり後からデータコンバートが必要だったり、エスケープしていく必要があるよね。 であれば、データを解釈した結果未来永劫に渡って帰ってくる可能性の無い、かつどこにでもある定数としてのnullを使うべきでだよね。 進捗自体は、別のデータが貰えてるので、そいつでフィルタすれば良い。 : デフォルトの名無しさん [sage] 2016/05/29(日) 02:13:36.39 :JYpYJI9w 質問スレとして成り立ってねえ : デフォルトの名無しさん [sage] 2016/05/29(日) 02:33:08.25 :qvzR6wN9 おいおい俺にレスを付けるかw やり合ってるのは俺じゃないぜ。まあ、安価自体には大して意味がないかもしれんが。 > 無駄すぎる > 貰っていない≒入っていない、の構造を維持するのが一番よね。 これらについては正解。相手側の欠点と、自分側の利点は言えた。 では相手側の利点と自分側の欠点は言えるか?つまり相手側が何故相手側の主張をするかだ。 まあこれは言えなければ相手側に言ってもらえばいいんだが。 そうすればお前らお互いに知恵を出し合ってブレスト出来て前に進めるだろ。 そうやって自分の中の実装オプションを増やしていけば、 仕様を聞いた瞬間に複数の実装が思い浮かんで選択できるようになる。 下らない文法争いからはいい加減に卒業した方がいい。あんな事をやっていても全く上達しない。 : デフォルトの名無しさん [sage] 2016/05/29(日) 02:33:34.96 :qvzR6wN9 nullアサインの理由付けはよく分からない。 というか正直、こじつけただけのように見える。ただ、それはそれでいいんだよ。 君の実装は軽量高速動作向きだ。 だからプリミティブで対応するというポリシーなら、それはありなんだよ。 問題はそれを分かってやっているのか?ということなんだよ。 あと、話を大きく考えすぎだ。身近な成功例があるのだから、それを参考にすればいい。例えば、 000: 未実施 100: 実施中、結果待ち 200: 結果良好、終了 303: 再検査中 304: 再検査終了、問題なし 404: 結果不良 とかな。何の事かは分かるだろ?それを参考に決めうちしたとして、ほぼ全部設定できるはずだ。 どうしても駄目なら 600: その他、で直接stringを指定すれば済むが、 まあこれは分かると思うが避けられれば避けた方がいいだろう。 いずれにしても、この方式は拡張するにしても容易だ。 : デフォルトの名無しさん [sage] 2016/05/29(日) 02:34:17.67 :qvzR6wN9 分かっていると思うが俺はあっちのだ。 ttp://echo.2ch.net/test/read.cgi/tech/1449440793/ お前らが延々と文法の話しかできない事に辟易していた。 この手のプログラミングの本質についての話なら、当然歓迎する。 だからあっちで勝手にやってくれても構わないし、今回みたいに収拾つかない場合には助け船も出す。 とはいえ、今回は君らだけでもっと走れるはずだ。 上記のように、反対側サイドは相手側に出してもらってもいいのだから。一人で走りきる必要はない。 だからまあ、今話している連中で行けるところまで行ってみるべきだね。 場所は上記の通り、移動したければどうぞだが、個人的にはここでやって構わないと思うけどね。 役に立たないレスしかしないゴミは無視でいい。 君らがガンガン回答しているのだから、君らが牛耳るべきなんだよ。 回答者のレベルが分かるのは質問者にとっても有益だ。 質問も全部掃けている。 質問と混線してやりにくいということになったら、その時にスレ分割を考えればいいだけのことだ。 なお、ここは質問スレなのだから、質問者は議論の空気を読まずにいきなり質問を落としていい。 それで議論がぶった切られるのが嫌なら、議論は別の場所でやれってことでしかない。 : デフォルトの名無しさん [sage] 2016/05/29(日) 04:35:50.01 :qTFaTssR もうお前が型の基本も読解力もなく煽ってるだけの存在ってのは理解したから良いよ 結局何も答えられずに煽るだけだったね : デフォルトの名無しさん [sage] 2016/05/29(日) 04:45:22.18 :qTFaTssR 設計がUndefined許容になる事を秤にかけたら遥かに前者のがいいっしょ 利得がって言ってる拡張は、プロトコル上は1レスポンス1バイト〜高々数十バイト(項目数)程度の差で済む ISDN相手じゃあるまいし、中は同軸使ってた頃のシステムでも1Mぐらいはあるから、そんなの問題にならないよ 単に古いからなし崩し的に使ってるだけだと思うよ で、それをかの人はなぜか良設計だと思い込んでると まあもうどうでも良いけどね、本人最後まで理解しなかったし : デフォルトの名無しさん [sage] 2016/05/29(日) 04:47:37.88 :qTFaTssR すまん、前者の方が抜けてたね 正しくは、プロトコルを拡張するのと、設計がUndefined許容になる事を秤にかけたら : デフォルトの名無しさん [sage] 2016/05/29(日) 05:02:06.30 :9ISBvfBu よーわからんが思考順序がおかしい奴が結構いるみたいだな : デフォルトの名無しさん [sage] 2016/05/29(日) 05:07:22.44 :qTFaTssR >知りうるすべてのフィールド、も保守管理していくとなると、永遠に保守を続ける必要が発生するよね。 全部フィールドを保守するのが無駄と言ってるけど、 ビュー側で分けてるんだから同じ事だよ? なぜか保守してないことになってるけど : デフォルトの名無しさん [sage] 2016/05/29(日) 05:22:17.03 :qTFaTssR これ極端なこと言えば、そもそも専用のはずのプロトコルとサービスを、 末端でそれぞれ対応してるモジュール同士が理解できればそれで良いっていう体の オブジェクト送信と保存のための汎用ミドルウェア扱いしかしてないって事だよね そして結果と言う名の値にごちゃごちゃデータ入れてるから、 各値を読めない末端は何のメタ情報も取得できない それで保守しにくいって当たり前じゃんよ、何も考えずに末端で適当に実装してるんだから どういう体系なのかは知らんが、正直関わりたくない案件です : デフォルトの名無しさん [sage] 2016/05/29(日) 05:24:34.66 :uH1/jPAH ネットワークバンド幅をケチるなら バイナリのプロトコルがいいよ。 たとえばJSONをgzip圧縮するとかNE! : デフォルトの名無しさん [sage] 2016/05/29(日) 05:32:26.63 :9ISBvfBu の論だと 貰った明示的な空値と貰ってない暗黙的な空値を区別するために 両方の存在が必要ということだな : デフォルトの名無しさん [sage] 2016/05/29(日) 06:24:18.47 :0W+JhSU+ なんのこっちゃ。 空論だらけで笑えるわ。 undefined許容と言うか、お前らの見識狭すぎるだろ。 ざっくり白本から引用すると ttp://shirobon.net/22/ika_2_3/i_m_2_3.htm こうあるわけだ。 中見るとわかるけど、ひとつの検体でも、凄まじく別れるわけ。 : デフォルトの名無しさん [sage] 2016/05/29(日) 08:06:23.01 :7TpVCW1+ JavaScriptスレの住人に医療知識を求める方がおかしいと思うけど、あなたは ID:4RY8P4hk ? 多態性が必要ならオブジェクト指向をすればいい 一つのオブジェクトでプロパティチェックを一つ一つやって確認していく方法は極めて無駄 : デフォルトの名無しさん [sage] 2016/05/29(日) 09:08:45.76 :0W+JhSU+ だから、知らないなら知らないで良いんだよ。 しったかぶって、この設計で大丈夫、クラスやら、インターフェイスでガッチガチに固めれば良い、なんて発想されても、それじゃ不便なんだよねえ、って話するしか無いじゃん。 DBにも実際にスキーマフリーなkvsのような物に入ってるんだし。 何を持っているかは、もの次第。 その上で、持っていないものに関しては、定義しない、 持っているけど、中身の入っていないものは、定義して中身にnullを入れる。 そんなけ。 : デフォルトの名無しさん [sage] 2016/05/29(日) 09:18:33.91 :cJcPZgXw > 中身の入っていないものは、定義して中身にnullを入れる お前は雑巾で顔を拭くのか? : デフォルトの名無しさん [sage] 2016/05/29(日) 09:43:12.25 :BS/+K0m3 あるテキスト全体を、markdown形式の改行に変えたい(行末に空白を2つ入れたい)んですが、書き方を教えて下さい。 iPhoneのtextwellで使用したいです。 : デフォルトの名無しさん [sage] 2016/05/29(日) 10:11:38.70 :pBCN0dYY nullとundefinedのような二種類の形式が有るのは、他にどんな言語が有りますか? : デフォルトの名無しさん [sage] 2016/05/29(日) 10:29:29.44 :0W+JhSU+ 喩えが下手すぎて何も伝わらん。。 (""+str).replace(/(\r|\n|\r\n)/g," $1") でいいんじゃないの? php(isset) perl(exists) なんかじゃないの?メジャーどころでは。 定義せずにいきなり代入できる言語にはたいていあると思うよ。 : デフォルトの名無しさん [sage] 2016/05/29(日) 12:24:19.31 :7TpVCW1+ String(string).replace(/(?=\r\n|[\n\r])/g, ' '); そのコードは \r\n にマッチしない \r\n に対して2回置換処理を行う : デフォルトの名無しさん [sage] 2016/05/29(日) 12:26:53.13 :GuNB7bh5 池沼が正しいか正しくないかの話(議論ですらない)をしたところでどこにも何の影響も残らないのに 貴重な時間を数日間も潰してよく続けられるものだと思う よほど時間の使い方を学習せずに育ったか、毎日が日曜日で暇なのだろうな : デフォルトの名無しさん [sage] 2016/05/29(日) 12:35:23.09 :0W+JhSU+ ありゃ、そうだっけ。 貪欲だと思ってた。 \r\n|\r\|\nならいいっぽいな。勉強になったわ、ありがとう。 だって先月ブッチギリでサブロクをオーバーして強制休暇で暇なんだもの。 : デフォルトの名無しさん [sage] 2016/05/29(日) 12:36:31.11 :7TpVCW1+ 何がどう不便なのか全く伝わってこない 悪いけど、情報を小出しにして情報アドバンテージを得ようとしているように見える 「持っているもの」や「持っていないもの」のような抽象的な概念で誤魔化さないで全体の処理の流れを具体的に説明したら? DBからそのまま二次元配列に落とし込む訳じゃないよね データベースから引き出しすデータのフォーマットがどのようなものなの DBから引き出したデータをJavaScript出扱いやすいように構造化する処理があるはず オブジェクト思考を推奨しつるのは後者の処理であって元のデータ構造がどうなっているかは関係ない : デフォルトの名無しさん [sage] 2016/05/29(日) 12:43:40.90 :qvzR6wN9 > プロトコルを拡張するのと、設計がUndefined許容になる事を秤にかけたら > 遥かに前者のがいいっしょ プログラミング的には、はいその通り。 > ビュー側で分けてるんだから同じ事だよ? はいその通り。どこに書くかだけでコード量自体は大して変わらない。 だったら一箇所に纏めて書いている方が保守しやすいというのも事実。 > 汎用ミドルウェア扱いしかしてない はいその通り。 というわけでまあ、プログラミング一般論として言うなら、君の実装の方がかなり「マシ」だし、「マトモ」だと思う。 言っていることも至極まともだ。プログラミングの腕前も、君の方が上だろう。 ただ、多分あの「軽量実装」が「仕様」なんだよ。 : デフォルトの名無しさん [sage] 2016/05/29(日) 12:44:04.66 :qvzR6wN9 君が言っているのはかなりきっちりしたシステムだ。 低速だが安定堅牢に動作する。何か問題があればたちどころに検出できる、まさにエンタープライズソリューション。 しかし、悪く言えばSEが余分な機能をくっつけまくった、顧客にとっては使わない機能の固まりだ。 あれでどうにかなっているんだから、ビュワー自体は簡易的なもので、本体はDBだ。 これまで紙でやっていた物を、電子化することによって閲覧、検索をサクッと出来るようにしたい。 でも、それだけでいいんだよ。DBが壊れていたり、ネットワークが潰れたら、最悪紙で対応できる。 ただ、そういう非常時じゃない時は、サクサク検索閲覧したい、多分それだけ。 だからビューワーはつべこべ言わず、今あるDBにアクセスして、内容をサクッと表示できればいいんだよ。 そこであれこれ検出する必要はなく、DBアクセスして見えた内容を表示できればいい。 だからビューワーのためにプロトコルを拡張するなんてあり得ない。 今あるDBのデータを再構築とかもあり得ない。 今動いているシステムの上に「きっちり居候しろ」、ということなんだと思うよ。 DBも多分デタラメ投げ込み方式だが、それもありだろう。 もちろんITソリューションとしてはやや問題があるが、 現実的には、今時の医者は患者の顔もろくに見ずパソコン操作に忙しいと聞く。 本来は彼等の負担を減らす為の「ソリューション」が負担を増やしている、本末転倒な事態になっている。 だからIT側の都合ではなく、医療実務者の都合側に100%振ったら、多分彼が言っている感じになる。 登録だけはしておくから、あとはよろしく。検索と閲覧がサクサクできればいいです、ってところだろう。 (この「登録」ってのは整合性がある状態ではなく、情報漏れがない状態で登録されているだけ。 つまり検査によってnullの意味が異なったりもするが、それはIT側で辞書引きして対応しろということ) : デフォルトの名無しさん [sage] 2016/05/29(日) 12:44:27.00 :qvzR6wN9 とはいえ > 設計がUndefined許容 これは大問題なのだが、NaNをbool値扱いしていることからも分かるように、彼はこれを理解していない。 さてこれについては、グローバルは禁止(キリッみたいなのは入門書でも触れている=全員一度は聞いたことがあるとして、 undefinedについては所詮入門書を書いている奴らはその程度だということなのか、 あるいはそもそもundefinedがあるようなゆるふわ言語で業務システムを構築することがこれまで無かったのか、 少なくとも(キリッとかやっている奴は見たことがないから、初心者が知る範囲にはそういう情報が無いのだろう。 てな感じか。では続きをどうぞ。 : デフォルトの名無しさん [sage] 2016/05/29(日) 12:47:26.66 :7TpVCW1+ JavaScriptは貪欲(最長一致)だけど、貪欲でなくても結果は同じ : デフォルトの名無しさん [sage] 2016/05/29(日) 13:01:45.99 :0W+JhSU+ なんでそんなに突っかかるのかわからん。 アドバンテージもなにも、現にお前が無知なだけだし、だからといって臨床検査の事細かく説明したところで理解できんの? お前が、卑怯な手段で叩かれてると思ってるのは、全部お前が単純に馬鹿で無知で加えて想像力と謙虚さを持ってない故の卑屈なコンプレックスだわ。 ほぼそのまま二次元どころか多次元配列に落とすよ。 誰もが受けたことあってわかりやすいところで説明すると、眼科のあの気球見るオートレフだと、球面度数と、乱視度数と乱視軸度の3項目が一発で出て、そいつらは同一時刻の検査結果としてひとつの結果にまとまってるもんなんだが、 左右の目を必ず測るとは決まってない。 右、左自体の結果が入ってない事がありうる。 ところが、左右測ったけど右だけ測れなかった、それは、測ったって事実は残さないとならん。 だが、右目のなんとか、が測れなかったわけではなく、右目の結果自体がまとめて、無い。 そしたら、右目の結果には詳細を入れようが無いわな。測れなかったんだから、何が測れなかったと言うわけではなく、右目が測れなかったという事実しか無い。 また、再トライして測れない、というわけでも無いので、端的に失敗で終わらせるわけにも行かん。 それは、測ったけど今のところまだ結果は入っていない、って状態でしかない。 それを、オートレフ計測失敗、と個別の定義値を持って管理したらあの項目数でどうなるんよ。 ホルター心電図なんかもっとめんどくさい。24時間の時系列データひとつながりが端子数ある。それが一まとまりのデータ。 : デフォルトの名無しさん [sage] 2016/05/29(日) 13:07:42.96 :0W+JhSU+ ダメ。DBが最悪潰れていたら、は許容され得ない。 電子カルテ三原則というものがあって、真正性、保存性、見読性ってみっつの要素が保てていないものは、診療録、照射録たりえない。 なので、どんな入れ方をされても、後からなんとでもなるようなゆるふわ仕様で、それを確実に歴を含めて保存してる。 都合が悪くなったから、この定数はこの日から別の意味です、は使えない。 組み込みの型で、あとからかぶり得ない値である必要と、無いものは無い、無かったと勝手に書かないという原則もある。 測ってもない熱が、カルテに「熱無し」って書かれても困るっしょ。 : デフォルトの名無しさん [sage] 2016/05/29(日) 13:24:29.14 :xy9Dpqm6 かわいそうにこういうこといいあえる相手いないんだね こんな頭おかしいのがまともな職場にいられるわけないから当然か : デフォルトの名無しさん [sage] 2016/05/29(日) 13:30:53.09 :KqqGQ0oS ちょっと勉強でvue-router触ってみてるんだけど (※なおクライアント側でのルーティングフレームワークは初めて) /fooと/foo/barと/foo/bar/baz みたいなルーティング定義できるけど これってよくやるもの? これすると、<img src="../hoge.jpg">とかの相対指定がおかしくなる…… (1)mod_rewriteで弄る? (2)それとも<img src="/img/hoge.jpg">みたいに相対指定やめる? (3)そもそも複数階層を同一ページみたいなことはしない? よろしくお願いします : 265 [sage] 2016/05/29(日) 13:32:19.27 :KqqGQ0oS 補足です /fooも/foo/barも/foo/bar/bazも同じhtmlファイル で、/foo/bar/bazあたりでリロードしたときに <img src="../hoge.jpg">がちゃんと出なくなるという現象…… : デフォルトの名無しさん [sage] 2016/05/29(日) 13:33:37.15 :0W+JhSU+ なんのこっちゃ…。言い合わんでも、共通認識だよ。 : デフォルトの名無しさん [sage] 2016/05/29(日) 13:35:41.41 :0W+JhSU+ どーしても同一ページを別の階層にルーティングしたかったら、 なんか画像パス返すcomputed定義したmixinでも用意したら? でも何でも別の階層にルーティングしたいの? : デフォルトの名無しさん [sage] 2016/05/29(日) 13:45:07.54 :qvzR6wN9 いや、そういう話をしているわけではない。 というか、「電子カルテ」と「プログラム構造」の仕様は別物だから、別に考えてくれ。 多分な、君が担当している案件は、医者達は一旦「紙」に記録して、 それをおそらく別の人がDBに再入力しているだろ? この場合は電子システム以外でのバックアップを持っていることになる。 また、別の人が入力する時に「明らかな間違い」はそこで検出される。それを言っている。 (これが「電子カルテ」として容認されるかどうかは俺は知らない) この場合は君の実装でも悪くはないんだよ。 ただ、マスターがDBで、医者が直接入力、失われた場合に代替手段は無いというのであれば、 君の実装(というよりそのシステム全体)が駄目だろ、ってことになる。 (問題発生時の検出機構がないので危険) とはいえ、常に全員が最新鋭の完璧システムを使えるわけもないのだから、 その場合は、それは懸案事項として挙がっており、予算が付けば改修されますって事なんだとは思うが。 : デフォルトの名無しさん [sage] 2016/05/29(日) 15:26:36.97 :0W+JhSU+ しないよ。紙に。 紙に書いたものも正としたら、診療録が2倍になるでしょ。 そしたら、2倍の物を五年間保存するはめになる。 入力の間違いは、間違いとして明確に訂正をもって再度、訂正前の情報と共に保存するんだよ。 失われた場合に代替手段が無いって、そんなもの紙カルテでも火事で燃えたり、津波で流されたら終わりだよ。 だから、寸分のコピー劣化もなく複製できて、情報量が増えても物理的な量が増えない、デジタルな情報としてバックアップを他拠点に持っていける形にするし、それを保存するんだよ。 問題発生時の検出機構はあるよ。真正性の担保がそのもの。 とはいえ、それは医師がそう書いたならそれが正しいんだけど、なんにせよすべてをジャーナルとして保存してあるから、追えるし復元は出来る。 …おまえ業務系の経験無いんだろ。 : デフォルトの名無しさん [sage] 2016/05/29(日) 15:59:45.12 :pBCN0dYY あるソースを見ていたら、 setTimeout(func(), 0); という記述を見たのですが、どういう効果がありますか? func(); とやるとの同じだと思うのですが何か違うのでしょうか? : デフォルトの名無しさん [sage] 2016/05/29(日) 16:13:27.53 :KqqGQ0oS 回答ありがとう こうしたいっていう要件があるわけじゃなく ttp://router.vuejs.org/ja/nested.html の説明で疑問に思った次第 ニュアンス的には 複数階層を同一ページなんてしない →どうしてもするならパス構築するなんらかの仕組み(vueならv-attrあたり) って感じなのかな : デフォルトの名無しさん [sage] 2016/05/29(日) 16:19:19.34 :uH1/jPAH func()だとその場で実行される。 setTimeout(func(), 0)だと関数(正確にはクリックなどの イベントハンドラ)が終わってから実行される。 setTimeoutを使った場合、関数が終わった後にすぐに実行されるわけじゃなくて、 暇になってから実行される。暇っていうのはブラウザがやれなければいけない レンダリングなどの処理を行って何もしなくなってからということ。 だから ・クリックなどのイベント → func()実行 → イベントハンドラ終了 ・クリックなどのイベント → イベントハンドラ終了 → ブラウザの処理 → func() 実行 という違いがある。 : デフォルトの名無しさん [sage] 2016/05/29(日) 17:29:54.45 :s6IpqRgC 内容の真偽はともかく、そろそろ注意した方がいいんじゃね? 業務知識をこんなところに書くとか、社会人としての人間性を疑われてもおかしくないぞ。 : デフォルトの名無しさん [sage] 2016/05/29(日) 17:34:17.73 :G8EDN3vd それなりのブライドはあるけれども、散々他人をこき下ろしたあなたに謙虚さを持ってないとはいわれたくないなあ あなたには謙虚さがかけらも感じられない > ところが、左右測ったけど右だけ測れなかった、それは、測ったって事実は残さないとならん。 > だが、右目のなんとか、が測れなかったわけではなく、右目の結果自体がまとめて、無い。 「右だけ測れなかった」としておきながら、「測れなかったわけではなく、右目の結果自体がまとめて、無い」は意味不明 「測れなかった原因」がさっぱり書いてないのに「再トライして測れない、というわけでも無い」の根拠はどこにあるのか 「測らなかった」ならともかく、「図れなかった」のなら「測れなかった原因」を記録に残さないと同じ失敗の繰り返しになる 右目の計測結果については「計測不能」として備考欄にでも「測れなかった原因」を記録に残しておくのが妥当 というか、いきなりこの人は何を言い出してるんだろうね null云々よりもundefinedの扱いに非難が集中していたと思うけど : デフォルトの名無しさん [sage] 2016/05/29(日) 17:38:12.13 :G8EDN3vd func() の返り値となる関数オブジェクトが非同期に実行される func() の返り値が関数オブジェクトではないのなら setTimeout は期待通りに動作しない : デフォルトの名無しさん [sage] 2016/05/29(日) 18:17:47.96 :eYOjmyco const o = document.getElementById('hoge'); こういう風にdomをconstで変数に入れても大丈夫ですか? o.innerHTMLを書き換えたりoの中の子要素が変化してもエラーにならないんですが・・・ constって書き換えるとエラーになるんじゃなかったんですかね? : デフォルトの名無しさん [sage] 2016/05/29(日) 18:27:43.87 :uH1/jPAH 書き換え不可能なCD-Rに、 ttp://www.google.co.jp ってリンクが書いてあっても それをクリックするたびに、表示される内容は変わるだろ? それと一緒 : デフォルトの名無しさん [sage] 2016/05/29(日) 19:30:52.11 :rcX9jYV5 変数に入れるというより、値への名付け。(共有渡し) そのひも付けが固定化されるというだけで値の変化は関与しない。 : デフォルトの名無しさん [sage] 2016/05/29(日) 20:10:17.52 :roFUTjZ8 結局undefined使うのはアリ?ナシ? 代入とか比較するのはダメ? プロパティの有無を見るにはinやhasOwnPropertyで十分? : デフォルトの名無しさん [sage] 2016/05/29(日) 20:11:28.98 :qvzR6wN9 言っていることは分かるのだけど、それは常識的なことであって、ああそうですか程度でしかない。 そこではなくて、他の人が批判しているのは、(ガチの本番系で)君の実装は駄目だろ、ということなんだよ。 俺は実装を聞いて、多分本番系ではなくて傍系だと思った。だからそれもありだというスタンスだったんだ。 (出先で確認するためとか、或いは他システムで代替も出来る状態) ただ、それが本当にガチの本番系なのなら、それはマジであり得ないくらい酷い仕様だよ。 だってプリミティブに状態を割り当てるとか、せいぜい5〜6個しか無いんだから、将来的にヤバイでしょ。 (というか最初から無理だと思うが、、、) おそらくやたらある状態をstringでそのまま持っているっぽいけど、それだと検索もしづらい。 タグなりコードなりを割り付けておかないと、書き方の揺らぎだけで検索から落ちてしまう。 undefinedを残しても特段メリットもなく、デバッグがしづらくなるだけ。NaNについても同様。 だから本当に君が君の案件の状況を理解できていて、プログラミングの腕前もあるのなら、その態度はないんだよ。 最初から組めるのなら、ど素人でもしない程の酷い実装になっている。(というか逆にそれで組む方が難しい) 多分、これまで少しずつシステムを組み上げてきて、キメラ状態になっている物をそのまま使っているのだと思う。 一言で言うと、 > 単に古いからなし崩し的に使ってるだけだと思うよ () が多分当たってる。 冷静に考えてみればいい。今君はその案件の仕様を知っている。 そこでシステム刷新の機会があり、予算が十分付いたとして、今の実装を選ぶかい? : デフォルトの名無しさん [sage] 2016/05/29(日) 20:52:17.36 :pBCN0dYY 詳しい説明ありがとうございました。かなり分かってきました。 >func() の返り値となる関数オブジェクトが非同期に実行される >func() の返り値が関数オブジェクトではないのなら setTimeout は期待通りに動作しない と言う事は setTimeout(func(), 0); function func(){ ... return "string"; }; これはダメで、 function func(){ return function(){ ... return "string"; } }; これならOKと言う事ですか? : デフォルトの名無しさん [sage] 2016/05/29(日) 20:58:12.35 :uH1/jPAH の説明は意味不明で混乱するだけだと思っていたがやっぱりだったかw は忘れたほうがいい。 意味不明だから。 : デフォルトの名無しさん [sage] 2016/05/29(日) 21:22:43.29 :KqqGQ0oS 仕様的には第1引数は関数または実行したいコードの文字列 setTimeout(func, delay) だとfuncそのものをdelay後に実行 setTimeout(func(), delay) だとfuncを即実行してその戻り値をdelay後に実行 ってことだと解釈してる というわけで前者("string"をreturnしているほう)はエラーが出ると思う stringってなんやねんって : デフォルトの名無しさん [sage] 2016/05/29(日) 21:38:07.82 :bghshKck それだけでは決められない。 例えばundefinedを直に扱わないようにhasOwn等を利用するスタイルにするとしたら、 他の部分でもそういう関数テスト型に揃えないとおかしい。 逆に言うとスタイルを揃えるのならどうだっていい。おかしくないように書け。 : デフォルトの名無しさん [sage] 2016/05/29(日) 22:36:23.66 :9WOIUBG7 後者のコードで問題ないが、コールバックの返り値はどこにも返されない もし、あなたがコールバック関数の返り値をどこかで受け取りたいのなら Promise のような仕組みを利用する事になる 関数の返り値が関数というロジックは同じ形式の関数を複数生成したり、関数スコープに値を閉じ込める場合に使われるわけだが、テクニックとして知っておくとコードの表現力が上がる : デフォルトの名無しさん [sage] 2016/05/30(月) 01:34:16.16 :Kp7czbyF の言っているとおりで正しい。 加えて言うと、コーディング以前の段階でそれらは既に確定している。 逆に言えば、コーディング時に迷うようならそもそもそれがおかしい。(「設計」が出来ていない) といっても多分君には通じないだろう。(その質問をすること自体がおかしい) そこで平易に言い換えると、 その質問は、「車は右と左とどちらを走るのがいいの?」と等しい。 日本では「左」を走るように設計されているのだから、「左」なんだよ。 新車(新しい関数)をいくら導入しようが、「左」として設計されている場所では「左」なんだよ。 当たり前だが「右」として設計されている場所なら「右」になる。 「左」か「右」か選べるのは最初の「設計」時だけであって、基本それ以降は踏襲するしかない。 (コーディング時には決められているとおり記述するだけ) 変更するのは大手術が必要となる。 > 型の基本 > 揃えないとおかしい レスをつまみ食いして悪いんだが、君達は何言語の出身? 前から思っているんだが、JavaScriptスレの連中は不思議なほど育っていない。 言語自体はいろんな事がお気楽に試せる面白い言語なので、普通にやっていれば普通に育つはず。 だからここまでヘボ揃いなのは確実に何かしらの理由があるはずで、 今ちょっと思っているのは、多分こいつらはダックタイピングに溺れているのではないかと。 具体的に言うと、 if (obj) がいいだ悪いだnullと比較すべきだいやundefinedも考えろとか永遠とやっているから その先(データ/制御構造)に進めていないのではないかと思っている。 どうかね? : デフォルトの名無しさん [sage] 2016/05/30(月) 02:34:29.25 :ewV/OC7O どうかねってお前がその「育ってない」やつの一人だろ みりゃわかるよw : デフォルトの名無しさん [sage] 2016/05/30(月) 05:24:03.84 :NXhb520V 人間的に「育ってない」奴の多いこと多いこと。 : デフォルトの名無しさん [sage] 2016/05/30(月) 08:05:58.62 :5tgErZe9 永遠? もしかして延々っていいたかったの? バカゆとり丸出し : デフォルトの名無しさん [sage] 2016/05/30(月) 08:35:34.56 :yN0jSRJK > といっても多分君には通じないだろう。(その質問をすること自体がおかしい) > そこで平易に言い換えると、 このスレでこの説明をしてくる奴よくいるが、平易に言い換えた説明が逆にわかりにくい場合がほとんど 物言いがいちいちくどくどしくて日本語力が足りてないというべきか 自分に酔った文章を書かず、簡潔に書け : デフォルトの名無しさん [sage] 2016/05/30(月) 09:30:20.73 :ewV/OC7O まずお前から実践しろよw : デフォルトの名無しさん [sage] 2016/05/30(月) 09:34:30.19 :gPEMgWAi 知ったかぶってとか言ってるけど、最初からそう作ればいいだけだ そういうのは設計や技術力が無いだけで手抜きとは言わん : デフォルトの名無しさん [sage] 2016/05/30(月) 09:36:25.96 :gPEMgWAi 僕が言いたかったのは永遠 : デフォルトの名無しさん [sage] 2016/05/30(月) 09:41:35.60 :gPEMgWAi 正直真逆の印象 今は構造化プログラミング世代の言語でもLinuxカーネルのような洗練さが求められてる時代 このスレでお前さんだけ20年ぐらい遅れてる : デフォルトの名無しさん [sage] 2016/05/30(月) 09:42:51.04 :PwZzpqig なるほど、node使いが、javascript(笑)と馬鹿にされる理由がわかったよ。今回は。 かつ、デザイナとしてもこいつらは害悪だしな。 放っておくと理由の伴わない感覚でのデザインしよる。 しかも、個人の「これは良くない」なんて感覚で。 : デフォルトの名無しさん [sage] 2016/05/30(月) 09:45:48.62 :PwZzpqig undefinedの扱いundefinedの扱いってやかましいけど、そのデータに入っていない、が、そのデータに本当に入れていない、で何がいかんのかなぁ。 入ってもないデータに、「入っていなかった」って書くと、それは「入っていない事を確認した」データになってしまうんだけどね。 法律で決まってる話だったり、厚労省の保険適用のものの話しかしてないから、この範囲は業務知識ですらないよ。 : デフォルトの名無しさん [] 2016/05/30(月) 09:47:31.51 :gPEMgWAi ついに無差別マシンガン打ち始めたな 盲目的に従ってるだけの無能が何勘違いしてふんぞり返ってるんだ? : デフォルトの名無しさん [] 2016/05/30(月) 10:06:14.30 :d3v2hj/G 永遠に繰り返すならあるが永遠とやるなんて日本語ねえし : デフォルトの名無しさん [sage] 2016/05/30(月) 10:21:11.46 :SiNcM0fD なんかよくわからんけど、普通にforeachで処理できるようなデータ構造/Viewの実装仕様にしとけよと思った。 : デフォルトの名無しさん [sage] 2016/05/30(月) 12:35:00.36 :REX8Pswd var obj = {'視力': 1.5, '聴力': '100db'}; なら Object.keys var array = [{name: '視力', value: 1.5}, {name: '聴力', value: '100db'}]; なら Array.prototype 系関数を使う 未調査などのステータスが必要ならプロパティを付け加えるだけ undefined を使う必要はないな : デフォルトの名無しさん [sage] 2016/05/30(月) 12:36:07.87 :XUi+aAng 初心者なのですがオブジェクトxの何らかのプロパティを取り出す前にxがnullやundefinedでないことを確認する必要がありますよね?皆さんはどうしていますか? : デフォルトの名無しさん [sage] 2016/05/30(月) 12:36:56.29 :ysRBPLLz 自演してまで続けたいのかこのゴミ : デフォルトの名無しさん [sage] 2016/05/30(月) 16:54:37.32 :PwZzpqig jsonっぽくすると 患者A:[{ 試験日:aaaaa , シーケンス:bbbbb , 検査値:[ {視力:{ 左右:右, 近視度数:xxx, 乱視軸:{値:yyy,単位:degree}, 乱視度数:zzz }} ,{カーブ:{ ... }}, {視力:{ 左右:左 近視度数:zzz }} } ... みたいなのかな。 検査日.. 氏名 左 近視度数 乱視軸 乱視度数 カーブ 右 ... 氏名 .... みたいなグリッドに出すのに、無い場所の値を用意するだけで無駄。 定義されていない→無い、で充分。 : デフォルトの名無しさん [sage] 2016/05/30(月) 17:20:40.14 :SiNcM0fD 別に検査してなければ項目なしでもいいんだけど、描画するコードでループの一番内側がセルの数に なるようなループして、いちいちundefinedかどうか判定するようなロジックにするの? : デフォルトの名無しさん [sage] 2016/05/30(月) 17:43:51.15 :/sRU0ua4 乱視軸って何だ? : デフォルトの名無しさん [sage] 2016/05/30(月) 18:22:59.82 :ht1IyunN 凄くタイムリーな質問だと思うんですが var a = []; a.last = function () { let len = this.length; return 0 < len ? this[len - 1] : null; } みたいな、範囲チェック外はnull返すようなことは不要ですか? これは仕様としてnullが必要だからそうしてるのではなくて、 まぁせっかくチェックしたんだから返すとしたらnullだろうな、 くらいの判断でそうしてます。 それとも a.last = function () {return this[this.length - 1];} で十分ですか? 「javascriptは単にundefinedを返してくれるので範囲チェックしなくていい」 っていうふうにポジティブな解釈していいですか? : デフォルトの名無しさん [sage] 2016/05/30(月) 18:31:32.90 :hoOpO478 nullを返すより0な : デフォルトの名無しさん [sage] 2016/05/30(月) 18:34:38.43 :SiNcM0fD a[undefined]のときa.lastがundefinedになるということと、自分がなにをしたくてなにを求めているのかを 勘案すれば、どう実装すべきか決定できるのでは : デフォルトの名無しさん [sage] 2016/05/30(月) 18:48:17.09 :ht1IyunN ありがとうございます。でもそれだと、 配列に整数を入れて使うとき悶絶しちゃうと思うんですがw いや…それは結局nullのときでも一緒ですよね。 undefinedのときでも一緒ではありますね。 それらを代入できるという以上…。 ありがとうございます。 「a[undefined]のとき」っという表現が不勉強で分からなかったのですが、 いずれにせよ var value = a.last() のあとは単に if (value) するくらいのことしか考えてませんのでundefinedで十分そうです。 : デフォルトの名無しさん [sage] 2016/05/30(月) 18:53:42.83 :PwZzpqig ループの内側の数とか言うより、描画用の項目定義は項目定義である。 医者が並べて見る時に、項目数が変わったり並び順が変わったら困るから。 それは医者次第だけど、内部的には xpathみたいなもので指定する。 ごめん、軸度だな。 lastの用途次第だけど、popの仕様と合わせるならundefinedだと思う。 俺はpopしてundefinedじゃなければもう一回pushしておく。 そのためには、undefinedをpushしなくても良い実装にしておかなきゃならんけど。 : デフォルトの名無しさん [sage] 2016/05/30(月) 18:59:41.70 :ht1IyunN ありがとうございます。popに合わせておこうと思います。 あとはせっかくなんで使う側はせめて if (a.last()) するよりは if (a.last() === void 0) としてみようかと。 : デフォルトの名無しさん [sage] 2016/05/30(月) 19:12:01.08 :/sRU0ua4 軸度とは : デフォルトの名無しさん [sage] 2016/05/30(月) 19:22:00.69 :PwZzpqig なんて言うか、正直眼科は不勉強だけど、乱視がどの方向にあるかだよ。 メガネ作るとき、放射状の線見せられて、どの方向が濃いか聞かれるじゃん。 あれを答えてもらった方向に90°足した、何度の方向に対して焦点がずれてるかが乱視軸度だよ。 普通は度で持つけど、たまにラジアンで持ってたりする。 : デフォルトの名無しさん [sage] 2016/05/30(月) 19:42:49.89 :4aFguERh 300すぎてまだやってんのかよ 頭おかC : デフォルトの名無しさん [sage] 2016/05/30(月) 20:20:03.03 :/sRU0ua4 そんな事聞かれるのかよ 知らなかった : デフォルトの名無しさん [sage] 2016/05/30(月) 21:22:29.72 :PwZzpqig なんか話題提供してよ。 : デフォルトの名無しさん [sage] 2016/05/30(月) 21:24:24.86 :PwZzpqig こういったふうに、ただの視力検査でも、人によってやらないものもあるんだよ。 : デフォルトの名無しさん [sage] 2016/05/30(月) 23:02:14.89 :Kp7czbyF リクエスト無いみたいだし、もう無しで良いってことにさせてもらうぜ。 俺も大量にこのスレに書き込んだ。多分そちらにも多少は有効情報があっただろうし。 このスレは俺よりも20年先を行くスーパーハカーだらけらしいし、とりあえず引退してみよう。 多態しないのなら if (a.length>0) にしとけ > 俺はpopしてundefinedじゃなければもう一回pushしておく。 おい! ってかまじめな話、もうちょっと普通のやり方を覚えた方がいいぞ。 undefinedについて気になるのなら、他の知っている奴が回答するか、少し待つんだね。 それで出てこないようなら、俺のスレに聞きに来れば教えてやるよ。 とはいえ君は無駄に煽りすぎだ。だから出てこないかもしれない。 しかし、君は自力で辿り着けるレベルだから、ヒントを与えておこう。 君はNaNの仕様を知っている。で、それを便利に使っているわけだが、 あれはそういう仕様が必要だったからなんだよ。 だからNaNの正しい使い方を調べて、そこから推測すれば、 undefined許容/非許容のそれぞれの得失を理解できる。 その上でundefined許容を選択するのなら、それは「設計」なんだよ。やればいい。 ところで、俺および俺が立てたスレがどうにも気に入らない奴がこのスレに複数いるだろ? 君達がやるべき事は、に答えることだ。 そうしないと、俺のスレが流れ出しちゃうぜ? あとついでだが、やはり君の案件は「正規」ではないよ。運用上「本番系」になっているだけだ。 読み出せないDBなんてあり得ないだろ?最初から何らかのビュワーが付いてる。 JavaScriptで受けるのなら、APIはJSON一択だろ? 今何かしら妙なAPIなのは、元々のビュワー用のAPIだからだよ。 そして何らかの理由で「正規」ビュワーが破棄され、今のビュワーになったんだよ。多分。 : デフォルトの名無しさん [sage] 2016/05/30(月) 23:24:12.29 :ILfmqIwk 俺の予想ではarraybuffer : デフォルトの名無しさん [sage] 2016/05/30(月) 23:41:05.43 :Kp7czbyF APIのことか? ビュワーはexeまたはelf等バイナリで、古い機材では動くが、新端末では動かないから、JS化したと。 あり得るシナリオだね。 だとすればParserでラップして終わりだし、鯖は当然そのまま運用するわな。 今のところの証言と状況証拠とは一致するw : デフォルトの名無しさん [sage] 2016/05/31(火) 00:15:08.11 :KJUuPgzh 混乱を招く回答が追加されているので伝えるが、undefined を返す設計が妥当だと思う 例えば、Map.prototype.get は存在しないキーを検索したら undefined を返す あなたがで気が付いたように配列の値に undefined が代入されていれば、値があるのかないのか区別付かない では、なぜ Map.prototype.get が undefined を返す設計になっているのかといえば、未定義のキーを参照したら未定義値を返す暗黙の了解があるからだろう オブジェクトでも存在しないプロパティを参照すれば undefined を返す (少なくとも俺の知る限りでは)プロパティが存在して undefined が代入されている JavaScript の仕様は存在しない よって、あなたが配列のプロパティに undefined を代入しなければ十分に区別できるだろう それから蛇足ではあるが、のコードでは a === [,,,] な場合に意図せず、undefined を返す(の設計通りなら null を返すのが正しい) Object.prototype.hasOwnProperty を使うことで期待通りの結果を得ることができるだろう Array.prototype.last = function last () { var i = this.length; while (i && !this.hasOwnProperty(--i)); return this[i]; }; console.log([1,2,,,,].last()); // 2 console.log([,,,,].last()); // undefined console.log([].last()); // undefine : デフォルトの名無しさん [sage] 2016/05/31(火) 01:17:08.26 :l5PlpRpu めんどくさいやつだなぁ。 煽りすぎた、って、煽られて沸騰した奴が言ったら二重どころか三重くらいにみっともないぞ。 煽って面白くなるだけ。 ビュワー用のAPIとか、だからさあ。。 電文だ、って言ってんじゃん。 電文、理解できない?知らないの? のほぼそのまま、今もう一回そこ書くならもうちょい綺麗にパーズするけど、要は[通信開始][要素種][要素長]....[チェックサム][通信終了]みたいなもの。 そのまま、要素種が始まったら要素長取り出して、その中も要素種と要素長で出来てるから、って形。 正規もなんもないよ。妙なAPIって、これハード屋的には何一つ妙じゃないよ。 案件ってか、自社製品だけど、運用 上の本番系、ってどんな寝言だよ。 運用してるなら、それは即ち本番系だろ。 おまえ学生なの?コードとして落とした事無いとか、無意味な理想論語ったりとか、結構痛いよ。 : デフォルトの名無しさん [sage] 2016/05/31(火) 01:56:46.28 :C610iy1k あんさん2chフィルタ通して見ても尊大やし態度悪すぎやで 学生と比べて技術力高いわけでもなし、人を煽れる立場や無いやろ? : デフォルトの名無しさん [sage] 2016/05/31(火) 02:06:15.74 :C610iy1k ちな電文はバイナリ転送形式の事やないで JSONだろうと1メッセージ単位なら電文や : デフォルトの名無しさん [sage] 2016/05/31(火) 03:10:34.97 :24hp8pmx お前、、、いちいち指摘するのが面倒なくらい色々読み間違ってるぞ、、、、 まあ俺の書き方もまずい点はあったが、、、 一応、俺は聞きに来れば答えるというスタンスだったんだ。 (出てこないってのは「他の知っている奴」のことであって、俺のことではないつもりだった。 ただこの点は俺の書き方が悪かった) とはいえ、面倒だし、今回は他の連中も正解を知っていることが確定しているから、 天秤にかければ誰か答えるかと思ってな。 しかし、まあもう無理だと思うが。俺も面倒になってきたし。 学生の作品と企業製品では、検証レベルが全然違う。 undefined非許容というのは、まともに検証すれば自明なんだよ。だからみんな知っている。 逆にそれを知らないってのは、お前は検証してないって事なんだよ。 しかも医療系だろ?煽り抜きでヤバイと思うぞ。 > 電文 知らんよ。てかこれって一般用語か?ググッた限りはただの「パソコン」と同レベルの集合名詞だと思うが。 俺はWeb系ではないので、Web系のローカル用語は知らんよ。 XHRでArrayBufferなら最初からそう言ってくれたほうが良かった。 とはいえそこは本題ではないが。 おう、ありがとうよ。 俺は見ての通りこのスタンスだし、これくらいの粘着や煽りはいつも通りだ。 特段怒っているわけではないのだが、そう見えたのなら済まない。 というか、Web系の連中のこの自信はどこから来るのか、本当にかなり疑問だ。 お前ら、プログラミング一般からすると、かなり「ひよこ」だと思うぞ。 大口を叩くのは、10k行のコードを普通に取り扱えるようになってからにした方がいい。 そんな奴はこの界隈にはさらにいるのだから。 : デフォルトの名無しさん [sage] 2016/05/31(火) 09:05:24.34 :l5PlpRpu わざとこの態度だからなぁ。 逆に、沸点低いやつがよくわかっていいじゃん。 沸点低いやつが何言っても、反射的に言ってるだけなんだし。 おう。JSONとして流れてきたらそりゃJSONという電文だな。 バイナリパスカル文字列式可変長電文か。 undefined許容というか、ずっと読み間違えてない? データとしてundefinedを入れるわけではなくて、 解釈した結果そのフィールドには値が入っていない→それをオブジェクトに起こしても、そのプロパティ自体が設定されていない、だよ? 可能な限りの、「データは入ってませんでした」を設定して回るほうが現実的で無いよ。 俺、あとウェブ系じゃないからね。 基本はDB屋だよ。 DBに入ってもない無い値を、入っていた事にされるのは許せんだけ。 : デフォルトの名無しさん [sage] 2016/05/31(火) 09:19:18.21 :KJUuPgzh > DBに入ってもない無い値を、入っていた事にされるのは許せんだけ。 誰もそんなことは言ってなかったと思うが、何が許せないんだろうな このスレだと hasOwnProperty, forEach, keys で判定する処理は見かけたが : デフォルトの名無しさん [sage] 2016/05/31(火) 09:20:08.42 :EjSYfMvt 自演開始〜 : デフォルトの名無しさん [sage] 2016/05/31(火) 09:40:27.01 :l5PlpRpu そりゃいいよ。それはそれで。 最初に初期値で初期化しとけば良いとか、そういうアホに対しての反論だから。 : デフォルトの名無しさん [sage] 2016/05/31(火) 10:16:07.42 :LdI3VN67 > DBに入ってもない無い値を、入っていた事にされるのは許せんだけ。 outer joinやcross joinについてはどう思うのかね : デフォルトの名無しさん [sage] 2016/05/31(火) 10:17:56.42 :d9LvTqQR ttps://tpc.googlesyndication.com/simgad/16591006766826217033 これの答えは何なの? : デフォルトの名無しさん [sage] 2016/05/31(火) 10:21:15.79 :LdI3VN67 > ループの内側の数とか言うより、描画用の項目定義は項目定義である。 > 医者が並べて見る時に、項目数が変わったり並び順が変わったら困るから。 > それは医者次第だけど、内部的には > xpathみたいなもので指定する。 なかなか話が通じないが、要は表示項目数×人数のループをしてundefinedかどうかを 判定するということだろ?表示項目数が30で20人分表示なら600回の処理をする。 そうじゃなくて、存在するデータ側を元に表示するか、あるいは全く別のアプローチをすれば いちいちundefinedかどうかなんて判定は不要ではとうこと。 : デフォルトの名無しさん [sage] 2016/05/31(火) 10:37:22.17 :wxR5ZVVT 無ければ困る事もわかるけど、凄く嫌い。 行列のDBは集合に対しての操作だと意識してないと最悪の結果に陥ると思うわ。 ふむ、では、その冴えたアプローチで綺麗にしたデータを、行と列、ないしはグラフにレンダリングする術を 提示してみてくれよ。 まさか、最初にレンダリング域全体のメモリを確保して、データ一つ一つに対して、RCや軸をデータから推測してその場所へデータを載せれば良い、最終的に残るのはundefinedだった項目だけ、とか考えてんのかな。 : デフォルトの名無しさん [sage] 2016/05/31(火) 11:08:00.91 :LdI3VN67 > ふむ、では、その冴えたアプローチで綺麗にしたデータを、行と列、ないしはグラフにレンダリングする術を > 提示してみてくれよ。 > まさか、最初にレンダリング域全体のメモリを確保して、データ一つ一つに対して、RCや軸をデータから推測してその場所へデータを載せれば良い、最終的に残るのはundefinedだった項目だけ、とか考えてんのかな。 グラフという単語がでてきたので話が根本的にかみ合ってない気もするが、基本的にはそういうことだよ。 テーブルで表示することを考えれば、項目が決まれば行あるいは列が決まり、人が決まれば列あるいは 行が決まる。それをメモリ上のデータ構造として作成して一気にテーブル化するとか、DOMを直接書き 換えるとか、あるいは、テンプレートを使うか、データバインディングしてModelが自動的にViewに反映 されるようにするとか、やりようはいくらでもある。 グラフのメタファーで言えば、定義域:0〜100, 値域:0〜100のグラフがあるとき、(1, 3), (2, 5)という二つの データしか無ければ二回プロットすれば終了ということだよ。 : デフォルトの名無しさん [sage] 2016/05/31(火) 12:25:58.83 :wxR5ZVVT やりようはいくらでもある、な。 アホか。 データバインディングするにしても、いや、バインディングするならそれこそ、データは歯抜けでいいだろう。 データバインディングするってことは、ビュー側から、どの要素をとバインドすべきだし。 一気にメモリに載せてられるかww : デフォルトの名無しさん [sage] 2016/05/31(火) 12:33:55.20 :wxR5ZVVT しかし、何故undefined(というか、値が無いもの)とnullを別物と理解するのがこれほど彼にとって難しいのかわからんな。 : デフォルトの名無しさん [sage] 2016/05/31(火) 13:25:23.48 :LdI3VN67 なにか勘違いされてる気もするけど、歯抜けのデータが悪いとは一言も言ってないよ。 みたいなデータが戻るケースはありがちだし。 で、俺が疑問に思ったのは、undefinedかどうかを判定する必要があるということは、 こんなコード書くの?ってこと。 display_items.each (function(display_item) { data.users.each (function(user) { // block A: ここがループの一番内側 output('<td>' + user.hasOwnProperty(display_item) ? user.item_value : '' + '</td>'); }); }); これだと、いつでもdisplay_items.count * data.users.count回のhasOwnProperty()が呼び出される。 display_items.count * data.users.count = 1,000のとき、表示するデータ数が1個だったときでも 1,000回の実行が必要。 そうじゃなくて、逆からのアプローチはできないのという疑問。 逆というのは、「存在するデータを元にする」やりかた。 : デフォルトの名無しさん [sage] 2016/05/31(火) 13:26:54.24 :LdI3VN67 君は君の問題を100%把握してるだろけど、俺(たち)は断片的な君の書き込み内容から どのような問題なのかを想像することしかできないわけお。 > 一気にメモリに載せてられるかww とか言われても、困惑するのみ。 : デフォルトの名無しさん [sage] 2016/05/31(火) 13:49:49.08 :wxR5ZVVT できないなら、自分には理解できない事だと納得して無意味な提案やめて寝ればいいのにり : デフォルトの名無しさん [sage] 2016/05/31(火) 13:54:56.19 :LdI3VN67 まぁ、ざっと読むと君の環境はこのスレ的には異端みたいだし、フロントエンドエンジニアでもないようだから どうでもいいっちゃいいんだけどね。 : デフォルトの名無しさん [sage] 2016/05/31(火) 14:14:48.43 :WCbBJW5L 想像でしかないんだけど表示項目1に対してデータ項目がn(n>0)って可能性とか たとえば視力検査の欄に表示する際 {"視力左":1.0,"視力右":1.0}の両方があって初めて表示するとか {"視力左":1.0,"視力右":1.0}→「おっけー」って表示 {"視力左":1.0,"視力右":null}→「右目は測りきれない4.0とか超いいかも」って表示 { "視力右":1.0}→「左目測ってない」って表示 {"視力左":1.0 }→「右目測ってない」って表示 { }→「視力検査してないっぽい」って表示 : デフォルトの名無しさん [sage] 2016/05/31(火) 14:29:29.32 :mikttA8+ その例はちょっと良くないが、言いたいことはあっている。 undefinedはシステムからの処理上の値が無いですよという知らせ。 nullは誰かが明示的にそれを表明したもの。 : デフォルトの名無しさん [sage] 2016/05/31(火) 15:57:03.36 :wxR5ZVVT あー、それ一番的を射てる。 : デフォルトの名無しさん [sage] 2016/05/31(火) 18:51:35.17 :znL0FvMW jsやっている人はc、c++などのnullしかない言語ではundefinedが無いのはどうするのですか?困りますよね? : デフォルトの名無しさん [sage] 2016/05/31(火) 19:40:15.04 :e360ttrJ undefinedを値として使ってるバカなんて知るかよ 大多数の人間はnull返せハゲって思ってるっての : デフォルトの名無しさん [sage] 2016/05/31(火) 20:00:07.25 :JD+3IcFi ありがとうございます。 ちょっと本題から逸れるんですが、[,,,] の中身が新鮮ですね。 lengthは3で、キーは何も無いと言う。 一見、{0:undefined, 1:undefined, 2:undefined, length:3} こういう中身になってていいじゃないかと思うんですがそうはしないんですね。 いや、まぁどうでもいいんですが。 あ、次にpush('foo')しときにlength見て{3:'foo', length:4}になるから嬉しいのか。 lengthだけ持ってても十分なのか。なるほどなるほど。 : デフォルトの名無しさん [sage] 2016/05/31(火) 20:32:52.55 :wxR5ZVVT nullしかない言語は、dbNullを扱えるようになってるような。 : デフォルトの名無しさん [sage] 2016/05/31(火) 22:33:17.75 :C610iy1k 末端に判定ロジック大量に積んでるのか ウンコですね : デフォルトの名無しさん [sage] 2016/05/31(火) 22:51:11.93 :ZB9BdGtV そういった言語では例えば存在しないプロパティにアクセスすると例外となるので必要性が薄い。 JSがスクリプト言語だからこそ映える設計。 ぶっちゃけ歯抜けはよほどの場面じゃないと推奨しない。 言語エンジンの最適化試行ぶち壊しで気持ち悪い。 あと、Array.prototype.lastなんて夢でも死んでも使わないように。 その機能の標準化が一番危うくてデリケートで予測が付かない段階にきてる。 今最もprototype下に自作してはならない機能の1つ。 : デフォルトの名無しさん [sage] 2016/05/31(火) 23:04:26.90 :VEM8svzW > lengthは3で、キーは何も無いと言う。 [,,,] は Array.prototype 系と for 文で走査プロパティが異なるので注意が必要だ Array.prototype.forEach はプロパティが存在する値のみを走査する為、[,,] では何も走査しない [,,,].forEach(function (value) { console.log(value); }); // コンソールに何も出力しない [undefined,undefined,undefined].forEach(function (value) { console.log(value); }); // undefined を3回出力する 少し、話がそれるが、プロパティの存在する値にだけ処理を行うというのは重要なことだ の例でいえば、次のように書けるだろう ttps://jsfiddle.net/b1x6nohm/ 対象プロパティが String 型なので falsy な値として '' を使用している null を使うのなら対象が Object 型である必要がある : デフォルトの名無しさん [sage] 2016/05/31(火) 23:13:56.84 :C610iy1k これもう議論にならんやろ 本人以外は皆仕様知っててこの態度なんやし : デフォルトの名無しさん [sage] 2016/05/31(火) 23:17:06.49 :VEM8svzW でprototype拡張されていなかったのでいわなくても伝わるだろうと思って伏せていたが、Array.prototype.last はあくまでも便宜上のサンプルねので念のため Array.prototype 拡張は将来的に同名プロパティが定義されたときに互換性が崩れるのでお勧めしない 静的関数や独自オブジェクトによる拡張で代用するのが妥当だろう 何らかの理由でどうしても定義したいのなら一昔前のfor-inによる汚染問題を解消するために Object.defineProperty を使うべきだ Object.defineProperty(Array.prototype, 'last', {writable: true, enumerable: false, configurable: true, function last () {}}); : デフォルトの名無しさん [sage] 2016/05/31(火) 23:19:21.13 :VEM8svzW は SyntaxError だったので訂正 Object.defineProperty(Array.prototype, 'last', {writable: true, enumerable: false, configurable: true, value: function last () {}}); : デフォルトの名無しさん [sage] 2016/05/31(火) 23:20:01.54 :wxR5ZVVT まぁ、何度、経験ないだろ、なんて煽ってもそこだけ返事がないところみると、 「本人以外は全員わかってる」んだろうけど、笑えるわ。 : デフォルトの名無しさん [sage] 2016/05/31(火) 23:38:40.59 :24hp8pmx お前はいつか事故るぞ。投薬履歴だって表示が間違っていれば死人が出るんだ。 Web系の「リロードすれば万事おk」のノリでは駄目なんだ。お前はそれですらないが。 ただ、検証を手抜きすれば単価はいくらでも落とせるわけで、このように、 一通りの知識すらない馬鹿を雇って一通りの検証すらせずに出荷する悪徳業者をどうするかは 今後の課題になるのだろうね。 契約上、ソフトウェアのバグについては責任追及できないようになっているのだろうけど、 これまでソフトウェア産業が培ってきた常識すら知らない奴がコーディングし、 まともな検証すらせずに出荷するというのは、業務上過失致死/偽計業務妨害に問われるべきだ。 AS IS WARRANTY を完全に悪用している。 とはいえ、普通に考えればこういう悪徳業者はいつか出てくるわけで、不思議ではない展開だ。 死人が出てこの構造が判明してからでないと、行政は動かない。 願わくば、お前がその最初の犠牲者となり、自業自得を以て業界の浄化に貢献してくれ。 というわけで君には「人殺し君」というあだ名をあげよう。 多分君は既に人を殺しているか、今後人を殺す。 無知も罪なのだよ、業界によっては。 それはさておき、ここに来て気づいたが、 AS IS WARRANTY って性善説ベースだったんだな。 こりゃ性悪説ベースの何かを導入しないと駄目だ。 とはいえ資格なんて糞の役にも立たない業界だし、なかなか難しい。 調べた限りではPL法も適用外だし、悪徳業者はやりたい放題だ。 (ただここまで来るとマ板の話題でスレチだが) 話を聞いている限りこいつは鯖屋で、ソフトウェアの知識は一切無い。 フリーソフト等を組み合わせれば悪徳零細学生レベルでも見目麗しいシステム()を構築でき、 素人を騙せる時代になった。そしてそれがすべて自分の能力で出来たものだと勘違いしている。 (組み合わせる能力はあるが、使われているソフトを記述する能力は無いことに気付いていない) とはいえ、現実問題として、これを顧客に見抜けというのは不可能だろう。 なんだかなあ。 : NAS6 ◆n3AmnVhjwc [] 2016/05/31(火) 23:43:38.27 :ZnwkUC0d ttp://nas6.main.jp/htm000.htm x3domのサンプル集とライブラリ 完璧な2/3D行列計算ライブラリに仕上がりました x3domは簡単でいいよ ポリゴンテスト&ライブラリヘルプ.htmでも見てください 完璧に計算されています^^ : デフォルトの名無しさん [sage] 2016/05/31(火) 23:44:24.50 :+fB1tt6W > 静的関数や独自オブジェクトによる拡張で代用するのが妥当だろう そうやって作られたのがUnderscore(lodash)というライブラリで わざわざ作らずとも、 _.last([1,2,3]) で取得できるんだよ。 : デフォルトの名無しさん [sage] 2016/05/31(火) 23:50:20.60 :C610iy1k RASISすら守っとらんみたいやし RDB使ってる現場やけど、そんな場当たり的な実装の経験ないで 普通はリクエスト間違ったら全部エラーやしfail safe前提や あんさんが無知すぎるんやで? : デフォルトの名無しさん [sage] 2016/06/01(水) 00:02:09.20 :J/AVgXyA DB屋ならjoinできないようなデータ構造の時点で問題あると気づくやろ なんでそんな無理して知ったかぶるんやろ : デフォルトの名無しさん [sage] 2016/06/01(水) 00:03:48.85 :XVpspPb0 行列のライブラリはどれが有名か知らんけど、 このglMatrix.jsはスター多くていいんじゃないかな? ttps://spphire9.wordpress.com/2011/04/05/javascript%E3%81%AE%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%80%81%E8%A1%8C%E5%88%97%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/ > 前に調べたときは全然見つからなかったけど、WebGL関係で調べていたら結構見つかったのでメモ。 > > glMatrix.js > ttps://github.com/toji/gl-matrix > ttp://glmatrix.net/ > webgl-mjs ttp://code.google.com/p/webgl-mjs/ > Sylvester ttp://sylvester.jcoglan.com/ > CanvasMatrix.js khronosのWebGLのチュートリアルで使っているがどこでダウンロードできるのか分からなかった > glMatrix.jsがシンプルなのでオススメ。 > > 2014/01/19追記 > glMatrixの公式サイトができてた。 : デフォルトの名無しさん [sage] 2016/06/01(水) 00:04:59.00 :XVpspPb0 > DB屋ならjoinできないようなデータ構造の時点で問題あると気づくやろ どういうこと? nullがあるとjoin出来ないとかそういう話? なわけないよな。left joinとかあるわけだし。 : デフォルトの名無しさん [sage] 2016/06/01(水) 00:11:15.87 :XVpspPb0 あとすべての項目をjoinに使うわけでもないし。 : NAS6 ◆n3AmnVhjwc [] 2016/06/01(水) 00:18:19.22 :CPNT1MjH ライブラリを作る前に探したけど 回転行列←→回転ベクトル、回転行列←→四元数 この相互変換を扱ってるのは見当たらなかったよ : デフォルトの名無しさん [sage] 2016/06/01(水) 00:19:48.60 :XVpspPb0 興味ない。 : デフォルトの名無しさん [sage] 2016/06/01(水) 00:20:56.87 :XVpspPb0 もう少し丁寧に言うね。 githubで公開してもいないようなものを使う気にはならない。 : デフォルトの名無しさん [sage] 2016/06/01(水) 00:21:24.97 :iqAUu6wp 俺なんだけど挙げたデータ構造は あくまで俺がてきとーに想像しただけなので それで誤解与えてしまってたらごめん : デフォルトの名無しさん [sage] 2016/06/01(水) 00:42:46.14 :JLTaiLCk 多分そちらも気づいていると思うけど、人殺し君には「信頼性を上げる」という感覚がないんだ。 だから俺たちが何を問題視しているのか、全く通じていない。 ただ、当たり前のように信頼性を上げようと努力してきた側からすると、 業界全体が悪徳業者に対して全く無防備だったってのが結構ショックなんだよね、、、 というかよくこれまでこれで回ってたなと。 : デフォルトの名無しさん [sage] 2016/06/01(水) 00:43:15.64 :r3hfxk1X 必死すぎて笑えるw おつかれさん、底辺学生さん。 : デフォルトの名無しさん [sage] 2016/06/01(水) 00:46:19.01 :XVpspPb0 そちらってお前誰だよw : デフォルトの名無しさん [sage] 2016/06/01(水) 01:00:31.81 :+8Has+9Z あなたは x3dom.js と比較して何がどう「完璧」なのかを説明する必要があると思うのだが ドキュメントも簡易説明文のみで x3dom.org と比べれば雲泥の差があるように思う ttp://www.x3dom.org/ : デフォルトの名無しさん [sage] 2016/06/01(水) 01:02:19.24 :J/AVgXyA 関連があるのに関連を付けずに 見つからない場合もright joinと同じ事するんやろ? 破綻しとるやん : デフォルトの名無しさん [sage] 2016/06/01(水) 01:05:25.70 :XVpspPb0 関連つければいいだけだよね? まさか片方にnullが入っていると関連がつけられないとでも? left joinでもright joinでも、別に使うことに問題無いし 問題ないから標準機能なのだし、どこが破綻? DB素人なら、すいません、素人だから 勘違いしてましたって謝れば許してあげるよ?w : デフォルトの名無しさん [sage] 2016/06/01(水) 01:10:30.88 :+8Has+9Z 言い争っている人、所詮は机上の空論なのでコードを書いて語り合ってくれ 各自にとっては空論ではないのであろうが、持論が相手に正しく伝わっているとは思えん : デフォルトの名無しさん [sage] 2016/06/01(水) 01:12:17.78 :XVpspPb0 今はRDBMSの超基本レベルことを分かってないやつが相手みたいだから そこまでやる必要ないかなw : デフォルトの名無しさん [sage] 2016/06/01(水) 01:22:41.36 :JLTaiLCk いや十分通じてるよ。表面的には。 ただ、根本的な部分で人殺し君は分かってないから、通じない。 とはいえこれは、ここでなんとかなる話ではないよ。これではどうやっても平行線だ。 : デフォルトの名無しさん [sage] 2016/06/01(水) 01:25:01.12 :+8Has+9Z お互いに相手が低レベルと思っているように読めるんだがな 相互理解が目的なら言葉を選べ 馬鹿にしたいなら他の人の邪魔になるから口を慎め : デフォルトの名無しさん [sage] 2016/06/01(水) 01:31:01.82 :XVpspPb0 質問に答えられない方はどちらか? それを見ればわかるでしょ。 まだ、レス帰ってきてないよw : デフォルトの名無しさん [sage] 2016/06/01(水) 02:20:52.04 :r3hfxk1X なんか敵を見間違えてるんじゃねえの? 余裕無い奴は大変だな。 そりゃ、せっかくundefinedなのを無意味にnullで初期化とかドヤ顔で言っちゃうわけだ。 : デフォルトの名無しさん [sage] 2016/06/01(水) 09:21:35.68 :jwFJ9KH2 こんなにもめるんならundefinedは廃止してnullのみにすべき。 : デフォルトの名無しさん [sage] 2016/06/01(水) 09:26:09.02 :P2FwW4b5 社会から未定義の連中が未定義値に物申すとか1万年早い : デフォルトの名無しさん [sage] 2016/06/01(水) 09:33:08.65 :wzx/dknC 嫌なら定義するなよ : デフォルトの名無しさん [sage] 2016/06/01(水) 13:31:22.60 :KEu/R4xX まぁ、null統一、すべてのプロパティは埋めて、ビューから相当するデータ座標を取らずに、データからビューを定義しよう、そのためには、 ビューの状態全体に対して、必要か不必要かは置いておいてすべてのビューが表示しうる形での裏画面を持っておこう、 って大富豪の主張がありうる、って話だよね。 面白い事に。 XMLDBとか、KVSとか、多次元配列DBに向いてない人なんだろうけど。 そもそもJOIN出来ないからなんたら、なんていう人は、そもそもそういうDBに向いてないけど。 : デフォルトの名無しさん [sage] 2016/06/02(木) 01:24:38.27 :g2tgMhPe 犬の糞と猫の糞。 : デフォルトの名無しさん [sage] 2016/06/02(木) 02:42:13.57 :XqRYmg3l 関連つければいいだけだよね その通り つけてないけど : デフォルトの名無しさん [sage] 2016/06/02(木) 02:43:59.04 :XqRYmg3l 自分の説明してる仕様で実現できてる事が何かも把握してないみたいやね こりゃ周りの奴らは大変やで : デフォルトの名無しさん [sage] 2016/06/02(木) 08:36:48.79 :8VCgKElP 前提知識で合意のとれてない議論に意味があるのか 端から見たらどちらも相手を見下す事が主論になってる どちらの方が正しいとか、もうどうでもいいから : デフォルトの名無しさん [sage] 2016/06/02(木) 08:39:24.52 :I85Xb9LU バカに議論はできない 壁に向かって話してろゴミ : デフォルトの名無しさん [sage] 2016/06/02(木) 08:51:25.41 :0vkxmVo8 脳味噌がnullってことで解決 : デフォルトの名無しさん [sage] 2016/06/02(木) 09:15:26.93 :oJukbexp nullほど。納得 : デフォルトの名無しさん [sage] 2016/06/02(木) 13:24:04.29 :BtmdPReZ 結局nullは要るとして、undefinedが無ければ代わりにissetみたいなのが要る。 内部を露出して活用を許すのと、メタ的に内部に干渉するの、どちらが良いかという話。 : デフォルトの名無しさん [sage] 2016/06/02(木) 13:58:00.69 :tGqw3Zei 上手いこと云うな オレのコピペにしますん : デフォルトの名無しさん [sage] 2016/06/02(木) 15:58:54.65 :gjH3g/Dc その通り。特に動的言語なら。 mallocした結果をどの型として使うか論にも近いけど。 : デフォルトの名無しさん [sage] 2016/06/02(木) 16:21:31.47 :0vkxmVo8 nullなことばっかり言ってるんじゃないよ : デフォルトの名無しさん [sage] 2016/06/02(木) 16:42:37.48 :T7FoO03Y (´∀`) ぬるぽ : デフォルトの名無しさん [sage] 2016/06/02(木) 16:44:57.76 :tGqw3Zei ガッ : デフォルトの名無しさん [sage] 2016/06/02(木) 17:03:14.89 :E1oCL6WJ .r'"''、 _,,,.. -ー''''''ー、 ./゙'=@._ ―ー-, /\ /\ ┏┓┏┓ .,iー-、 .゙l l,,_ / _ . l ! .!./ ゝ-、 /:::::::ヽ____/::::::::ヽ、 ┃┃┃┃ .!, .゙'" ヽ. ヽ,,,,.. -''ン゛ .} .| .゛ ,,、 〔゙|.ο ! 丿 ::.__ .::::::::::::: __ ::::ヽ_ ┃┃┃┃ l , r .iヽ l . ,/ .,./ l / _| ‘'ヽ / / /。 ヽ_ヽv /: /。ヽ ::::::ヽ ┃┃┃┃ ./ .l/ / .! .! .... ‐゛ ‘''-, .! .i| ´ |┏━/ / ̄ ̄√___丶  ̄ ̄\ ::::|━━┓┃┃┃┃ .l゙ , .i′亅 ! / .x;;'''''''、 . ! ! │ゝ―i .厂 ┃ | .:::::::::: / / tーーー|ヽ ..::::: ::| ┃┃┃┃┃ │ i゙.l ,ト--″ l .!_ .,,、 ゙'、 | .,! ! .|., ―┘ / ┗━| .:::::. ..: | |ヽ ::|━━┛┃┃┃┃ .! .∨ .,..、 l゙ .| .l. l ∨ ! .| .] i‐ 、 .ヽ、 | ::: | |⊂ニヽ| | :::::| ┗┛┗┛ . l. : ,i┐゙‐'゛ ゙l l. `″ / .! .! ゝ./ . l //| : | | |:::T::::| ! .::| ┏┓┏┓ `''''" ヽ,,,,,,..-'―′ \,,,,,,,,,.. '" ゝ ノゝ、,,,,,./ -.../// \: ト--^^^^^┤ 丿 \ . ┗┛┗┛ : デフォルトの名無しさん [sage] 2016/06/02(木) 17:41:24.84 :tGqw3Zei ∧ < >_∧ = ()二)V;・∀・) \ヽ ノ ) ノ(○´ノ ガッ (_ノ(__) : デフォルトの名無しさん [sage] 2016/06/02(木) 19:45:18.42 :foj8oVvi __ 、]l./⌒ヽ、 `ヽ、 ,r'7'"´Z__ `ヽ `ヽ、-v‐'`ヾミ| |/三ミヽ `iーr=< ─フ < /´ r'´ ` ` \ `| ノ ∠_ `ヽ、__// / |/| ヽ __\ \ヽ |く ___彡'′ ``ー// |_i,|-‐| l ゙、ヽ `ヽ-、|! | `ヽ=='´ l/| | '| |!|,==| ヽヽr'⌒ヽ|ヽ| | | ┏┓ ┏━━━┓ | || `Y ,r‐、 ヽl,_)ヽ ゙、_ | | |. ┏━┓ ┏┛┗┓┗━━┓┃ ...ヽリ゙! | l::ー':| |:::::::} |. | / l|`! |i |. ┃ ┃ ┗┓┏┛ ┃┃┏━━━━━━━.j | l|.! l::::::ノ , ヽ-' '´ i/| !|/ | |リ ━━━━┓┃ ┃ ┃┃ ┏━┛┃┃ ┌┐ | l| { //` iー‐‐ 'i 〃/ j|| ||. |ノ ┃┃ ┃ ┃┃ ┃┏┓┃┗━━━.んvヘvヘゝ | l| ヽ ヽ / _,.ィ ノ/川l/.━━━━━┛┗━┛ ┃┃ ┏┛┃┃┗┓ i .i ゙i\ゝ`` ‐゙='=''"´|二レ'l/″ ┏━┓ ┗┛ ┗━┛┗━┛ ノ ! --─‐''''"メ」_,、-‐''´ ̄ヽ、 ┗━┛ r|__ ト、,-<"´´ /ト、 | { r'´ `l l /|| ヽ ゙、 } } | _|___,,、-─‐'´ | ゙、 `‐r'.,_,.ノヽ、__ノ/ | | |、__r'`゙′ | |/ i | | | | : デフォルトの名無しさん [sage] 2016/06/02(木) 23:25:10.25 :3RkkmY6H > 関連つければいいだけだよね > その通り > つけてないけど ってことは、ORM使ってないのか? ORM使ってプログラム言語でモデルを定義していってその関連もモデルで定義する。 その結果をマイグレーション機能を使ってデータベースに反映、 ついでにER図も生成しちゃうっていうのが今時の開発でしょう? モデルに関連を定義しておかなければ、あるモデルから関連している 別のモデルのデータを取得するのができないわけで開発効率下がりまくりでしょ? (厳密に言えば手動でコードを書けば取得できるがそれだとORMを使う意味がない) : デフォルトの名無しさん [sage] 2016/06/03(金) 00:32:44.38 :1GfBsi1m 出尽くし感があるので纏めておく。 人殺し君は悪徳業者に勤めており、検証不十分のソフトウェアを出荷している。 そのソフトウェアでは競合系のバグ等は完全に放置されている。 平たく言えば、間違った内容/値が表示される事が偶に発生する。 とはいえ、再現確率は低く(1日〜1週間に1回程度)、再び確認すればほぼ常に正しい値が表示されるため、 「見間違いだった」として処理されているはず。 結果、このバグによって発生した医療ミスは本当は医者のミスではないのだが、 「医者の過労または不注意による見間違い」として処理される。 また医療ミス自体も隠蔽される方向のため、二重に隠蔽されることになる。 医療系は単価が高いため、悪徳業者にとっては甘い汁状態だ。 医療関係者は金を吸い取られた上に、ぬれぎぬを着せられている可能性がある。 もし仮に医療系の人がこれを見ていて、「表示がおかしかった」事に気づいたことがあった、 また「最近『見間違い』事故が多すぎる」というときは、この類の悪徳業者の製品でないか確かめた方がいい。 悪徳業者の技術レベルは信じられないほど低い。普通のIT関係者なら絶句する。 JavaScriptの場合ソースは確認可能な事が多いので、非公式にでも知り合いのIT実務者を頼り、 ソースを確認してもらえば、すぐに判明すると思う。 このスレのこれまでの議論およびここに記載した情報で十分だと思うが、 もしもっと詳細を確認したい医療関係者がいれば、 以下スレで問い合わせてくれれば対応するかも。 > ttp://echo.2ch.net/test/read.cgi/tech/1449440793/ 技術的には、 undefinedの何が問題なのか自分で判断できないような馬鹿はundefinedを活用(キリッするなって事だ。 では続きをどうぞ。 : デフォルトの名無しさん [sage] 2016/06/03(金) 00:47:09.21 :ZgLr+wQe JSONってundefinedがないけれど、 じゃあ存在しない値にアクセスした時各言語ではどんな挙動をするのだろう? : デフォルトの名無しさん [sage] 2016/06/03(金) 01:00:55.33 :4VbjelCP 例外が発生する : デフォルトの名無しさん [sage] 2016/06/03(金) 01:57:17.93 :qC3of5q8 そうじゃない言語もあるんじゃないの? : デフォルトの名無しさん [sage] 2016/06/03(金) 08:37:03.10 :yTlzgE6f 例えば? : デフォルトの名無しさん [sage] 2016/06/03(金) 08:38:53.12 :oIsEebnB おまえの頭ん中 : デフォルトの名無しさん [sage] 2016/06/03(金) 08:41:45.97 :WTDDDw9O 検証不十分とか人殺しだとか言ってくれるよなぁ。 試験中ですら、稀にも発生したらハンコリレーで大変な目に遭うよ。 医療ミスがどうとか言ってるけど、隠蔽されるわけないじゃん。 見間違いだった、もあり得ないよ。 お前ら一般側には隠蔽されているように見えるんだろうけど、製造業のラインからの不良品混入程度に、委員会とかで裁かれるよ。 表示内容の確認に対して不足があった、って話になるだろうね。 これ判例もある。医者の判断と機械の値が一致しない場合は、医師の判断が優先され、かつ医師がその間違った値を信じ込んだ場合は「治療行為が行えるのは医師のみ」という原則に則ると、医師が医師である理由を満たせていない、ってやつ。 undefinedはたくさん存在してるじゃん。 書いてないだけで。 例外が発生するってのは良くない動きだと思うけどな。コスト高い。 : デフォルトの名無しさん [sage] 2016/06/03(金) 08:55:59.89 :e85j2qyA 所詮は命令、人それぞれ 自己満足で解決 : デフォルトの名無しさん [sage] 2016/06/03(金) 13:00:26.72 :D6MzcBW9 このバカはその手動で書くと言うのを良しとしてるんやで そしてあと付けで関連つければいいだけだと抜かしよる 付けとらんから問題なんやろ : デフォルトの名無しさん [sage] 2016/06/03(金) 13:11:35.19 :WTDDDw9O どういう意味だろ、手動で書くとは。 俺はそれを言った覚えは無いが、言わなくてもデータ:DB:ビュー全体に対するマッパー自体の実装の話だけどね。 : デフォルトの名無しさん [] 2016/06/03(金) 13:21:31.04 :D6MzcBW9 ORMで関連付けてるならundefined云々での分岐なんて出るわけないやろ その場しのぎで適当言いすぎやろ頭おかしいんちゃうか : デフォルトの名無しさん [sage] 2016/06/03(金) 13:35:21.14 :WTDDDw9O 当たり前じゃん。多次元DB触った事無いのかな? クラスベースな考え方してるからそういう思考なんじゃない? undefinedで分岐、って考えるから頭追いつかないんじゃないかな。 値は、「定義されていないか、オブジェクトか、値か、値として表すことのできるオブジェクトか、null」。シンプルじゃん。 javascript屋ならもっと理解早いと思うんだけどな。 HTMLのスクレイピングそっくりなんだけど。 : デフォルトの名無しさん [sage] 2016/06/03(金) 16:01:53.05 :LK0McYVX >HTMLのスクレイピング すまん。 言葉の意味が分からない。 つまり、どういうこと? : デフォルトの名無しさん [sage] 2016/06/03(金) 16:54:41.91 :iJVPPkrY > 値は、「定義されていないか、オブジェクトか、値か、値として表すことのできるオブジェクトか、null」。シンプルじゃん。 これをシンプルだと思ってる奴は何脳なんですかね : デフォルトの名無しさん [sage] 2016/06/03(金) 17:23:55.54 :WTDDDw9O 誤解のしようが無いでしょ。 その項目が無かった、は「その項目が無かったクラス」のインスタンスが格納されている、とか、 「その項目はあるけどまだ結果は出ていない」クラスのインスタンスが格納されている、とか、 定義しだすときりがないと思うけど。 npmに登録されているモジュール全体の空フォルダがnpm initしたら作成されたらinode一瞬でなくなるじゃん。 かつ、空ディレクトリ作って準備してても、そのモジュールが更新されたら準備とは異なるし。 さらに、requireは別にpackage.jsonに依存せず使えるよね。 存在チェック、中身のパーズ、その他を経て、成功か失敗か、別のフォルダを見るのか決まるっしょ。 undefinedは、そのディレクトリのない状態。 nullは、module.exportがnullの状態。 : デフォルトの名無しさん [sage] 2016/06/03(金) 17:31:46.02 :iJVPPkrY で、お前は何脳なの? : デフォルトの名無しさん [sage] 2016/06/03(金) 17:39:25.42 :D6MzcBW9 その多次元DBはテーブル同士の関連必須やで? あんさんの言ってる仕様はキーそのものが取得できない仕様やから ORMなんて出しとるけど全く関係ない話やろ : デフォルトの名無しさん [sage] 2016/06/03(金) 17:41:36.14 :hMBisG69 ∩ _rヘ / ヽ∩ . /_ノυ___ιヽ_ \ / / /⌒ ⌒\ ヽ \ ( く /( ●) (●)\ > ) お前らの頭は \ `/::::::⌒(__人__)⌒:::::\' / ヽ| |r┬-| |/ \ `ー'´ / (( (ヽ三/) (ヽ三/) )) . (((i ) ___ ( i))) / / /_ノ ヽ_\ ヽ \ ( く /( ●) (●)\ > ) くるくる \ `/::::::⌒(__人__)⌒:::::\' / ヽ|  ̄ |/ \ / ∩∩∩ . ∩∩∩ .∩_:||_:|_:| |_:||_:|_:∩ │ ___ つ ⊂ ___ │ ヽ ノ ___ ヽ ノ / / /_ノ ヽ、_\ ヽ \ ( く o゚((●)) ((●))゚o > ) パーだおwwwwwwwwwwwwwwwwwww \ `/::::::⌒(__人__)⌒:::::\' / ヽ| |r┬-| |/ \ | | | / | | | `ー'´ : デフォルトの名無しさん [sage] 2016/06/03(金) 17:43:47.98 :D6MzcBW9 説明が酷すぎるやろ なんやこれわざとやってんのか? : デフォルトの名無しさん [sage] 2016/06/03(金) 17:48:26.82 :cxSjYB6R なんでバカに構うの? おまえもバカなの? バカ同士気が合うんだな : デフォルトの名無しさん [sage] 2016/06/03(金) 18:46:51.17 :qTHUaoua 類は友を呼ぶ : デフォルトの名無しさん [] 2016/06/03(金) 19:43:22.52 :1XJ7uNxl 初心者です。 jsonを受信しようと組んでみましたが、うまくいきません。 ブラウザはFireFoxで、FireFoxのスクラッチパッドで試しています。 var req = new XMLHttpRequest(); var requestUrl = 'ここにアドレス'; req.onreadystatechange = function() { if(this.readyState == 4 && this.status == 200) { console.log(this.responseText); } } req.open( 'GET', requestUrl); req.send( null ); アドレスの部分をブラウザに直打ちするとブラウザに返ってきたjsonが表示されます。 その状態で上記のスクリプトを動かすとコンソールにjsonが表示されます。 ただ、ブラウザが別のページだとコンソールには何も表示されません。 どのようにすればよろしいでしょうか? ログには「クロスオリジン要求をブロックしました・・・」のようなメッセージが出ます。 : デフォルトの名無しさん [sage] 2016/06/03(金) 20:10:29.09 :p9oJqMem また自演かよ 頭いかれてんなこいつ : デフォルトの名無しさん [sage] 2016/06/03(金) 20:20:21.84 :WTDDDw9O テーブル同士の結合www まあ、おまえが多次元DB使ったとこ無いことは理解したよw : デフォルトの名無しさん [sage] 2016/06/03(金) 20:31:02.84 :n0THg94n 頼むから!!! 頼むから!!!もう!!!二度と!!! onreadystatechangeなんて使わないでくれ!!!!! readyState?!目が腐る!!!!! : デフォルトの名無しさん [] 2016/06/03(金) 21:01:10.72 :1XJ7uNxl どうすればいいか教えてください マジで困っています : デフォルトの名無しさん [sage] 2016/06/03(金) 21:08:50.41 :0G5q73nh ttp://www.html5rocks.com/en/tutorials/cors/?redirect_from_locale=ja : デフォルトの名無しさん [sage] 2016/06/03(金) 21:43:27.43 :6tJjdY0+ nullと比較する時は緩い==の方を使うのは今の時代でも変わりありませんか? : デフォルトの名無しさん [sage] 2016/06/03(金) 21:48:09.86 :TYtzKZdV 自演乙 : デフォルトの名無しさん [sage] 2016/06/03(金) 22:37:38.94 :D6MzcBW9 何や君結合と関連の違いも分からんで突っ込んどったんか? どおりで説明が怪しいわけやな 必死に無知を隠してたんやから : デフォルトの名無しさん [sage] 2016/06/04(土) 00:08:42.59 :3lsMjWzh クロスドメインなら、JSONP かな? 「jsonp クロスドメイン jquery」で検索! : デフォルトの名無しさん [sage] 2016/06/04(土) 08:28:02.51 :vbA2Z8Vh 昔から null 判定にはほとんど ToBoolean だけ使っていますが、困ったことはありません。 Polyfill コードを書くときには === を使うこともあります。 : 憲法に守られる在日スパイ・創価・ヤクザ [sage] 2016/06/04(土) 08:57:11.18 :SVOilD6U 皇室の危機に気づいていますか? 日本は、2,000年以上続く皇室のおかげで、世界最古の国として、 ギネス認定されているそうです。 自民党は憲法の改正で、日本の国家元首=天皇陛下と条文に明記することで、 天皇制廃止をもくろむ帰化人スパイ勢力(政党、憲法学者、弁護士・言論人等)から、 皇室を守ろうとしています。 ※イギリス、オランダ、ノルウェー、デンマーク、スペインなどは国王を国家元首と 憲法上に定めている。(日本同様、政治の実権は有さない。) ※日本で支配的な「護憲派」憲法学者の多くは反天皇。憲法から天皇の条項ごと削除したい 人たちなので、本来は改憲派である。(「象徴天皇制度と日本の来歴」坂本多加雄著より) 公明党「天皇は日本の国家元首ではない」 ttp://hayabusa3.2ch.net/test/read.cgi/news/1363226509/ 自民党・西田昌司 「橋下さん(おおさか維新)の憲法改正は、国柄を破壊することが目的」(自民とは真逆) ttps://www.youtube.com/watch?v=sRkdQ2Rlwxs 日本共産党 「目標としては天皇制をなくす立場に立つ」「天皇制のない民主共和制をめざす」 ttp://www.jcp.or.jp/jcp/22th-7chuso/key-word/b_1.html#Anchor-0507 反天皇、反皇室で共謀する民主党(現民進党)と田原総一朗 ttp://blog.liv edoor.jp/fjae/archives/51968115.html 田原総一朗「天皇は、働かないで国民の税金で食ってる。」 ttps://youtu.be/6Kd1LwY9e0I?t=280 (4:40〜) ※ただし、自民単独(カルト公明党抜き)で2/3議席以上与えない限り、 野党と公明党に骨抜きにされる。 ↓ 自民・船田氏…「野党・公明党のみなさんと協議し、衆参両院の3分の2をこえる人が 賛成してくれなければ発議はできない。だからこれから大いなる妥協が始まる。 自民の憲法草案は、 ズタズタになると思って結構だ」 p ttp://hope.2ch.net/test/read.cgi/seijinewsplus/1425226082/ : デフォルトの名無しさん [] 2016/06/04(土) 13:17:48.82 :BFaRmD8M ジャバスクリプトをあまり意識せずに、ウェブアプリ開発できるソフトってありますか? : デフォルトの名無しさん [sage] 2016/06/04(土) 13:26:46.16 :qPi1xPU6 ねえよそんな店 : デフォルトの名無しさん [sage] 2016/06/04(土) 15:45:22.85 :3F7VjM1T TypeSprict : デフォルトの名無しさん [sage] 2016/06/04(土) 15:58:08.55 :ZPhk/eMO TypeScriptは JavaScript+α という言語だからw : デフォルトの名無しさん [] 2016/06/04(土) 17:42:38.85 :vhhVz63c ttps://www.youtube.com/watch?v=KApAJhkkqkA ↑こーいうふうに タグとか補完して欲しいんですけど、 何のエディタ使えばいいんですか? Windowsでお願いします。 : デフォルトの名無しさん [sage] 2016/06/04(土) 18:03:53.99 :BiFmHB/P ttps://www.sublimetext.com/ その動画のやつならWindowsでも使えるよ。 : デフォルトの名無しさん [] 2016/06/04(土) 18:13:24.70 :vhhVz63c ありがとうございます! : デフォルトの名無しさん [sage] 2016/06/04(土) 18:36:53.03 :TumyIwY9 「あまり」とは具体的に何ですか? JavaScriptを使いながらJavaScriptを意識しないのは相当矛盾していると思いますが、何が目的ですか? : デフォルトの名無しさん [] 2016/06/04(土) 19:03:08.12 :vhhVz63c 動画のしょっぱなのhtmlとか入力すると 必要なタグをボンっと出すやつどうやるんですか?? : デフォルトの名無しさん [sage] 2016/06/04(土) 19:46:47.25 :925XNPqI SQLが集合論だとも理解してない人には難しかったかな。 小さなオツムで、undefinedは不要、nullが含まれている行と、行がないのは等価値だと一生騒いで、 そのままエンジニアにならずにホームレスにでもなってくれw : デフォルトの名無しさん [sage] 2016/06/04(土) 19:53:11.80 :Eqdj22Ns 理解してない論をやる人はいい加減にしてくれ 理解させようと説明して歩み寄るならともかく、お互いに避難しあってるだけでは前進しないぞ その気がないなら沈黙で返すのが周囲に迷惑をかけない唯一の方法 : デフォルトの名無しさん [] 2016/06/04(土) 20:54:05.74 :71w07kjf 作成時にコーティングを必要とせず、ジャバスクリプトの動的効果は享受したいということです : デフォルトの名無しさん [] 2016/06/04(土) 21:05:17.49 :AIJuo/HE Haskell使えば大抵の問題は片付きます。 : デフォルトの名無しさん [sage] 2016/06/04(土) 21:05:18.12 :Eqdj22Ns コーディングしないならそれはプログラミングではないですね。 既存のライブラリや使いまわせるコピペコードを検索して探してみてはいかがですか。 いずれにしても、このスレで聞くには趣旨がずれていると思いますが。 : デフォルトの名無しさん [] 2016/06/04(土) 21:16:28.25 :AIJuo/HE 質問に答えていくだけでソフトウェアが完成するとしても、それはプログラミングです。 : デフォルトの名無しさん [sage] 2016/06/04(土) 21:27:23.54 :Eqdj22Ns 言い方が悪かったでしょうかね。 JavaScriptを勉強せずにJavaScriptを書きたいとする要望が子のスレの趣旨に反していると言いたかったのですが。 : デフォルトの名無しさん [] 2016/06/04(土) 21:29:46.92 :AIJuo/HE このスレ自体、板違いなのですが。 : デフォルトの名無しさん [sage] 2016/06/04(土) 22:02:26.83 :Y4cfNkA+ 薀蓄垂れてるやつのわんだほーなコード見たいんだが : デフォルトの名無しさん [sage] 2016/06/04(土) 22:27:00.97 :o5H+FwEM そう思うなら、質問しなければいいんじゃないですかね? : デフォルトの名無しさん [] 2016/06/04(土) 23:09:22.49 :AIJuo/HE 質問したことはありませんが。 : デフォルトの名無しさん [sage] 2016/06/04(土) 23:34:41.13 :M/5wRGJi 暇つぶしに板違いのスレで遊んでいるのか : デフォルトの名無しさん [sage] 2016/06/05(日) 00:03:18.80 :mO7gP4jx この状況でそんな基本事項を嬉々として出すって、 おっさん本当に学生以下とちゃうか? 少しはまともなレスしろや そもそも集合(テーブル)間の射の話なんやから、 そのレスじゃ何にも反論できとらんどころか、 結局おっさんの仕様じゃ繋がっとらん状況じゃ自分で自分の首絞めとるやろ そして自分から多次元DB持ち出してきた癖に何棚上げしとるんや 知ったかと煽りしかできない珍獣は、某関数型ヴォルデモートでお腹いっぱいやで : デフォルトの名無しさん [sage] 2016/06/05(日) 00:18:27.24 :hY1lA33B さっさとお手本コード晒せよ こんだけ偉そうなこと言ってんだからどこに出しても恥ずかしくないレベルのもんかけるんだろ? あくしろよ : デフォルトの名無しさん [sage] 2016/06/05(日) 01:09:47.31 :Ewjxu1z+ は 「JavaScriptのプログラムを作りたいけどJavaScriptを勉強する気がないので、ウィザード形式で質問に答えるだけでJavaScriptコードを生成するジェネレータを下さい」 って事かな さすがにクレクレ君すぎる : デフォルトの名無しさん [sage] 2016/06/05(日) 01:27:22.46 :bEHxSIM9 Haxe (ヘックス) ECMAScript 4に似ている。 Adobe Flashおよび独自のNekoVMで、実行可能なバイトコードにコンパイルされるほか、 JavaScript、ActionScript、C++、C#、Java、PHP、Pythonへのソースコードの変換が可能である : デフォルトの名無しさん [sage] 2016/06/05(日) 01:33:27.00 :mO7gP4jx 誰に言ってるんや? ワイに言ってるならDBの定義の話やからコードもクソもないやろ : デフォルトの名無しさん [sage] 2016/06/05(日) 02:34:08.07 :b0qHmmcL 自意識過剰だね ド頭は大丈夫ですか? : デフォルトの名無しさん [] 2016/06/06(月) 02:21:20.33 :6giGfHQ3 NHKのネットラジオを、どうにかしてクライアント側のJSだけで録音したいと思ってる (基本的にサーバ側の処理は無しにしたい) ストリーミングの録音の実装は初めてなんだが、どうやったら良いのだろうか? 何らかのライブラリを使えば楽そうだとは思うが… : デフォルトの名無しさん [sage] 2016/06/06(月) 05:01:20.04 :QbKl1YZH どうやったらっていうか? なぜそんなことが可能だと思った? : デフォルトの名無しさん [sage] 2016/06/06(月) 12:22:15.75 :23OtUYll ローカルに node.js を立てるとか。 : デフォルトの名無しさん [sage] 2016/06/06(月) 21:05:53.55 :RzJ8yYQp パケットキャプチャ : デフォルトの名無しさん [sage] 2016/06/07(火) 05:14:58.76 :Gl1NOXsx こいつすぐに煽るからわかりやすいな : デフォルトの名無しさん [sage] 2016/06/07(火) 19:02:47.33 :PnKxWLGB ありがとうございました。 できるようになりました。 : デフォルトの名無しさん [sage] 2016/06/07(火) 19:26:52.79 :87JRkB9l 俺ならもう少し嫌な感じで煽るよ。 : デフォルトの名無しさん [sage] 2016/06/08(水) 08:52:28.55 :zEmhDMcI じゃあ俺は馴れ馴れしいコンセプトで煽ろうかな。 : デフォルトの名無しさん [] 2016/06/08(水) 21:39:35.82 :BBcfGQEZ 煽りとかいらねえから ちゃんと質問に答えてやれよ : デフォルトの名無しさん [sage] 2016/06/08(水) 22:37:16.03 :ISsCi+NM > あと、Array.prototype.lastなんて夢でも死んでも使わないように。 ありがとうございます。今のところ、そこに直接追加するような予定はありません。 > あくまでも便宜上のサンプルねので念のため 察しの悪い俺ですが、この点についてはそのように理解しております。ご安心下さい。 で、ですね。今までは個別の変数について var a = []; a.f = function () {}; なんぞしていて、 それで十分だったんですが、インスタンスの数が増えそうだぞって場面がチラホラ出てきました。 そこで、配列を継承したようなクラス?(←便宜上)が必要になりました。 A = function () {}; A.prototype = []; A.prototype.first = function () {return this[0];}; var a = new A(); var b = []; a.push(123); b.push(456); alert(a.first()); // これが呼び出せる //alert(b.first()); // こっちは使えないので汚染されてなくて安心。 今のところ↑と言う風に、A.prototype = []; として単に何となく設定しているのですが、 こういうことをしたいときのイディオムみたいなものはjavascript界隈にありますか? : デフォルトの名無しさん [sage] 2016/06/09(木) 08:26:24.28 :EGkuN86i Web Workerの学習をしたいのですが、此方で大丈夫でしょうか? : デフォルトの名無しさん [sage] 2016/06/09(木) 08:46:22.16 :e3vAFbmO var F = function(age){ this.age = age; } var f1 = new F(1); var f2 = new F(2); var ary = []; ary.push(f1); ary.push(f2); console.log(f1, f2, ary); prototypeなど使わずに、普通にこれでいい : デフォルトの名無しさん [sage] 2016/06/09(木) 09:04:45.80 :5KODI7Ed F ←この手の一文字もん大っ嫌いだは : デフォルトの名無しさん [sage] 2016/06/09(木) 09:05:55.20 :dIu2vu4F 独り言はキミのスマホのメモ帳にどうぞ : デフォルトの名無しさん [sage] 2016/06/09(木) 09:25:17.23 :rjZdspVd スマホ持ってない私みたいのはどうすればいいんですか? : デフォルトの名無しさん [sage] 2016/06/09(木) 09:31:01.62 :E+QhxTx8 var F = function(age){ this.age = age; } こう書くぐらいなら function F(age){ this.age = age; } こう書けばいいのに。 : デフォルトの名無しさん [sage] 2016/06/09(木) 09:35:16.54 :E+QhxTx8 中古で安いの探せば3000円ぐらいで買えるのでは? : デフォルトの名無しさん [sage] 2016/06/09(木) 13:53:50.48 :QTm6YzLa その方法でどうやってfirst()を呼び出すのかな : デフォルトの名無しさん [sage] 2016/06/09(木) 14:40:04.41 :G4u6WZVB 後者は旧石器時代の方式だな : デフォルトの名無しさん [sage] 2016/06/09(木) 16:54:36.03 :+YsNEGfA 内容が等価じゃないのになんで新旧の話になるの : デフォルトの名無しさん [sage] 2016/06/09(木) 17:06:35.65 :bsniAtVU だよな。 ぜんぜんちゃうやんw : デフォルトの名無しさん [sage] 2016/06/09(木) 17:26:41.69 :G4u6WZVB 旧石器時代には後者の方法が多用されていたが、それでは問題があるので 近代にはめったに使われなくなったということだが : デフォルトの名無しさん [sage] 2016/06/09(木) 19:11:58.00 :U5aI2wbo どちらもES3の頃から存在して使い分けされていたわけだが 関数式を使わない時代っていつだ? せめて、関数名ぐらいつけろよ、といいたい : デフォルトの名無しさん [sage] 2016/06/09(木) 19:22:11.65 :Homi8Ck7 hoisting を嫌う人はこう書くが、新旧いうもんでもない const fn = function fn () {}; : デフォルトの名無しさん [sage] 2016/06/09(木) 19:32:23.75 :KvDILg9T そのコードが制限付きで動作している事を理解していればそれでいい - iterable でない(Symbol.iteratorで対応可能) - a[100] = 1; で length を書き換えない(new Proxy で対応可能) - a.length = 5; が働かない(Object.definePropertyで対応可能) - 一部の汎用的ではない関数(concat等)が期待通りに動作しない(独自にコードを書けば対応可能) : デフォルトの名無しさん [sage] 2016/06/09(木) 23:45:53.30 :W5L1fKQF 詳細にありがとうございます!! > - a[100] = 1; で length を書き換えない(new Proxy で対応可能) > - a.length = 5; が働かない(Object.definePropertyで対応可能) ありがとうございます。それらの不具合は気付いていませんでした。 let a = new Proxy(new A, { set: function(target, property, value, receiver) { let i = parseInt(property); if (i === i && target.length <= i) target.length = i + 1; // a[n] = x;に伴うlengthの更新に対応。 else if (property === 'length' && value < target[property]) { target.splice(value, target[property] - value); // a.length = n;の代入時の挙動(の一部?)をケア。 } target[property] = value; return true; } }); Object.defineProperty(a, 'length', {enumerable: false, writable: true, value: 0}); これでとりあえずケアできているようではありますが、 Proxyに非対応なブラウザもあるようなので注意ですね。 : デフォルトの名無しさん [sage] 2016/06/09(木) 23:47:09.04 :W5L1fKQF > - iterable でない(Symbol.iteratorで対応可能) 現時点ではワケが分かっておりませんが頂いたヒントは大事に記憶しておきます。 > - 一部の汎用的ではない関数(concat等)が期待通りに動作しない(独自にコードを書けば対応可能) これも今確認しました。concat使えないの悔しいです。 Object.defineProperty(a, 'concat', {enumerable: false, value: function () { return A.prototype.concat.apply(this.slice(), arguments); }}); しかしまぁこういうのを結局書いていくのは悔しいですね。 ちょっとラクしたいだけなのに段々大袈裟になっていくという…。 : デフォルトの名無しさん [sage] 2016/06/10(金) 00:39:24.13 :G+eNnn4N 言っていることは間違いではないが、(結果的にでも)無垢な少年を騙すのはいかがなものか、、、 てかお前、それ自分でやってておかしいって思うだろ? ここの連中は仕様には詳しいが、コードを書いてないから、実装方式については話半分に聞け。 (まあ今回は君が勝手に突っ走ったのであり、騙したわけではないとは思うが) そのコードを見る限り、君は自力で解に辿り着けるはずだ。 俺がぱっと思いつくだけで解は3通りある。当たりかどうかは答えてやるから、冷静に考えてみろよ。 : デフォルトの名無しさん [sage] 2016/06/10(金) 01:01:27.01 :DHroUP1C javascriptについて質問があります。 初回起動時のform(画面項目)の値と現在の値を比較して1つでも変更があった場合にはポップアップを表示するといった処理を実装したいのですが何か良い方法があれば、ご教授お願い致します。 : デフォルトの名無しさん [sage] 2016/06/10(金) 01:02:08.05 :DHroUP1C 続き はじめはその項目のvalueとdefaultValueにて比較できると思いましたが、defaultValueは画面を再描画するタイミングで取得しますが、行いたい処理の途中でアクションが走り必ず再描画されるタイミングがあるためその方法では比較できないことに気づきました。 : デフォルトの名無しさん [sage] 2016/06/10(金) 01:02:31.57 :DHroUP1C 続き (また項目の入力チェックなのでエラーになった場合にも) なので再描画されても、初期表示時の値と現在の値を比較する方法はないでしょうか… ちなみに画面はJSPにて実装しており、項目はtextやradioやoptionなどあります。 : デフォルトの名無しさん [sage] 2016/06/10(金) 01:28:33.37 :rm3c6PtR ttps://mitsuruog.github.io/javascript-style-guide/#%E9%96%A2%E6%95%B0functions 7.1 関数式より関数宣言を利用してください。 なぜ? 名前が付けられた関数宣言はコールスタックで簡単に見分けることができます。 さらに関数宣言は関数の本体が巻き上げられます。それに対し、関数式は参照だけが巻き上げられます。 このルールにより、関数式の部分を常にアロー関数で置き換えて利用することができます。 // bad const foo = function () { }; // good function foo() { } : デフォルトの名無しさん [sage] 2016/06/10(金) 01:45:19.78 :rm3c6PtR function Klass() { } という書き方が古臭いとかいうことは当然なくて、 特定の場合では、var hoge = function() {} と書くべきという話を、 頭の悪い、なーんも考えてない馬鹿が、 絶対にvar hoge = function() {} と書かないといけない、 これからはfunction hoge() {} と書いてはならないんだ!って 言ってるだけ。 function Klass() {} という書き方が古くなったとか 聞いたこと無いし、使っていいし、むしろ推奨されている。 ほんと何も考えてない、誰かにaといわれれば 理由も考えずに妄信的にaばっかり使う、そんなやつが多いよなw : デフォルトの名無しさん [sage] 2016/06/10(金) 02:03:50.61 :G+eNnn4N 俺は仕様には詳しくないから具体的に何が問題になるのかは分からないが、 基本的に「普通」の書き方にしておいた方がいいと思うぞ。 というか、何故お前らが妙なこだわりを持つのか、かなり謎なんだが。 > var Person = function () { > console.log('instance created'); > }; > > var person1 = new Person(); > var person2 = new Person(); > ttps://developer.mozilla.org/ja/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript : デフォルトの名無しさん [sage] 2016/06/10(金) 02:06:08.67 :rm3c6PtR そこに書いてあるだろw // Student コンストラクタを定義する function Student(firstName, subject) { // 親のコンストラクタを呼び出す。呼び出しの際に "this" が // 適切に設定されるようにする (Function#call を使用) Person.call(this, firstName); // Student 固有のプロパティを初期化する this.subject = subject; }; これは普通の書き方。 : デフォルトの名無しさん [sage] 2016/06/10(金) 02:18:52.51 :G+eNnn4N おっと?これは失敬。 ということはこれについては統一見解はなくて、どっちでもいいって事だな。 : デフォルトの名無しさん [sage] 2016/06/10(金) 02:49:43.87 :OOVSLX1/ 引用元もそうなってたけど、 最後のセミコロンはいらないよねぇ。 : デフォルトの名無しさん [sage] 2016/06/10(金) 05:22:06.39 :naViO+5c どっちでもいいわけないだろ アホかこいつ : デフォルトの名無しさん [sage] 2016/06/10(金) 08:02:38.57 :52VYMGKm いろいろと挙動がおかしいのでよく確認してみるといい 繰り返すが、A.prototype.concat は汎用的ではない ttps://jsfiddle.net/cw8umnqd/ : デフォルトの名無しさん [] 2016/06/10(金) 08:21:29.14 :o8hFzx97 結局、コンストラクタ用の関数を書くときにも、 関数式よりも、巻き上げのある関数宣言の方が、良いのか? : デフォルトの名無しさん [sage] 2016/06/10(金) 08:31:51.96 :52VYMGKm > しかしまぁこういうのを結局書いていくのは悔しいですね。 ビルトイン関数には汎用的なものと汎用的でないものがあって、汎用的でない機能をエミュレーションするのは単純じゃない (とはいえ、JavaScriptは汎用的なプロパティ/関数があるだけエミュレーションするのは楽な方だと思う) 内部的に new Array を保持しておき、new Proxy で透過的に new Array を参照すらば比較的楽に実装出来るが、コストがかかる 完璧なエミュレーションに拘らないのであれば妥協も必要 : デフォルトの名無しさん [sage] 2016/06/10(金) 08:33:32.04 :INHt9BTU この状態と比較したい、って状況で、「画面の対象のコントロール回ってvalueを;かなんかで繋いで返す」関数作って、それ呼んで値を覚える。 変更チェックかけるときに、もう一回その関数呼んで、覚えたものと===で無ければ何かしら変更があった。 ってやってるよ。 「対象のコントロール」にはclassにcheckDatumとか空クラスつけとけばそれで列挙できるし。 : デフォルトの名無しさん [sage] 2016/06/10(金) 08:47:37.80 :BhzVNYOI varとfunctionが同じだのセミコロンいらねえだの こんなのが毎日偉そうに能書き垂れてんの? そりゃサンプル出せって言われたら黙るわけだ : デフォルトの名無しさん [sage] 2016/06/10(金) 09:33:17.22 :o8hFzx97 Groovyのメタプログラミングなら、 実行時に既存のクラスに、メソッドを追加するなら、Category・Mixin。 メソッド・プロパティを変更・追加するなら、ExpandoMetaClass そういう複雑極まりない方向へ進むのは、最初から考え方がおかしいのでは? : デフォルトの名無しさん [sage] 2016/06/10(金) 09:36:28.17 :+uuPJDCE > 関数式よりも、巻き上げのある関数宣言の方が、良いのか? 何も考えてねぇ馬鹿は、変数の巻き上げの問題(もちろん理由がある)の話を、 全く関係ない関数にまで適用しようとする(笑) 理由は何だよw ブロック内だけで使う関数など、関数式でなければいけない場合もあるが 通常は関数宣言の方がいいに決まってるだろ。 C言語は宣言された関数しか使えなかったため「前方宣言」などという 物が生み出されてしまったが、それ以降、それ以外の殆どの言語は 関数はどこで宣言しても(巻き上げされたかのように)使うことが出来る。 : デフォルトの名無しさん [sage] 2016/06/10(金) 09:40:10.83 :4srunpG+ 所詮は自己満足の世界なんだよ : デフォルトの名無しさん [sage] 2016/06/10(金) 09:40:12.48 :+uuPJDCE 普通に関数に名前(コンストラクタも含む)をつければいいのに、 「さいきんのクールなプログラマはvarで関数入れて使うんだぜ! 今時関数に名前つけるなんてのは旧石器時代だな!」とか言ってるんだぜw バカっぽいだろ?事実なんにも考えてない。 デバッガ時に関数名表示がでなくなる問題があるというのにな。 : デフォルトの名無しさん [sage] 2016/06/10(金) 10:33:45.27 :GFWTaLNc > どちらもES3の頃から存在して使い分けされていたわけだが 誰もが(いいすぎ)使い分けるようになったのは、近代になってから > 関数式を使わない時代っていつだ? だから旧石器時代だって ゼロ年代初頭あたりまで : デフォルトの名無しさん [sage] 2016/06/10(金) 10:36:19.23 :GFWTaLNc > function Klass() {} という書き方が古くなったとか > 聞いたこと無いし、 グローバルネームスペースを汚染する弊害について聞いたことないのか : デフォルトの名無しさん [sage] 2016/06/10(金) 11:04:28.13 :rddDxbo4 クロージャの中でやる分には大丈夫なんじゃないの?巻き上げられたっけ? : デフォルトの名無しさん [sage] 2016/06/10(金) 11:31:26.83 :xHgczCBO 今時グローバル汚染するようなアホおまえくらいだから : デフォルトの名無しさん [sage] 2016/06/10(金) 11:46:24.26 :XqAkh7YW なんであんなに無名を濫用するのかと思ってたが そんなしょうもない理由だったのか : デフォルトの名無しさん [sage] 2016/06/10(金) 14:12:05.29 :dpRBFPup 聞いたことないが、その弊害の発生条件は? : デフォルトの名無しさん [sage] 2016/06/10(金) 14:36:22.02 :4srunpG+ そうだよな 汚染ってなんだよ : デフォルトの名無しさん [sage] 2016/06/10(金) 15:06:36.55 :LT2C5Mf1 prototype使って、汚染しちゃうのは初心者がやってしまう失敗 : デフォルトの名無しさん [sage] 2016/06/10(金) 15:59:08.90 :DxAsZ/F5 1個くらいならバレないんじゃない? : デフォルトの名無しさん [sage] 2016/06/10(金) 16:05:16.91 :3bO9ZAmE Object.prototype.hogeにバーカって書いとけばいいのか : デフォルトの名無しさん [sage] 2016/06/10(金) 18:15:57.76 :LT2C5Mf1 コンソールに出すの? アラートで出すの? アラートで出たら、めちゃくちゃ怖いかもww : デフォルトの名無しさん [sage] 2016/06/10(金) 19:06:13.75 :qrHSyLm3 prototype汚染という考え方も古くなってきた感はあるが… しかし、風呂敷を広すぎではないかね 元々はprototuype汚染の話ではなかったわけで段々と本題がずれてきているように思う : デフォルトの名無しさん [sage] 2016/06/10(金) 19:27:07.34 :qrHSyLm3 画面を再描画するならサーバサイドの処理があるはずだが、それはJavaScriptで実装すべき案件なのかね フォームで値を受け渡してサーバサイドで処理、セッションを使う等、いくつか対策があるはずだが jsを使うなら再描画させずに動的にDOMを書きかえれば済むが、マルチポスト先を読む限りではこの質問者にはハードルが高そうだな ttps://teratail.com/questions/37462 ttps://teratail.com/questions/37489 : デフォルトの名無しさん [sage] 2016/06/10(金) 20:02:15.97 :G+eNnn4N 少なくとも文法上は大差ないのだろう。MDNにも説明はある。 > 全ての関数は実際には Function オブジェクトです。 > Function コンストラクタか関数宣言か関数式か > ttp://https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions_and_function_scope "> ttps://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions_and_function_scope new Functionや非トップレベル関数(strict modeでは禁止)も含めて書いてあるから余計に分かりにくくなっているが、 要するにどうでもよさそうだ。 現実的にはコンストラクタだけ前方参照できてもプロトタイプが用意できていないから意味がない。 だから関数式の方が似合っている気はする。 ちなみに汚染については変数名か関数名かだけでどちらも汚染する。 また、デバッグ時にこんなところが関数表示されたところで嬉しくない。 どのみちコンストラクタが呼ばれればコールスタックには載るし、ブレークポイントも当てられる。 お前らは異様に文法にこだわることを止めて、もっとコードを書いた方がいい。 指摘が間抜けなのは、コードを書いてないからだ。(実践的ではない) ○○の問題がある(キリッというのは正しいが、それが重要なことなのか、わりとどうでもいいことなのか、区別が出来ていない。 : デフォルトの名無しさん [sage] 2016/06/10(金) 20:08:51.44 :RNr8lFlW どうもありがとうございます。おかげで気がついてしまいました。 concatはArrayを受け取ってArrayを返すつもりででは書きましたが、 よく考えると今回拡張したA(以下単にA)を引数に受け取りたいですし、 返す結果もよく考えるとAであったほうが嬉しいかもしれません。 実装の手間という面だけでも尻込みしつつあったんですが、 いまや設計の方針と言う面でも相当きな臭いというか。 concatの返す値が決められなくて不気味。使うときに不安。 仮にsliceやspliceなどのもまとめて全部Aを返すように統一したとしても、 最終的にはArrayとAの二系統が混在する世界になっちゃうわけで不気味。 > 完璧なエミュレーションに拘らないのであれば妥協も必要 そのつもりだったんですがいざ用意してみると、 欲が出るわ粗が目立つわ方針で不安になるわで散々でした。 今後は生のArrayのみを運用していくつもりです(結論)。 ありがとうございます。Groovyはぐぐったことすら無いので分かりません。 > そういう複雑極まりない方向へ進むのは、最初から考え方がおかしいのでは? はい。完全にそのとおりです。 : デフォルトの名無しさん [sage] 2016/06/10(金) 21:47:53.40 :qrHSyLm3 > 今後は生のArrayのみを運用していくつもりです(結論)。 それはそれで一つの答えだが、やや狭い世界になっていると思う > 最終的にはArrayとAの二系統が混在する世界になっちゃうわけで不気味。 2つの世界が存在することは問題なくてそれが息をするように自然に使えるかどうかが問題ではないだろうか mew Array と new A を行き来する世界はよくないが、それぞれの世界で完結する処理を書けるのならそれでいい どちらかといえば、設計指針を決めかねて迷っているのだと思うが… 基本的には new A は A だけで閉じた世界(new Array を返してはならない)であるべきなので A#concat は new A を返すべきだと思う 逆に A#push は汎用的なので特別な事をせずとも new A を返す このように汎用的な関数を基本的には使って非汎用関数に対しては Polyfill を作る要領でコードを書いていけばそれなりのものができるだろう 別の設計指針としては new Map を new ArrayMap 的な設計にして作り直しても面白いかもしれない new Map は関数でsetter/getterを作るので new Array よりは互換コードを書きやすいはずだ 機会があれば、是非新しい世界を作ることに挑戦してみてほしい : デフォルトの名無しさん [sage] 2016/06/10(金) 21:58:16.74 :MdFWcZSW こういう人に読ます気がない文章は目の前で破り捨てるに限る : デフォルトの名無しさん [sage] 2016/06/10(金) 22:12:29.26 :AlU+uWXE ES6だとプロトタイプ汚染がないのかと思ったけどもしかして新機能がない? 結局 Object.defineProperty(...){........} と書かんといけんのか : デフォルトの名無しさん [sage] 2016/06/10(金) 22:18:01.79 :G+eNnn4N この程度で躓くのならもっと長いMDNは当然無理で、池沼のままなのもむべなるかな : 523 [sage] 2016/06/10(金) 22:51:59.24 :qrHSyLm3 読みにくくてすまん どういうわけが改行コードが一部消えているな… : デフォルトの名無しさん [sage] 2016/06/10(金) 23:08:39.56 :+uuPJDCE *∧ ∧:・。゚*。 : ・ 。 ゚ *★. (*・ω・*) ゚ *。* *〇 〇………………………** 祝☆jQuery 3.0 リリース ttps://blog.jquery.com/2016/06/09/jquery-3-0-final-released/ **………………………………* + JavaScript & jQuery 質問用スレッド vol.6 + [無断転載禁止]©2ch.net ttp://echo.2ch.net/test/read.cgi/hp/1465566635/ : デフォルトの名無しさん [sage] 2016/06/10(金) 23:10:44.42 :+uuPJDCE > > function Klass() {} という書き方が古くなったとか > > 聞いたこと無いし、 > グローバルネームスペースを汚染する弊害について聞いたことないのか なにいってんだおめぇ? var Klass = function() {} という書き方をしても グローバルネームスペース汚染してるだろw function hoge() { function Klass() {} } ↑Klassがグローバルネームスペース汚染ってどういうこと?w : デフォルトの名無しさん [sage] 2016/06/10(金) 23:13:14.16 :+uuPJDCE 同じこと思ったw : デフォルトの名無しさん [sage] 2016/06/11(土) 00:01:17.78 :MQjYfq34 ライブラリスレが復活してた JavaScript ライブラリ総合質問所 vol.5 [無断転載禁止]©2ch.net ttp://echo.2ch.net/test/read.cgi/hp/1465399470/ : デフォルトの名無しさん [sage] 2016/06/11(土) 08:41:10.92 :MQjYfq34 jQuery推しが酷いと思ったらテンプレ改変されていたのか : デフォルトの名無しさん [sage] 2016/06/11(土) 13:03:48.93 :n8nif7qi 今更かよ ここ乗っ取られスレだよ : デフォルトの名無しさん [] 2016/06/11(土) 13:06:25.18 :ijG8u0pc java script初心者です。ご教授願います m(_ _)m 初めてpromiseで簡単な非同期処理を書いたんですが、一応動くもののどうにもコードがしっくりきません もっとシンプルにできたり、適切な書き方があるところがあったら教えてください 内容は単語queryに対応する画像検索結果がローカルストレージになかったら外部APIに問い合わせるというものです : 534 [sage] 2016/06/11(土) 13:09:15.52 :ijG8u0pc function getCachedData(query) { return new Promise(function(resolve, reject){ chrome.storage.local.get(query, function(cachedJson){ if (isExist(cachedJson)) { resolve(cachedJson[query]); } else { reject(); } }); }); } function getImageData(query) { getCachedData(query) .catch(function(){ return fetch(window.googleCustomSearchApi + query) .then(function(response) { return response.json(); }).then(function(json){ chrome.storage.local.set({[query]: json}); return json; }); }).then(function(json) { createPopUp(json.items[0]); positionPopUp(); }).catch(function(err) { console.error(err); }); } : デフォルトの名無しさん [sage] 2016/06/11(土) 13:14:41.27 :ijG8u0pc インデント潰れてしまった・・・ preタグで再投稿 <pre> function getImageData(query) { getCachedData(query) .catch(function(){ return fetch(window.googleCustomSearchApi + query) .then(function(response) { return response.json(); }).then(function(json){ chrome.storage.local.set({[query]: json}); return json; }); }).then(function(json) { createPopUp(json.items[0]); positionPopUp(); }).catch(function(err) { console.error(err); }); }</pre> : デフォルトの名無しさん [sage] 2016/06/11(土) 13:21:07.32 :e5AOazPt この記事が参考になるかな ttp://gao-tec.seesaa.net/article/427643074.html : デフォルトの名無しさん [sage] 2016/06/11(土) 13:33:33.96 :ijG8u0pc ありがとう 3回読んできます : デフォルトの名無しさん [sage] 2016/06/11(土) 13:39:59.04 :n8nif7qi 2chはHTMLタグ使えないからjsFiddleみたいな投稿サイトを使うといいよ 前まではテンプレにあったんだが 一見ネストが深いように見えるけど結構シンプルに纏まってると思う fetchの部分を外に出せば視認性がよくなるんじゃないのって程度 しいて言えばgetImageData内でPopUp関数を呼び出してるのがしっくりこない getImageData自身もPromiseインスタンスを返してresolve(json)するのがいい : デフォルトの名無しさん [sage] 2016/06/11(土) 13:59:44.48 :ijG8u0pc 今日だけ師匠と呼ばせてください 自分でもそこはなんか気持ちわるかったんです promiseチェインがcatchで始まった挙句、頭でっかちで でも外に出すというのはどうやるんでしょう・・・ fetchからの処理をまとめた関数(返り値は最終的なjsonデータのpromise)を外に定義して、それを呼び出す感じですか? そしてgetImageDataがPromiseインスタンスを返すように書き換えるには、ええと・・・(思考フリーズ) : デフォルトの名無しさん [sage] 2016/06/11(土) 14:41:46.28 :n8nif7qi getCachedDataと同じ書き方をfetchとgetImagedataでやるだけだよ : デフォルトの名無しさん [sage] 2016/06/11(土) 15:16:00.71 :NAulAg4n > 一見ネストが深いように見えるけど結構シンプルに纏まってると思う え? ちょっとまてよ? : デフォルトの名無しさん [sage] 2016/06/11(土) 15:45:12.80 :NAulAg4n これgetImageDataの中でキャッシュあるか調べてるからいけないんだよ。 一般論として、キャッシュというのは存在を意識しないようにコードにするべき。 関数の役割ってのが書いてないし、これだけじゃ読み取れないから難しいんだが、 そのgetImageDataっていうのは画像があれば、ポップアップウインドウを表示するんだろう? であれば、getImageData() ではなくて showImageData() とかいう名前にするべき。 そして、getCachedData()ではなく、こっちをgetImageData()にするべき。 getImageData()っていうのは単にImageDataを返すだけ、その中でキャッシュを使っていようが 使っていまいが関係ないし、別の仕組みのキャッシュを使うかもしれない。がgetImageData()を 使う人からはそんなこと知ったことじゃない のコードは、chrome.storage.local を使っている箇所が、getCachedDataと getImageDataの2つに分かれているだろ? 関数の役目が明確に分離されていないからそうなる。 非同期の書き方の問題の前にまずやることがあるってことさ。 あと、スペース1個でインデントは見にくいからやめろw 最低でも2個だ。 : デフォルトの名無しさん [sage] 2016/06/11(土) 15:47:35.86 :NAulAg4n で、これが修正コード例だ。 やりたいならばchrome.storage.local.getをPromise化する事もできるがね。 function getImageData(query) { return new Promise(function(resolve, reject) { chrome.storage.local.get(query, function(cachedJson) { if (isExist(cachedJson)) { resolve(cachedJson[query]); return; } fetch(window.googleCustomSearchApi + query) .then(function(response) { var json = response.json() chrome.storage.local.set({[query]: json}); resolve(json); }) .catch(function(err) { reject(err); }) }); }); } function showImageData(query) { getImageData(query) .then(function(json) { createPopUp(json.items[0]); positionPopUp(); }) .catch(function(err) { console.error(err); }); } : デフォルトの名無しさん [sage] 2016/06/11(土) 15:56:05.66 :NAulAg4n で、どうしてもgetImageData()の中身をPromise化したいならこんな感じかね? 動かせる環境がないので、これで正しく動いているかはしらない。 元のコードに合わせてisExistがfalseならreject()しているが、 nullを返して、データがnullだったらfetchしたほうがいいような気もするが。 function getImageData(query) { return new Promise(function(resolve, reject) { chrome.storage.local.get(query, function(cachedJson) { if (isExist(cachedJson)) { resolve(cachedJson[query]); } else { reject(); } }).cache(function()) { return fetch(window.googleCustomSearchApi + query) }).then(function(response) { var json = response.json() chrome.storage.local.set({[query]: json}); return json; }); } : 534 [sage] 2016/06/11(土) 16:03:43.18 :ijG8u0pc 自分でああでもないこうでもないと考えてコードを修正していたら返信遅れました か ら く ちwwww と思って訂正コードと自作スパゲッティを見比べたらグウの音も出ませんでした この整理されたしっくり来る感じ 勉強になります あとは・・ エラーハンドリングについてわからないところがあります! : デフォルトの名無しさん [sage] 2016/06/11(土) 16:07:35.34 :ZhHlBSFM 良い記事だ。 が、前から疑問なのだが、何故お前らはネストにこだわるのだ? 俺は展開して書いていて、特に問題を感じない。 要求が「脳筋無限ループの例ぐらい単純な構造で」「非同期処理を実現する」 「処理は上から下へ」「ネストが深くならない」ならば、これでいいと思うのだが。 好きずきはあると思うが、このような場合にでも例としても出てこないのは謎なんだが。 function Main(){ console.log("a"); setTimeout(Main_1,2000); function Main_1(){ console.log("b"); setTimeout(Main_2,1000); } function Main_2(){ console.log("c"); } } Main(); : デフォルトの名無しさん [sage] 2016/06/11(土) 16:12:31.73 :NAulAg4n は本当に動くかどうかわからない。 実はcacheのあとにthenをつなげたことないんでねw まあ関数の中を試行錯誤すりゃできるだろうと思うけど。 最悪でいいし。 "何をする" 関数か?(クラスか?)ってことをよく考えることが重要。 動くようにコードを配置するんじゃなくて、何をする関数か?を定義して それに合わない所はたとえコードが増えても外にだすべきだし、 入れるべきだと思えば、どうにかして持ってくる。 もちろん場合によっては、"何をする" の定義を変えてもいいけど はっきり定義させることが重要。 例えば、このgetImageData()はchrome.storage.local を使うことが前提になってるけど、 いろんなキャッシュの仕組みを入れ替えられるようにする関数(というかクラスになるだろうけど)を定義すれば getImageData()の中からはchrome.storage.localが消えて、キャッシュの仕組みを 入れ替えられるだけのことをするクラスができあがるわけ。 : デフォルトの名無しさん [sage] 2016/06/11(土) 16:15:59.14 :NAulAg4n > が、前から疑問なのだが、何故お前らはネストにこだわるのだ? やりかけで覚えておかなければならないことが増えるからだよ。 Aが終わってからBをして、Bが終わってからCをする。というやり方よりも Aの途中でBをして、Bをしているその途中でCをするほうが疲れるから。 Cが終わったら、Bはどうなったんだっけ? そしてAはどうなったんだっけ?って 戻って行かないといけないからね。 言い換えると可読性の問題だからだ。 非同期とかそういうところが問題になってるんじゃない。 やりかけの作業を脳に貯めておくと言うところが問題なんだよ。 : デフォルトの名無しさん [sage] 2016/06/11(土) 16:20:02.55 :NAulAg4n あと、そのコードの問題は「名前」が増える。 名前が増えるっていうのも、いちいち記憶して おかなければならないことだから面倒 限りある記憶領域は、記憶する価値のある物、 汎用的でどこでも使えることだけに絞る必要がある。 覚える価値がないものは覚えなくていい。 そのコードは関数の名前が増えているだけだが、 クロージャーじゃなくなっているから、変数の名前も増えるだろうね あと処理があちこちに飛ぶから、コードが長くなったらスクロールする回数も増えるよw もちろん関数が長ければ分けるが少なければその場に埋め込むという意味だ。 : デフォルトの名無しさん [sage] 2016/06/11(土) 16:26:52.64 :ZhHlBSFM そうか?ぶった切られているだけで、実は同じだろ。追加部分を見やすいように編集しておいた。 同期的に「放り投げて終わり」にしたいという気持ちも分かるが、無理にネスト/Promise化するより見やすくないか? 脳内 s/setTimeout...function(){// で全く問題ないはずだが。 function Main(){ console.log("a"); setTimeout(Main_1,2000); // 追加 function Main_1(){ // 追加 console.log("b"); setTimeout(Main_2,1000); // 追加 } // 追加 function Main_2(){ // 追加 console.log("c"); } // 追加 } Main(); : デフォルトの名無しさん [sage] 2016/06/11(土) 16:29:29.39 :tWgkOxEq もうそれはasync/await、もしくはgenerator/yieldを使うしかないよ。 : デフォルトの名無しさん [sage] 2016/06/11(土) 16:35:45.96 :NAulAg4n サンプルコードでやってるからだめなんだよw お前、頭の中で、このコードはsetTimeoutしかない。Main以外の名前は存在しない。 しかもそれぞれ短いコードで呼び出す順番に並んでいるいう「記憶」に頼ってコード読んでるだろ? それはお前だから出来ること。(短いから俺でも出来るけどさw) 実際に業務ではそういう「記憶」には頼れない。コードはもっと長いし 汎用的じゃないものは名前も覚えられない。(何日も経ったら忘れる) 汎用的でないものには、適切な名前をつけることも難しい。 仮にそのコードのまま、記憶に頼れないように書き換えてみようか? さっきと同じように気楽に読めるかい? どこでどう呼び出しが行われてるか探すだろ? function Kjads(){ console.log("a"); function cgrd(){ // あrtが console.log("c"); } // あrtが badf(fgaz); // あrtが function fgaz(){ // あrtが console.log("b"); asdfa(cgrd); // あrtが } // あrtが } Kjads(); : デフォルトの名無しさん [sage] 2016/06/11(土) 16:36:17.69 :ZhHlBSFM 「名前」が増えるのは事実だけど、関数内関数で隠蔽するし、 そもそも処理を必ず「上から下に」書くのでその点は問題にならない。 つまり、このように展開した場合、その関数は直前のsetTimeoutからしか呼ばれない。 したがって、覚える必要はないし、 処理があちこちに飛ぶこともない。(ただこれはそう書く、ということだが) ちなみにクロージャーにはなっている。 > もちろん関数が長ければ分けるが少なければその場に埋め込むという意味だ。 いや、結構糞長い奴もそこに書くよね? $.ajaxとかその場にだらだら全部書くほうが普通じゃないか? : デフォルトの名無しさん [sage] 2016/06/11(土) 16:39:28.40 :NAulAg4n もうそろそろをみて、記憶に頼ってるなって自覚したはずw > ちなみにクロージャーにはなっている。 なってない function Main(){ var v = 1 setTimeout(function() { console.log(v); }, 1000); } ↓ エラーになる function Main(){ var v = 1 setTimeout(Main_1, 1000); } function Main_1(){ console.log(v); } 変数vを渡すために、名前が増えるwww : デフォルトの名無しさん [sage] 2016/06/11(土) 16:39:52.50 :ZhHlBSFM ああ、ちょっと遅れたが、それは既に書いたように、俺内コーディングルール 処理を必ず「上から下に」書く で対応している。というか、そもそも意図的に可読性を落とす必要はないだろ。 「上から下に」書けるところでは「上から下に」書くのが常識だろ。 名前もこの手の場合は XXX_1, XXX_2, ..... と順に付けていく。おかしな名前を付けたりすることはない。 : デフォルトの名無しさん [sage] 2016/06/11(土) 16:40:41.06 :NAulAg4n > $.ajaxとかその場にだらだら全部書くほうが普通じゃないか? 下手なやつが多いだけ。 俺は関数に分けるべき理由が生まれれば当然分ける。 : 534 [sage] 2016/06/11(土) 16:40:58.22 :ijG8u0pc の綺麗なコードを見る前に、API問い合わせの部分を関数に分離しようと思って、fetch用の追加のエラーハンドリングも加えてこう書いてしまったんですね(お蔵入りですが、このなかで疑問が沸いたので・・) function googleCustomSearch(query) { return fetch(window.googleCustomSearchApi + query) .then(handleNetworkError) .then(response => response.json()) .then(json => { chrome.storage.local.set({[query]: json}); return json; }) .catch(err => { // 【ここが疑問】 }); } function handleNetworkError(response) { if (!response.ok) { throw new Error(reponse.status, response.statusText); } return response; } : デフォルトの名無しさん [sage] 2016/06/11(土) 16:44:00.74 :NAulAg4n > 処理を必ず「上から下に」書く > > で対応している。というか、そもそも意図的に可読性を落とす必要はないだろ。 > 「上から下に」書けるところでは「上から下に」書くのが常識だろ。 ほらなw お前の常識w 何処かで、function hoge() {} じゃなくて var hoge = function() {} って 書けって言っていたやつが居るが、 (ちなみに俺はその必要がないならばfunction hoge()って書け派) これは上から下に書けない。 hoge(); var hoge = function() {} hage() var hage = function() {} まあ 「上から下に」"書けるところでは" って書いているところからもわかるように 書けない場合があると自覚してるんだろうがw その書ける所と書けない所、ここは書ける所だという前提を知ってるのも「記憶」だよねw : デフォルトの名無しさん [sage] 2016/06/11(土) 16:44:38.09 :ZhHlBSFM 何が言いたいのか分からんが、これでいいか? function Main(){ var count = 0; console.log('a: '+count++); setTimeout(Main_1,2000); function Main_1(){ console.log('b: '+count++); setTimeout(Main_2,1000); } function Main_2(){ console.log('c: '+count++); } } Main(); : デフォルトの名無しさん [sage] 2016/06/11(土) 16:46:15.25 :NAulAg4n 勝手にコード書き換えんなよw function Main(){ var count = 0; console.log('a: '+count++); setTimeout(Main_1,2000); function Main_1(){ var v = 1; console.log('b: '+count++); setTimeout(Main_2,1000); } function Main_2(){ console.log('c: '+count++); console.log(v); // エラーになる } } Main(); それともお前、ローカル変数は作るな。 全部クラス変数にしろとか言う派なのか?www : デフォルトの名無しさん [sage] 2016/06/11(土) 16:50:41.71 :NAulAg4n いやw 何が疑問なのかさっぱりわからないんだがwww : デフォルトの名無しさん [sage] 2016/06/11(土) 16:51:15.94 :ijG8u0pc googleCustomSearchの呼出元にhandleNetworkErrorで起きたエラーを伝えるためには、 1.最後のcatchのなかでもう一度new Error(err)を投げる 2.Promise.reject(error)を返す 3.そもそも書き方が悪い、 みたいにfetchをnew Promiseでラップして、reject(err)してください どれが適切なんでしょうか : デフォルトの名無しさん [sage] 2016/06/11(土) 16:54:15.22 :ZhHlBSFM いや勝手に書き換えたのはお前だろ。 のコードでは var v=1 は Mainの中じゃないか。 Main_1の中で新しい変数が必要なら、 ・Main_2をMain_1内に移動する(ネストが増える) ・v を Main内で定義しておく のどちらかだろ。俺なら後者的アプローチを取ることが多いと思う。 ただ、途中で変数が必要なときも管理しなくていいというのは確かにメリットかもな。 : デフォルトの名無しさん [sage] 2016/06/11(土) 17:02:05.55 :ZhHlBSFM それはクラスの時の話だ。 クラスの場合は、コンストラクタだけ呼べても意味がないだろ。 Hoge.prototype.XXX = function(){...}; の記述が「順序が必要」なので、どのみちその記述以降じゃないと new Hoge() 出来ないんだよ。 誰も普通の関数 hoge を全部 var hoge = function(){} と書けとは言ってない。 お前が話について来れてないだけ。 まあ分かった、お前が「文法的に読み込める方が善」というのならそれでいい。 で、他の連中もそうなのか? : デフォルトの名無しさん [sage] 2016/06/11(土) 17:09:12.67 :ZhHlBSFM ちと細かいがこれにも言っておくと、 > 俺は関数に分けるべき理由が生まれれば当然分ける。 彼等は「関数に分けるべき理由」が分からないのではなくて、その必要がないという判断でそこに書いているんだよ。 下手なわけではない。 通常、$.ajaxの場合はそこでしか使われない関数になるから、ネスト派ならそこにだらだら書く方が自然なんだ。 ただ、「ネストが深くなる」のが嫌いなくせに、「ネストでしか書かない」のが俺には疑問なんだ。 : デフォルトの名無しさん [sage] 2016/06/11(土) 17:31:06.27 :aOjkg+66 毎度ありがとうございます。 > 機会があれば、是非新しい世界を作ることに挑戦してみてほしい 今回のことで色々勉強させてもらいましたので、 次に生かせたいと思います! 色々ありがとうございまし! : デフォルトの名無しさん [sage] 2016/06/11(土) 17:31:44.01 :aOjkg+66 おっw ×まし! ○ました! : デフォルトの名無しさん [sage] 2016/06/11(土) 18:02:04.85 :NAulAg4n > 下手なわけではない。 > 通常、$.ajaxの場合はそこでしか使われない関数になるから、ネスト派ならそこにだらだら書く方が自然なんだ。 > ただ、「ネストが深くなる」のが嫌いなくせに、「ネストでしか書かない」のが俺には疑問なんだ。 いや、俺は$.ajaxでDeferred使うし、やっぱり下手なだけじゃね? : デフォルトの名無しさん [sage] 2016/06/11(土) 18:05:04.82 :NAulAg4n > どれが適切なんでしょうか どれか迷ったら、一番楽な方法を選べばいいよw 何でもそうだけど原則として楽になるように作られてるわけなんだしさ。 しばらくPromiseは触ってないから忘れたが、throwで任意のエラーオブジェクトでも 投げればいいんじゃね? : デフォルトの名無しさん [sage] 2016/06/11(土) 18:07:10.39 :NAulAg4n > クラスの場合は、コンストラクタだけ呼べても意味がないだろ。 意味あるぞ? function NantokaManager(params) { this.params = params; this.run = function() {} } var manager = new NantokaManager; manager.run() とかさ。 : デフォルトの名無しさん [sage] 2016/06/11(土) 18:08:34.97 :NAulAg4n > 誰も普通の関数 hoge を全部 var hoge = function(){} と書けとは言ってない。 > お前が話について来れてないだけ。 俺もそんな話はしていない。 ついてこいよw : デフォルトの名無しさん [sage] 2016/06/11(土) 19:28:03.24 :ZhHlBSFM すまんが意味が分からんし、お前の主張も分からん。 その場合の駄目なコードとそちらの主張を対で出せるか?(以下例のように) 一応こちらの意見をもう一度言っておくと、 function hoge(){} // OK。通常の関数はこちら。 var Hoge = function(){}; // コンストラクタの場合はこっちの方がよさそう となる。 そのコードが「共通プロトタイプを持たない場合」に限定しているつもりなら、勝手にどうぞでしかない。 : デフォルトの名無しさん [sage] 2016/06/11(土) 19:33:03.15 :NAulAg4n え? お前コードは必ずプロトタイプを持つものっていう前提なの? どうやらお前は限定しているようだが、 俺は、どんな限定もしていない。 : デフォルトの名無しさん [sage] 2016/06/11(土) 19:40:17.64 :ZhHlBSFM 何が言いたいのか分からん。 そちらが説明しきれないのなら、相互理解は不能だから終わりでいい。 : デフォルトの名無しさん [sage] 2016/06/11(土) 21:27:53.17 :NAulAg4n お前がこう言ってきたんだろ? > クラスの場合は、コンストラクタだけ呼べても意味がないだろ。 だから俺は、コンストラクタだけ呼べても意味がある場合を言ったまで。 そしたらお前が「俺は共通プロトタイプをもった場合に限定してるんだ」って いい出したんだろw 俺はお前と違って何も限定していない。 コンストラクタだけ呼べても意味がある場合は 実際に存在している。 : デフォルトの名無しさん [sage] 2016/06/11(土) 22:29:21.64 :ZhHlBSFM なるほど、お前は人殺し君か。 どおりで話が通じないわけだ。 : デフォルトの名無しさん [sage] 2016/06/12(日) 00:46:04.68 :hCgFiHr7 多分人殺しくんとは俺の事だろうが、 は俺ではないし、正直、ID:ZhHlBSFMは頑張って色々回答してるけど実務レベルではないわ。 処理は上から下へ流れるように、なんて、飼い犬が死んでも言わんレベルのたわ言じゃん。 相互に呼び出し合う事のある関数なんかどういう順序で記述するんだろ。 イベンハンドラやら、タイマーのハンドラは、どの順序なのかな。 子供のお題目にしか聞こえん。 逆に何年目か教えてほしいわw 何度かこういう言い方してるけど、ああいう悔しがり方とキレ方する奴が具体的にすら言えないってことは、ほんとに経験無いガクセーさんなんだろうけど。 : デフォルトの名無しさん [sage] 2016/06/12(日) 00:51:30.61 :CJz8oq6+ 後学のためにID真っ赤にしてる方々の書いた素晴らしいスクリプトを見せてくださいよ : 576 [sage] 2016/06/12(日) 00:51:41.20 :AMLyjVO9 お前のことだったんかw いきなりなんか言われて意味不明だったわ。 えーと何の話だっけ? 同期命令が使える言語で、 sleep(1000) console.log(1) sleep(1000) console.log(2) sleep(1000) console.log(3) と書きたくなるようなコードを、ネストして書くだけでも苦痛なのに、これを関数に分解して function Main_1() { sleep(1000) console.log(1) } function Main_2() { sleep(1000) console.log(2) } function Main_3() { sleep(1000) console.log(3) } とかやりたくないわけでw あと関数なのに、大文字から始めってる時点で、経験不足だってことがわかるよ。 念の為に言っておくと、上のMain_1とか言うのは俺がいい出した名前じゃないからねw : デフォルトの名無しさん [sage] 2016/06/12(日) 00:52:45.85 :AMLyjVO9 俺は何回も書いてるよ。 とか読んでみな。(俺がという意味ではない) : デフォルトの名無しさん [sage] 2016/06/12(日) 01:26:35.68 :npk74fIw はいはい自演乙。 自演じゃないならレベルの高いの間で色々解決できるだろうから頑張れ。 : デフォルトの名無しさん [sage] 2016/06/12(日) 01:33:50.33 :AMLyjVO9 > 自演じゃないならレベルの高いの間で色々解決できるだろうから頑張れ。 自演じゃないぞw 解決できるだろうけど、その前に何も解決すべき 課題が出てないじゃないかw そして、俺とお前は他人だろ? その理屈ならいろいろ解決できるだろうな。 何か言ってみろ。俺は手伝わないがwww : デフォルトの名無しさん [sage] 2016/06/12(日) 01:40:01.79 :m2Zib5nl あ?なんだこのゴミみたいな木っ端は 最低でも1000行以上あるプログラムとして成立してるもんもってこいや : デフォルトの名無しさん [sage] 2016/06/12(日) 01:43:07.89 :npk74fIw じゃあとりあえずの疑問に答えてやれよ > 相互に呼び出し合う事のある関数なんかどういう順序で記述するんだろ。 > イベンハンドラやら、タイマーのハンドラは、どの順序なのかな。 厳密にはこれは質問ではないから、「俺がどう書くか」の予想でもいいぞ。 とにかくお前らで色々話をしてみろ。 面白そうなら俺も加わるし、他も加わってくるだろう。 どうでもよければ無視されるだけだ。 : デフォルトの名無しさん [sage] 2016/06/12(日) 02:01:39.12 :AMLyjVO9 どうせ質問に答えても自演じゃないって認めないんだろw まあ質問じゃないとお前もわかってるようだから、それにレスしろと いうならば、レスするのは何の問題もない。 > 相互に呼び出し合う事のある関数なんかどういう順序で記述するんだろ。 > イベンハンドラやら、タイマーのハンドラは、どの順序なのかな。 全くだなw 必ずしも上から書けるわけがない。 関数を呼び出される順番に書くとか言っているやつは馬鹿じゃないだおろうかね どういう順番で書くかは、ばらばらで人によってはアルファベット順ってこともあるだろう。 だから必要もないのに小さな関数に分けるなんて論外。 一つの関数にし、ネストがいやだからPromiseというのが使われるようになった。 この件に関しては、俺はと同じ意見だろうな : デフォルトの名無しさん [sage] 2016/06/12(日) 02:36:10.54 :npk74fIw > この件に関しては、俺はと同じ意見だろうな そりゃ同一人物だからなw まあ、人殺し君も多投するタイプだから、待ってればレスが返ってくるはずだ。 そして本当に別人なら、色々意見交換すれば相違点が発見できるだろう。 それは俺関係なしにいいことだから、やってみることだね。 : デフォルトの名無しさん [sage] 2016/06/12(日) 02:56:48.44 :hCgFiHr7 同一人物とかよくわからんな。 俺が連投するのは暇だからで、まともに過ごしてる時はそれなりにしか書かんけど。 10日間際は忙しいからな。 まさか本気で同一人物だと思ってたら笑えるww : デフォルトの名無しさん [sage] 2016/06/12(日) 03:17:12.70 :hCgFiHr7 うむ。アルファベット順ならまだマシだけど。 台帳に書いてある順とかちょっとびっくりする会社もあるからな。どことは言わんけど。 多分業務経験ない奴は笑うだけだが、 実務やってれば「NDA結ばないとリバースエンジニアリングすら難しい」という人間minifierだったりする。 必要に応じて関数は分けるべきというより、むしろ、関数は射影的であるべきだと思う。 コールバック関数のネストを「関数と関数を繋いでる」と単純に誤解して悪手だと思ってほしくないのが、 本来は関数と「関数を引数に取る関数」を定義して、「関数を引数にとる関数」に関数を食わせるが為の手段を逆に見た結果、「コールバック」って姿に見えてるだけ。 だから、yieldとジェネレーターを使おうが、Promiseを使おうが、本来は何一つ定義が変わってる訳でも、処理が変わってる訳でも無い。 関数に関数を食わせて値を取り出してる。 ・水を冷やして出来た物を、回転する鉋で削って、皿に落とし入れたもの、 ・皿で受け止めた、回転する鉋で削られた、冷やされた水、 ・回転する鉋で水を冷やして出来た塊を削り、皿に落としたもの は全部主題が同じもの。 水を冷やす、という関数と水を、値として「氷」と扱おうが、 かき氷機を「『水を冷やした物』削り機」と展開しようが、とう扱うかは使い方次第。 そこに、ニーズ外の要件なんて無いの。扱いにくいとかどうでもいいんよ。 また、undefinedの時と同じ勘違いしてるけどさ。 水→機械A→中間生成物→機械B→製品、 というシーケンスであらわすのが正しいのか、 ((水→機械A)→機械B)→製品、とフローで合わすのかは瑣末すぎるほどの差。 しかし、言われてるのは俺じゃないが、関数を大文字から始めると経験不足なんだwww C20年目かもしれんけどな、そういう人はww : デフォルトの名無しさん [sage] 2016/06/12(日) 03:21:29.67 :hCgFiHr7 こいつ、言われたくないことを人に言って安全圏に逃げたいだけなんだろうなぁ。ユング的なシャドウをもう少し悪く歪めたものが見えるわ。 voidとか、岡部健みたいな感じの破綻者に対して憧れてる人間、くらい性根がさもしい。 : デフォルトの名無しさん [sage] 2016/06/12(日) 09:01:52.07 :AMLyjVO9 だから同一人物じゃねーよw : デフォルトの名無しさん [sage] 2016/06/12(日) 09:04:46.11 :AMLyjVO9 > しかし、言われてるのは俺じゃないが、関数を大文字から始めると経験不足なんだwww JavaScriptのコーディング規約はいくつもあるが、どれも関数は小文字で始める。クラスは大文字。 JavaScriptの経験があるなら、これに従ってるはずなので 見た瞬間気持ち悪さを感じるものだよw : デフォルトの名無しさん [sage] 2016/06/12(日) 09:10:26.75 :AMLyjVO9 > だから、yieldとジェネレーターを使おうが、Promiseを使おうが、本来は何一つ定義が変わってる訳でも、処理が変わってる訳でも無い。 処理が変わってるわけでもない・・・ならば 読みやすい方がいいだろ? 逆に考えれば、どんなに読みづらく書いても 処理が変わっていないというコードにすることはできるだろう? 読みづらくても処理が同じならいいと言うのか? そうではないだろう。 コードっていうのは書いて終わりじゃない。修正するもの。 むしろ読むほうが多いので、書くよりも読むほうが大事。 だから「可読性」という言葉がある。「可書性」という言葉はない。 > そこに、ニーズ外の要件なんて無いの。扱いにくいとかどうでもいいんよ。 俺はいまだかつて「時間的に早く書けて修正も簡単で、メンテナンスにかかるコストが低い」 という要件がなかったことはないぞw どんなプロジェクトでも安く仕上げることは、暗黙的に含まれてる要件だ。 : デフォルトの名無しさん [sage] 2016/06/12(日) 13:15:07.43 :npk74fIw 別人であればもっと議論が深まるはずだよな。 みんな見てくれてるから、せいぜい頑張れ。 : デフォルトの名無しさん [sage] 2016/06/12(日) 13:19:20.40 :AMLyjVO9 どうあっても別人と認めたくないようだ(笑) : デフォルトの名無しさん [sage] 2016/06/12(日) 13:20:50.61 :AMLyjVO9 あ、なるほど。話が進むと今度は 一人だから意図的に会話できる。 それが自作自演の証拠って言うつもりだなw : デフォルトの名無しさん [sage] 2016/06/12(日) 15:04:26.78 :npk74fIw いやきみ(ら)にとっては俺はただの馬鹿なんだろ。 だったら俺を引っ張り出す方向のレスを付けること自体おかしいだろ。 ガン無視してくれよw いずれにしても、君らが「別人」かどうかは皆が判断することであって、 俺が「自演」主張しても、逆に君らが「別人」主張しても意味無いんだよ。 どちらがキチガイかは皆が判断してくれる。 そして一つアドバイスをするなら、君のキャラならは 「え?お前偉そうなこと言っている割には『大文字』のルールも知らないんだwww」 と煽るべきだった。キャラを変えると自然な自演に見えない。 君も煽りで相手を引き出すキャラなんだし、 このレスなら人殺し君のキャラなら確実に食いついてくるし。 本当に別人なら、君らが会話すれば君らにとっても得る物があるはず。だからもっとやればいい。 いちいち俺に対してキョロキョロしたり、 或いはここに来て会話を終わらせる方向にキャラ変更するのは不自然だ。 はい続きをどうぞ。 : デフォルトの名無しさん [sage] 2016/06/12(日) 16:27:25.35 :9HFtYPb0 その人殺し君とかいうのに論破されちゃって 悔しくて大ハッスルしてるの? : デフォルトの名無しさん [sage] 2016/06/12(日) 16:54:18.02 :hCgFiHr7 そりゃ、javascriptの規約はいくらでもあるだろうけど、 javascriptの規約しか知らないどころか、ありえないような口ぶりで話してたからねw なんかからトランスパイルするなら、こうなるだろうな、って考えたりしないんだ、って感じ。 もちろんそう。 しかし、読みやすいのと書きやすいのと、定義しやすいのはそれぞれ別の概念だから、そういう意味では可読性に相当する単語は、独立性とか、依存度とか、抽象度とか 見方次第でいくらでも変わるものじゃないか? 安くあげる事より、致命的な不具合を出さない事の方が求められるプロジェクトしかやってないからな。 正直、安くなくても売れるから。 安くないほうが売れるとも言えるレベルで。 お前ほんと何と戦ってんの? : デフォルトの名無しさん [sage] 2016/06/12(日) 19:20:47.80 :npk74fIw > わざとこの態度だからなぁ。 () 煽っていくスタイルプリーズ : デフォルトの名無しさん [sage] 2016/06/12(日) 19:39:15.05 :AMLyjVO9 > なんかからトランスパイルするなら、こうなるだろうな、 なんでそんなコード書くの?www : デフォルトの名無しさん [sage] 2016/06/12(日) 19:40:36.87 :z4XaqaSO function f(a) { let t = a; t[0] = 1; console.log(a); console.log(t); } let a = [0]; f(a); これaも[1]になっちゃうんですが ES2015とか新しい書き方で配列をコピーする方法ありませんか? : デフォルトの名無しさん [sage] 2016/06/12(日) 19:41:46.51 :AMLyjVO9 > どちらがキチガイかは皆が判断してくれる。 お前がキチガイだって俺は判断したよwww : デフォルトの名無しさん [sage] 2016/06/12(日) 22:24:47.44 :QKWa7och 芝生くっつけるやつにろくなのはいないってのは間違いなさそうだ : デフォルトの名無しさん [sage] 2016/06/12(日) 22:34:59.19 :npk74fIw 馬鹿にはちゃんと安価付けろ。気づいてもらえないぞ。 てかお前もちゃんと煽れよ。 は宛だぞ。 おーい。煽られてるぞー。 : デフォルトの名無しさん [sage] 2016/06/12(日) 22:46:30.04 :xguVhByI そりゃ別人なんだから、煽りもするわwww : デフォルトの名無しさん [sage] 2016/06/12(日) 23:31:28.41 :GjxFekK/ concat : デフォルトの名無しさん [sage] 2016/06/12(日) 23:34:06.35 :xguVhByI shallowコピーの場合はconcatでいいよね。 最初は?ってなるけど、知ってしまえば簡単に覚えられるし。 なんらかのdeepコピーの場合はライブラリ使うしか無いかな? : デフォルトの名無しさん [sage] 2016/06/12(日) 23:54:06.37 :npk74fIw いやシャローコピーは slice() だと思うが。 : デフォルトの名無しさん [sage] 2016/06/12(日) 23:56:00.26 :hCgFiHr7 お前、脳みその代わりにババロア詰まってて、しかも微妙に機能してんじゃねえの? 一番煽られてんのはお前だと思うんだけどw 恥ずかしくねえのかな。。 : デフォルトの名無しさん [sage] 2016/06/12(日) 23:57:34.48 :hCgFiHr7 JSON.parse(JSON.stringify(obj)) が、一番手軽で早い。 : デフォルトの名無しさん [sage] 2016/06/13(月) 00:05:59.69 :6Ot446qT 関数コピーできない。 日付がおかしくなる。 undefinedが消える。 使えないねw : デフォルトの名無しさん [sage] 2016/06/13(月) 00:15:43.00 :rTAmnA9g 値をコピーするなら十分でしょ。 関数をコピーとか必要性がわからんし、 undefinedが消えるって、元からundefinedだったんだから、消えてないでしょ。 undefinedが消えるってのは、undefinedで無くなるときだよ。 お前の頭が使えねえなぁ。 : デフォルトの名無しさん [sage] 2016/06/13(月) 00:15:53.62 :+G6yi6vX let の宣言場所について質問させてください for文の中でのみ使う変数を let で宣言しようとしたら、forの中と外どちらで宣言したほうがいいんでしょうか : デフォルトの名無しさん [sage] 2016/06/13(月) 00:32:34.63 :6Ot446qT > 値をコピーするなら十分でしょ。 勝手に決めるな。 日付がおかしくなる問題は解決できてないし、 undefinedが消えるっていうのは、キーが無くなるんだよ。 まったく使えないって言ってるだろ : デフォルトの名無しさん [sage] 2016/06/13(月) 00:40:16.01 :6Ot446qT どうするのが一番可読性が良いかを考えれば自ずと答えは出る。 可読性を高くするには、頭の中で覚えておくコードを少なくするということでもある。 だからより小さい範囲、つまりfor文の中で書くのが良い。 ただし、for文の行でいろいろ書くなよ?w for (let i = 0, l = array.length; i < l; i++) for文の行でやるのは多くてもこれだけ(インデックス用の変数と終了条件)だ for (let i = 0, l = array.length, foo, bar, baz; i < l; i++) なんてfor文とは関係ない変数を宣言しないように。 言い換えると、変数に代入しないletはやってはいけないってこと。 let v = 0; // OK let v; // NG またletではなくconstを使ったほうが良いぞ constは再代入が不可能になる。つまり変数に入れた値を変えることが出来ない。 それでプログラミングが出来るのか?って思うかもしれないができるんだ。 関数型プログラミングの考え方を取り入れると殆どconstでよくなる。 : デフォルトの名無しさん [sage] 2016/06/13(月) 01:17:56.81 :+G6yi6vX むむむ・・・ インデックス用の変数でも終了条件でもないです 後で見たときに何をしているか分かりやすいように、計算途中の値に名前をつけて一時変数に入れていました forの試行毎に新しい計算値が入ります : デフォルトの名無しさん [sage] 2016/06/13(月) 01:49:05.39 :6Ot446qT つまりこういうことでしょう? for(let i = 0; i < 10; i++) { let value = i * 10 console.log(value); } 当然forの中だよ。中でしか使わないんだから。 そしてこれはconstに置き換えられる。 for(let i = 0; i < 10; i++) { const value = i * 10 console.log(value); } ループ毎に新しく作られるからだ。 このconst valueをforの外に置くことは出来ない。 : デフォルトの名無しさん [sage] 2016/06/13(月) 02:07:05.34 :LLEcmK37 es2015で()=>をつかえばthisの挙動を変更できるのに なんでjavascriptでdeep copyができないのですか? } : デフォルトの名無しさん [sage] 2016/06/13(月) 02:13:16.73 :+G6yi6vX ありがとうございます! forの中に引っ越します varに慣れていたので繰り返し処理のなかで宣言するのに違和感があったんですよね : デフォルトの名無しさん [sage] 2016/06/13(月) 02:41:54.70 :6Ot446qT 俺はvarのときからforの中に書いていたけどね。 そこだけでしか使わないし、別に文法エラーでもなんでも無いんだから。 : デフォルトの名無しさん [sage] 2016/06/13(月) 06:18:58.38 :o3uO7eJP キーが無くなるのと、キーに対応する値にundefinedが入ってるのは同値だろ。 だから、undefinedを代入してる!みたいな勘違いしたのかな?頭おかしいのかなw 日付がおかしくなるって具体的にはどう言うこと?エポックがズレるみたいな話では無くて、型が誤解されるみたいな話なら苦笑いだな。 変数に代入しないlet、では無いんじゃねえの? 仮宣言みたいなもんで。 : デフォルトの名無しさん [sage] 2016/06/13(月) 07:23:07.35 :+G6yi6vX スコープ先頭での let a; がダメとなると、スコープ後半になってから代入する値が確定するケースではどうしてるんでしょう? コード修正時にtemporal dead zoneによるミスを起こし易いので、スコープ途中でlet宣言する場合は、明示的に新たにブロックスコープを作ったほうがいいと書いてあるのをどこかで読んだんですが、 最後まで使う変数にそれをするとスコープのためだけにネストが深くなってしまって気持ち悪いです : デフォルトの名無しさん [sage] 2016/06/13(月) 07:33:47.84 :ZIxcBfsq let a=nullで宣言しておいたら? : デフォルトの名無しさん [sage] 2016/06/13(月) 09:10:57.92 :6Ot446qT > キーが無くなるのと、キーに対応する値にundefinedが入ってるのは同値だろ。 違うぞw keysで出力されるもの見てみwww : デフォルトの名無しさん [sage] 2016/06/13(月) 09:47:02.30 :uHiiHky6 普通にブロック内に書けばいいんじゃないの? わざわざブロック使えなんていうなら、関数全体で同じことしてるvarだって先頭で全部明示しろってなると思うんだけど : デフォルトの名無しさん [sage] 2016/06/13(月) 09:57:57.31 :CfEi32hJ が指摘している問題はおそらく、こういうこと var obj = {fn: function fn () {}, date: new Date, undefined: undefined}; console.log(obj); console.log(JSON.stringify(obj)); // "{"date":"2016-06-13T00:45:07.522Z"}" console.log(JSON.parse(JSON.stringify(obj))); // {"date":"2016-06-13T00:45:07.522Z"} var array = [function fn () {}, new Date, undefined]; console.log(array); console.log(JSON.stringify(array)); // "[null,"2016-06-13T00:48:58.483Z",null]" console.log(JSON.parse(JSON.stringify(array))); // [null, "2016-06-13T00:52:23.947Z", null] : デフォルトの名無しさん [sage] 2016/06/13(月) 10:10:14.80 :CfEi32hJ JSON.stringify の一番の問題は new Object, new Array 以外の Object 型を扱えない事 new Date なら String 型に変換されるだけだから new Date し直す方法がある(ただし、参照は失われるので参照比較できなくなる)が、それ以外はどうしようもない function Person (name) { this.name = String(name); } var obj = {person: new Person('太郎')}; var obj2 = JSON.parse(JSON.stringify(obj)); console.log(obj); // {person: Person {name: "太郎"}} console.log(obj.person instanceof Person); // true console.log(JSON.stringify(obj)); // {"person":{"name":"太郎"}} console.log(obj2); // // {person: Object {name: "太郎"}} console.log(obj2.person instanceof Person); // false 今のところ、deep copy する標準関数はないので Object.assign を使って自前で deep copy 関数を作るのが妥当 : デフォルトの名無しさん [sage] 2016/06/13(月) 10:57:57.06 :ZIxcBfsq あのさ、keysで定義されていてもその中身はundefinedなんだろ? なら、データとしての扱われ方として、同じだと思うんだけど。 キーがある事が大切であれば、キーを列挙したもの、というデータがあるべきだと思うんだけどどうなの? あーなるほど、そういうことか。 参照を失わせるために、そういう事するんだから、であればそのオブジェクトの.toJSONを定義してやるべきだろうね。 : デフォルトの名無しさん [sage] 2016/06/13(月) 11:55:17.37 :CfEi32hJ > あのさ、keysで定義されていてもその中身はundefinedなんだろ? 横から口を出すが、hasOwnPropety の結果が異なるから同じではない 「undefinedを代入する設計が筋が悪い」といわれればその通りだが、「同じ」ではない 実際、プロパティの存在チェックなら obj.prop !== undefined よりも obj.hasOwnProperty('prop') を使うべきだ var obj = {undefined:undefined}, obj2 = {}; console.log(obj.hasOwnProperty('undefined')); // true console.log(obj2.hasOwnProperty('undefined')); // false > 参照を失わせるために、そういう事するんだから、であればそのオブジェクトの.toJSONを定義してやるべきだろうね。 プリミティブデータの倉庫として使うなら JSON.stringify で良いが、new Object, new Array 以外は参照を失わせるべきではないのでは? でいえば、new Person('太郎') を {name: '太郎'} に書き換えるメリットがない : デフォルトの名無しさん [sage] 2016/06/13(月) 12:22:56.73 :CfEi32hJ > 参照を失わせるために、そういう事するんだから、であればそのオブジェクトの.toJSONを定義してやるべきだろうね。 ひょっとして、new Person する為の拡張構文をJSON に追加してやるといいたかったのだろうか 私が deep copy するのは構造を書き換えたいが、元の構造も残したい場合だからデータそのものは元のままでいい new Person('太郎') はたった一人の太郎であり、同名の太郎を作ってもらっては困る 同名オブジェクトを作ると taro === person の比較が出来ず、person instanceof Person && taro.name === person.name のようにダックタイピング的に比較しなければならない こうなるともう new Person を定義した意味がなく、{name: '太郎'} を生成したのと大して変わらない : デフォルトの名無しさん [sage] 2016/06/13(月) 13:52:54.74 :KnYKOJ/M あー、わからんでもない。 undefinedを値として使う、ってニーズがあれは、それもまた真なんだろうな。 そうなると、assignでもなくオブジェクト毎にちゃんとcloneを実装すべきって感じか。 ちょっとまって、それはdeepcopyでは無いんじゃないの? ただの参照の張替えじゃないか。 比較するのであれば、それはequals的なメソッドを作るか、諦めて、stringifyした物同士が同じになるかを比較すべきだろ。 : デフォルトの名無しさん [sage] 2016/06/13(月) 17:10:28.33 :CILZ2bdj {}, [] は deep copy する [{person: new Person('太郎')}, {person: new Person('一朗')}] 逆に new Person を deep copy したいと思う状況が分からない new Date も関数も期待通りに動かないわけで汎用性が大きく犠牲になっていると思うが… : デフォルトの名無しさん [] 2016/06/13(月) 17:51:17.99 :u+uz+gNL ボタンをクリックしたいのですがどう書けばいいかわかりません>_< ソースはこれです↓ ttp://i.imgur.com/IQLz1Kp.jpg : デフォルトの名無しさん [sage] 2016/06/13(月) 17:52:47.17 :viWjyZUM 変数宣言って同じ人でもいまいち一貫性が感じられないんだけどさ はるか遠くで使うのに頭に全部羅列してるかとおもいきや次は使う直前に書いてたり そうしなきゃいけない時ももちろんあるけど、特にそういう理由も見受けられないのもいっぱいある あまり詳しくないんだがなんか意味あるのああいうの : デフォルトの名無しさん [sage] 2016/06/13(月) 18:30:36.62 :K+DNMsci 状況がわからない、とか言ってちゃぶ台返しされても。。 deepcopyの話じゃないの? それはシャローコピーそのものじゃん。。一番上っ面だけコピーするって。 Personをdeepcopyしたいって要件ならいくらでもあるじゃん。 オブジェクト変更するから、変更前の「前回オブジェクト」を持っておきたいとか、 保存ボタン押すときに、保存の必要性あるか確認したいから、オブジェクトと退避オブジェクトを比較したい、その退避オブジェクトを作るとか。 : デフォルトの名無しさん [sage] 2016/06/13(月) 20:36:13.44 :WO2lddk8 private変数っぽくしたいときにこうするのってどう? var Foo = function () {this.private = {};}; Foo.prototype.getBar = function () {return this.private.bar;}; Foo.prototype.setBar = function (b) {this.private.bar = b;}; var foo = new Foo(); { let _baz; foo.getBaz = function () {return _bar;}; foo.setBaz = function (b) {_bar = b;}; } 後者はインスタンスごとにgetter/setterをクロージャにしなきゃいけなくて不満。 前者はfoo.private.barで手が届いちゃうものの、意図は明確でそれで十分な気が。 private変数っ「ぽく」したいだけの場合、前者の方法はどう? みんなどう思う? あとjavascript界隈に既に、こういう「ぽく」したい場合のイディオムってある? : デフォルトの名無しさん [sage] 2016/06/13(月) 21:22:27.21 :pgYO3XjB to infinity and beyond : デフォルトの名無しさん [sage] 2016/06/13(月) 22:52:41.14 :O5DunmIw だから、{}, [] は deep copy するといっているのだが 次の構造は正しくdeep copyされる [[[1], [2]], [[3], [4]]] {a: {1: true}, b: {2: false}} 一口にdeep copyといってもいろいろ問題があるわけで「この問題にあなたはどう考えているのか?」 - 関数はdeep copy出来ない(そもそも、スコープが変わったら動かなくなる可能性がある) - customコンストラクタはdeep copy出来ない - その他、Array, Object以外のdeep copyも難しい この問題は個々がdeep copyする状況によって解決策が変わるだろうからあなたの考えがな聞きたかった : デフォルトの名無しさん [sage] 2016/06/13(月) 22:57:06.96 :O5DunmIw > オブジェクト変更するから、変更前の「前回オブジェクト」を持っておきたいとか、 なるほど、その発想はなかったな 私ならPersonかPersonを管理するクラスを作ってその中で履歴を管理しそうだ : デフォルトの名無しさん [sage] 2016/06/13(月) 23:38:40.69 :K+DNMsci だから、あのさあ。。 他の言語で考えてみれば?そんな関数は、jsで言う、そのインスタンスのプロトタイプが持つべきで、そのインスタンスが持つべきものじゃないでしょ。 二回目だけど、それはdeepcopyではない。 どうしてもしたければ、laveでもしろ。 問題が理解出来てなさすぎるんじゃないか? Personを管理するクラスを作ったなら、そいつが持つのは一体何なんだ? Personじゃないの? 「Person」と、「Personのコピー」と、「PersonとPersonのコピーを管理するクラス」って無駄すぎるだろ。 どう考えてもPersonを正しくコピー出来るべきで、Personのインスタンス同士を中身を使って比較出来るべきじゃないの? : デフォルトの名無しさん [sage] 2016/06/13(月) 23:45:19.16 :O5DunmIw JSONでもdeep copy出来てなかったと思うのだが 否定ばかりであなたの考える最善が何も出てこないな : デフォルトの名無しさん [sage] 2016/06/14(火) 00:47:25.44 :DODkZCvX JavaScriptで deep copy に最適解は存在しないので自分のポリシーに照らし合わせて一番無理のない実装を考える 例えば、次のオブジェクトの deep copy が難しい var obj = { date: new Date, regexp: /test/g, img: new Image(100, 100), window: window, document: document.implementation.createHTMLDocument('sample'), elementInIframe: document.querySelector('iframe').contentDocument.getElementById('hoge'), fn: (function (i) { return function fn () { return i++; }; }(0)) }; date, regexp は getPrototypeOf で [[Prototype]] を確認すれば実装可能 img, document, elementInIframe は cloneNode で可能 window は new Window する仕組みがないと難しい fn は Function#toString を取るだけではスコープの問題を解決不可能なので無理 この調子で一つ一つ対処していったらキリがないのでどこかで妥協するのが普通 ちなみに、deep copyでJSONを持ち出すのは妥協の結果であり、他を圧倒するほどのメリットはない(そもそも、シリアライズする意味がない) それぞれの妥協解を開示して意見を募るぐらいが妥当ではないかね : デフォルトの名無しさん [sage] 2016/06/14(火) 02:01:10.19 :9x/TacpJ 最善は、オブジェクトはオブジェクトとして、関数をもたず、単なるデータの塊として、関数とは別に定義して、 stringify/parseで文字列と相互に変換できる、だよ。 ネットワークを経てrpc的なもので関数呼び合うにも便利だし。 値の持ち主が関数を持つのは好きじゃない。 圧倒するほどのメリットと言えば、それこそAPIやら、socket.ioを経ても素直に透過な所じゃないかな。 : デフォルトの名無しさん [sage] 2016/06/14(火) 02:03:53.91 :M6DJWkXG 日付が壊れる問題はどうすんの? : デフォルトの名無しさん [sage] 2016/06/14(火) 02:06:47.27 :M6DJWkXG あれ?もしかしてまだ日付が壊れる問題の詳細でてなかったの? 日付らしき文字があったからもう情報出てると思ってたw まあぐぐればすぐに分かるよね?って話。 JavaScriptのDeepCopyでJSON.parse/stringifyを使ってはいけない ttp://qiita.com/seihmd/items/74fa9792d05278a2e898 : デフォルトの名無しさん [sage] 2016/06/14(火) 02:11:20.97 :M6DJWkXG > 最善は、オブジェクトはオブジェクトとして、関数をもたず、単なるデータの塊として、関数とは別に定義して、 > stringify/parseで文字列と相互に変換できる、だよ。 理由がないよね。 > ネットワークを経てrpc的なもので関数呼び合うにも便利だし。 今はDeep Copyの話をしている。 シリアライズの話なら別でやれ : デフォルトの名無しさん [sage] 2016/06/14(火) 02:24:34.32 :TbEnZJwB なんでこういう事いう奴のJSON.parse/stringifyには第二引数がないんだろう?w : デフォルトの名無しさん [sage] 2016/06/14(火) 02:31:07.43 :M6DJWkXG JSON.parse/stringifyには第二引数で頑張ればできるという誤解が 広まらないように先に言っておくと、これはNumber、String、Booleanにしか 対応できません。 : デフォルトの名無しさん [sage] 2016/06/14(火) 04:26:35.95 :TbEnZJwB 嘘吐くなよ試しちまったじゃねぇかw parseに渡すreviverは文字列を受け取って問題なくオブジェクトを返せるし stringifyに渡すreplacerはオブジェクトを受け取って任意の文字列に変換出来る 別にコピーのためだけに局所的に使うならreplacerは正しいjsonを吐く必要もないしな 復元のための情報山盛りにして吐き出せばいい Dateとundefinedを試してコピー出来たのは確認した Functionとクロージャはスコープの問題があるのでシャローコピーにせざるを得ないが 同一スコープ内でstringify/parseをするならreviverでオリジナルから参照をコピーするのは簡単だ ただまあここまでやるのはシリアライザとデシリアライザを自前で実装するのと変わらんからオブジェクトを直接弄った方が早いなw ところでディープコピーってjQueryからextendメソッドをパクって来るんじゃダメなんか? 循環参照で死ぬので他のライブラリのでもいいがディープコピーを実現しようとしてるライブラリは少なくないと思うんだが : デフォルトの名無しさん [sage] 2016/06/14(火) 09:05:34.57 :BcKyLCvc 「js button click event」で検索! : デフォルトの名無しさん [sage] 2016/06/14(火) 09:26:05.33 :VOPCCsis 「いやです!>_<」 : デフォルトの名無しさん [sage] 2016/06/14(火) 09:30:58.95 :DODkZCvX > 最善は、オブジェクトはオブジェクトとして、関数をもたず、単なるデータの塊として だから、それをどうやって実装するのか、という事を聞いているのだが 「データの塊」とはJSONにあるような「プロパティの塊」の事か? function Person (name) { this.name = String(name); } var obj = {name1: new Person('Ken'), name2: {name: 'Ken'}}; console.log(JSON.stringify(obj)); // "{"name1":{"name":"Ken"},"name2":{"name":"Ken"}}" 結局、JSONの問題点は克服できてないのだが あなたの頭の中がJSONに最適化されているからJSONにそぐわないコードを意識的に追い出しているに過ぎない - 関数が消されるが、使わないので問題ない - undefined は消されるが、undefined をプロパティ値に持たないので問題ない - new Date は String 型に変換されるが、後で new Date し直すので問題ない - new Arrayを除く全てのオブジェクトは new Object に変換されるが、オブジェクトおを「プロパティの塊」としかみないので問題ない - new Date(2016, 5, 14, 9, 0, 0) と "2016-06-14T00:00:00.000Z" が同値を認識されるが、データの塊としか見ないので問題ない - new function Person (name) { this.name = name; }('Ken') と {name: 'Ken'} が同値と認識されるが、オブジェクトを「プロパティの塊」としか見ないので問題ない > 圧倒するほどのメリットと言えば、それこそAPIやら、socket.ioを経ても素直に透過な所じゃないかな。 JSONはシリアライズ不可能なオブジェクトを扱えないデメリットがある 「あなたは」シリアライズ不可能なオブジェクトを使わないからJSONが最適解だが、「私は」シリアライズ不可能なオブジェクトを扱うので最適解が「シリアライズ不可能なオブジェクトを社ローコピーする」になっている トレードオフの関係にあることは間違いない : デフォルトの名無しさん [sage] 2016/06/14(火) 09:41:30.57 :DODkZCvX の obj を JSON.stringify(obj); すると SyntaxError になるな : デフォルトの名無しさん [sage] 2016/06/14(火) 10:11:55.55 :dYSnVaKQ 最適解が「シャローコピー」となる、その主語はなに? 何に関して議論してるの? : デフォルトの名無しさん [sage] 2016/06/14(火) 10:29:28.31 :ScASA3Ww 別にJSON使ってもいいと思うけど、 別の手としてはMessageChannel使えば非同期で循環参照も扱える まあJSONも少し手を加えれば循環参照を扱えるが 昔作ったこんな感じで ttp://ideone.com/Zxp7kN 昔関数も扱えないかと考えたことがある まあちょっとコピーとは感じが違うが、NodeとブラウザでWSを使いオブジェクトを共有しようと思っていた。 その時はオブジェクト情報を送るのではなく影となるProxyを使い、 操作を原本に問い合わせることでだいたい可能という判断になった。 原本に与える影響を最小限にして、あたかもでディープコピーされたかのように振る舞うのも まあ巧みなProxyとレシーバーを守るメソッド定義に気をつけていれば可能な範疇だろう : デフォルトの名無しさん [sage] 2016/06/14(火) 11:59:42.69 :9x/TacpJ 頭おかしいのかな。 そうだと言ってるんだよ。 データと操作と、操作のためのオブジェクトは別個に考えるべきだと。 最適解として、シリアライズ不可能な物はシャローコピーする、は、 お前の運用に対する無難な妥協点であって、ディープコピーじゃないよ。 だからlave使えって。 : デフォルトの名無しさん [sage] 2016/06/14(火) 12:02:10.51 :9x/TacpJ toJSON実装しとけ。 : デフォルトの名無しさん [sage] 2016/06/14(火) 12:50:00.83 :DODkZCvX シリアライズ不可能なオブジェクト 「あなたの考えるdeep copyかどうか」はどうでもいいんだがな 「あなたの考えるあなたの為のdeep copy」が私にとっては使えないし、逆もしかりというだけなんだが で、「あなたの考えるdeep copy」と「私の考えるdeep copy」の仕様が違うだけ laveとは何のことだ? toJSONとは? : デフォルトの名無しさん [sage] 2016/06/14(火) 12:51:12.47 :DODkZCvX 追記 「ディープコピーじゃないよ」といわれてもあなたの中ではそうなんだろう、としか言いようがない : デフォルトの名無しさん [sage] 2016/06/14(火) 13:11:10.09 :dYSnVaKQ > シリアライズ不可能なオブジェクト それ、そもそも問題設定がおかしくないか? もともとはオブジェクトをコピーするときの話で、その目的・実現方法による分類として シャローコピーとディープコピーがある。 シリアライズ不可能なオブジェクトでもシャローコピーで良い場合もあれば悪い場合もある。 それは目的によって異なるというだけのこと。 : デフォルトの名無しさん [sage] 2016/06/14(火) 13:20:14.73 :dYSnVaKQ からも話が続いてるとして、 > 一口にdeep copyといってもいろいろ問題があるわけで「この問題にあなたはどう考えているのか?」 > この問題は個々がdeep copyする状況によって解決策が変わるだろうからあなたの考えがな聞きたかった つまり、ディープコピーしたいんだが、ある項目についてはそれが難しいという話でしょ? で、その問題解決の最適解がシャローコピー? の > オブジェクト変更するから、変更前の「前回オブジェクト」を持っておきたいとか、 > 保存ボタン押すときに、保存の必要性あるか確認したいから、オブジェクトと退避オブジェクトを比較したい、その退避オブジェクトを作るとか 目的でディープコピーをしたいのだという人と、根本的に議論がかみ合ってない。 : デフォルトの名無しさん [sage] 2016/06/14(火) 13:22:09.03 :9x/TacpJ deepcopyの定義から考えような。勝手キーワードじゃないよ。 ttp://https://en.m.wikipedia.org/wiki/Object_copying#Deep_copy "> ttps://en.m.wikipedia.org/wiki/Object_copying#Deep_copy laveはこれ。 ttps://github.com/jed/lave/blob/master/README.md toJSON ttps://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify : デフォルトの名無しさん [sage] 2016/06/14(火) 16:09:36.89 :9x/TacpJ まぁ、===で比較したいから、インスタンスは唯一の存在であってほしいから、これは「俺のdeep copy」とか言われても困るわな。 絶対地雷踏み抜くわ。 同名のtaroオブジェクトとかで苦笑いしておくべきだったか。 : デフォルトの名無しさん [sage] 2016/06/14(火) 17:54:57.29 :DODkZCvX あなたの主張はわかった : デフォルトの名無しさん [sage] 2016/06/14(火) 18:07:30.48 :dYSnVaKQ あなたの主張はわかった。 => でもそれは間違ってる => 私が間違っていた => あなたも正しいが、私の主張も正しい のどれだろうか。 : デフォルトの名無しさん [sage] 2016/06/14(火) 18:47:33.56 :9x/TacpJ 無知を省みて自分の至らぬ所を認め、その上で正しい知識を入れ直さないと、 技術者として致命的な場面がやってくるよ。 匿名で出来る間にやっておけばいかがかな。 : デフォルトの名無しさん [sage] 2016/06/14(火) 19:35:30.53 :TG3hSyiU 一般論からは、複製するオブジェクトを利用している文脈に固有のデータは 複製されない方がよいだろう(一時的な管理データなど よって、何を複製すべきかは複製した結果を利用する文脈に依存する 元と同じ文脈で利用する場合でも、すべてのデータを複製した方が いいとは限らない( id みたいに重複すると困るものなど : デフォルトの名無しさん [sage] 2016/06/14(火) 22:10:43.05 :VJ/4c5wE ディープコピーは滅多に使わないな マップした結果が偶々ディープコピーと同じ結果になる事はあるけど 転送はJsonXmlバイナリのどれかのシリアライズだし : デフォルトの名無しさん [sage] 2016/06/14(火) 23:14:40.87 :9x/TacpJ 一般論としては、ってのがよくわからんが、そんなものをデータに持ち込むからじゃないの? : デフォルトの名無しさん [sage] 2016/06/14(火) 23:28:10.46 :M6DJWkXG ディープコピーとシリアライズは別の機能。 ディープコピーにシリアライズ用の関数を使うのは間違い。 それだけの話だろ : デフォルトの名無しさん [sage] 2016/06/15(水) 00:12:34.59 :cIXZs8w1 そりゃおっしゃる通り。 一番元々の要件に対して、「手軽で早い」解決策。 そこから、変なものをdeepcopyだと寝言言う奴があらわれてこうなっただけ。 cloneとequalsを定義すべきだと思うよ。「正しい実装」では。 : デフォルトの名無しさん [sage] 2016/06/15(水) 00:19:47.28 :wTcNi+2O もともとの要件? もともとの要件は、ディープコピーなんだが?w ディープコピーにシリアライズ用の関数を使うのは間違いって JSONつかってやるコードを持ち出してきた をぎったんぎったんに叩いてやれよw ↓しっかり思い出せやw 608 自分:デフォルトの名無しさん[sage] 投稿日:2016/06/12(日) 23:34:06.35 ID:xguVhByI [2/2] shallowコピーの場合はconcatでいいよね。 最初は?ってなるけど、知ってしまえば簡単に覚えられるし。 なんらかのdeepコピーの場合はライブラリ使うしか無いかな? 611 返信:デフォルトの名無しさん[sage] 投稿日:2016/06/12(日) 23:57:34.48 ID:hCgFiHr7 [7/7] JSON.parse(JSON.stringify(obj)) が、一番手軽で早い。 : デフォルトの名無しさん [sage] 2016/06/15(水) 01:25:24.86 :Iz/1ukPU ディープコピーといっても様々じゃない? 構造下のオブジェクトは再作成することになるが、 関数に限ってはクロージャの面からも参照コピーした方がいい。 しかしそうなると関数オブジェクトのプロパティの取り回しが困る。 他にも非列挙やシンボルの扱いもあるし一般的に何が正しいかなんてない。 : デフォルトの名無しさん [sage] 2016/06/15(水) 02:03:52.98 :wTcNi+2O 例えそうだとしても日付が壊れるとか undefinedが消えるだとかいうのは問題外 : デフォルトの名無しさん [sage] 2016/06/15(水) 04:32:57.44 :Iz/1ukPU そっとしてそれはギャグで言ってるのかな? : デフォルトの名無しさん [sage] 2016/06/15(水) 08:08:29.44 :SSaOcc+i ディープコピー全体に対して、すべてをシリアライズで解決するのは正しいか間違いか、 って話であって、 少なくともconcat使うような配列やらなんやらでは、シリアライズで必要十分だねと。 訳わからん前提を持ち出して、あまつさえディープコピーではないものをディープコピーと言い出した奴は気が狂ってると思うけど。 だから、何度かclone/equalsの話もしてんじゃん。 お前、自分が何故叩かれたか理解してないの? そんな形で持つからだろ。 : デフォルトの名無しさん [sage] 2016/06/15(水) 08:56:16.37 :FEVYup+X javascript業界は素人ばっかりだな 参照型のディープコピーの実装は大きく分けて3つ プロパティの自動マッピング、シリアライズ、明示的なコピー関数 実行効率や制約の多さはともかくとして工数的にはシリアライズを利用する方法は有力な選択肢だよ もちろんそもそも論としてディープコピーなんかそんなに使わないってのがあるけどね : デフォルトの名無しさん [sage] 2016/06/15(水) 09:05:04.59 :wTcNi+2O > 参照型のディープコピーの実装は大きく分けて3つ > プロパティの自動マッピング、シリアライズ、明示的なコピー関数 オレオレ定義すんなよ。 見苦しいんだよ。 : デフォルトの名無しさん [sage] 2016/06/15(水) 09:08:01.05 :wTcNi+2O > 工数的には どこぞのライブラリを使えばいい。 : デフォルトの名無しさん [sage] 2016/06/15(水) 11:46:17.65 :SSaOcc+i これ、オレオレ定義か? CoRしたいなら1つめ、あとはごく当たり前な実装だと思うけど。 : デフォルトの名無しさん [sage] 2016/06/15(水) 13:00:32.42 :RkIC2p5j 一般にディープコピーするのにシリアライズは必要ないんじゃない? 無駄な処理を挟んでいるだけに見える : デフォルトの名無しさん [sage] 2016/06/15(水) 13:11:48.27 :SSaOcc+i javascriptみたいな、オブジェクトのプロパティの型がプリミティブだって保証が無い言語で、 制限事項少なめで一発でコピーするには楽だと思うけどなぁ。 : デフォルトの名無しさん [sage] 2016/06/15(水) 13:37:00.47 :RkIC2p5j JavaScriptの場合、JSONが楽に実装できることは否定しないよ サーバにデータを送るならシリアライズする意味はあるけど、ディープコピーする為だけにシリアライズする必要はないってだけ シリアライズしたフォーマット(JSON)の制約を受けるわけだし、シリアライズする時点で目的と手段が一致してないように見える Object.keysやfor-ofで列挙したキーを順番にコピーしていく方がどう考えても制約が少ない : デフォルトの名無しさん [sage] 2016/06/15(水) 14:34:35.52 :KXw+rbZw なんかディープコピーはあれもこれもちゃんとして超完璧じゃないといけないみたいな人がいるけど どのライブラリとってみてもそれなりな実装しかしてないんだよね。 とか制約が少ない(キリッ って言うけどそこまでしてその制約の少なさを求める妥当性を一切言わない。 : デフォルトの名無しさん [sage] 2016/06/15(水) 15:00:16.56 :RkIC2p5j 「制約が少ない」はの「制限事項少なめ」に反論しただけ 上の方で「ディープコピーじゃないよ」云々の人がいたし、ディープコピーのクオリティを向上させる流れだと思ったんだけどね それなりの実装でいいなら各々が自分の好きなように実装すればいいし、他人の実装を否定する必要もないね : デフォルトの名無しさん [sage] 2016/06/15(水) 15:03:11.81 :KXw+rbZw どんだけ頑張ってもそれなりの実装にしかならないから決め手がなくて問題なんでしょ。 : デフォルトの名無しさん [sage] 2016/06/15(水) 15:39:36.39 :SSaOcc+i for ofで、オブジェクトなら再帰的に、とやると、今度は参照が循環してしまった場合に備えて、メモ化する必要が出てきたりと、制限事項を制限事項とするためにとても面倒な段取りを踏まないといかんのよ。 そういう意味では、やっぱりインスタンス各自に任せるのが一番なのかもしれんよ。 cloneを必ず実装して、その中の実装でも、どんなオブジェクトも自力ではコピーせずに、cloneを呼び出すようにして、呼び出せるcloneが無い場合、死ぬかないしは参照のコピーとなる可能性があるとワーニング吐くとくとか。 .toJSON実装しときゃstringifyだと割と解決するんだけどね。 : デフォルトの名無しさん [sage] 2016/06/15(水) 15:42:17.53 :TAanDQJ+ ディープコピーの実装する為だけに面倒くさいだけのツマラナイコード書く必要なくね? シリアライズでサッサと済ませればいいじゃん : デフォルトの名無しさん [sage] 2016/06/15(水) 16:25:26.27 :RkIC2p5j > for ofで、オブジェクトなら再帰的に、とやると、今度は参照が循環してしまった場合に備えて、メモ化する必要が出てきたりと、制限事項を制限事項とするためにとても面倒な段取りを踏まないといかんのよ。 なるほど、参照をメモ化すれば循環参照を保持出来るね オブジェクトの配列をメモ化しておいてArray#indexOfで探せばいいので比較的簡単に実装できそう JSON.stringifyを使ったら循環参照を消してた var obj = {a:{x:1},b:obj,c:this.a}; JSON.stringify(obj); // "{"a":{"x":1}}" toJSONを使ってユニークな文字を出力しても解決できそうにないかな ユニークな文字列と同値が存在したら破綻するし、渡すオブジェクト自身に循環参照していた場合、obj.toJSONを定義した途端にJSON.stringify(obj)が文字列になってしまう この辺がJSONの限界かな : デフォルトの名無しさん [sage] 2016/06/15(水) 17:24:42.09 :uCNYQdtw 一日中こんなところでくだらん連投して何が楽しいの? 仕事でも探せば? : デフォルトの名無しさん [sage] 2016/06/15(水) 17:35:48.15 :SSaOcc+i そうそう。 すでにクローン済みとメモ化するにも、ネストしたオブジェクトの底の方で発見したオブジェクトと、浅い所で発見したオブジェクトに対して、再起だと上にメモを返してやらないと、同一参照にはならんので、割とめんどくさいと思うよ。 吹き飛ばすのが一番、かつ、そんなデータを作らないのが一番と言う所に落ち着くんじゃないかな。 : デフォルトの名無しさん [sage] 2016/06/15(水) 18:40:06.70 :kCCRbfye 一番面倒なのは外部プロパティに加え内部プロパティを持ったビルトインコンストラクタのインスタンスだろう。 それを複製するにはそれぞれのクラスごとに対応しないといけないし、その最たるものである関数は対処不能。 ちょっと工夫すればJSON APIを活用しつつも循環参照も扱える みたいに(バグあり) : デフォルトの名無しさん [sage] 2016/06/15(水) 23:17:16.03 :wTcNi+2O > シリアライズでサッサと済ませればいいじゃん だから、その結果、日付型がおかしくなり関数が消え undefinedの値がキーごとなくなるのはひどすぎという話。 : デフォルトの名無しさん [sage] 2016/06/16(木) 07:45:47.42 :oMjTOMdB それで十分な場面はそうでない場面よりずっと多いと思うので、 酷いか酷くないかで言うと酷くないと思う。 : デフォルトの名無しさん [sage] 2016/06/16(木) 09:28:45.12 :J7Y57E8z 何でもかんでも汎用化しようとするのはヴァカのやる事だし そもそも込み入った形式のオブジェクトをディープコピーする機会は少ない 適用可能な範囲で簡単に実装できるならそうしたほうがいい できない範囲にはポリモーフィックに対応すればいい : デフォルトの名無しさん [sage] 2016/06/16(木) 09:30:35.19 :u57UUEr0 日付型や関数はundefinedが値として入っているのは ぜんぜん込み入った形式じゃないですよ? : デフォルトの名無しさん [sage] 2016/06/16(木) 12:30:42.86 :TTOq9A9Q 設計が悪いだろ。そりゃデータとロジックが分離できてないとしか言いようが無くないか? : デフォルトの名無しさん [sage] 2016/06/16(木) 15:06:47.71 :peThILAI ディープコピー使ったコードも8割方設計がまずい気がする : デフォルトの名無しさん [] 2016/06/16(木) 19:02:21.99 :ykd7wui8 iOS9のSafariでWebを見た時、リーダーが使えず 以下のURLを参考にフォントを拡大して使っています。 iOSのSafariで表示してるページの文字の大きさを自由に変更しよう! ttp://mag.torumade.nu/?p=7260 ここにあるJavaScriptの+/ーそれぞれの記述ですが、 フォントを多きく/小さくしている箇所は何処でしょうか? 今は2,3回ポチって文字を大きくしています。 出来ればポチったら一発で好みの文字の大きさにするスクリプトにしたいです。 JavaScriptで文字の大きさを買えるのに、試行するのは構いませんので 宜しくお願いします。 JavaScriptは書いたこと無いので、ここでの記述をコピペになると思います。 : デフォルトの名無しさん [sage] 2016/06/16(木) 21:35:26.83 :DYttMfqr めんどくさいしこれでいいよ まともな造りしてればまあ読めるだろ 大きさ変えたいなら 20px を好きな値にしな javascript:document.body.innerHTML+='%3Cstyle%3E*%7Bfont-size:20px!important%7D%3C/style%3E'; : デフォルトの名無しさん [sage] 2016/06/16(木) 22:07:33.10 :u57UUEr0 > 設計が悪いだろ。そりゃデータとロジックが分離できてないとしか言いようが無くないか? 日付やundefinedはデータですよ? これをロジックと言い張る人、初めて見たわーwww : デフォルトの名無しさん [sage] 2016/06/17(金) 00:16:54.38 :XW0r+pFS 関数、に言ってるんだけど。 とにかく言い負かされたくなくて必死なんだな。 あと、undefinedは正確にはデータではなく、状態。 日付は、日付。Dateクラスは、日付を扱うためのクラスであり、日付の値では無い、あくまで値は、.valueOf()で取得できる値。 ババロア君は馬鹿か無知かどちらかにしとけよ。ババロアすら詰まってないんじゃねえの? : デフォルトの名無しさん [sage] 2016/06/17(金) 00:31:17.80 :gkJjvuAc なんで3つのうち関数にしか言わないの? 残り2つは反論できませんって話かwww : デフォルトの名無しさん [sage] 2016/06/17(金) 00:33:59.24 :gkJjvuAc "abc".bold() って実行してみ? 文字列はクラスだって知らないのかな?www : デフォルトの名無しさん [sage] 2016/06/17(金) 00:46:16.36 :XW0r+pFS 2つはその、下で反論してるけど。 文字も読めないの? .valueOf実行してみ。 薄いラッパーに包まれたただの値だとわかるよ。 : デフォルトの名無しさん [sage] 2016/06/17(金) 00:47:44.33 :XW0r+pFS プロトタイプに実装されてるか、それともインスタンスに実装したのかも分けて考えような、ボンクラ。 : デフォルトの名無しさん [sage] 2016/06/17(金) 01:18:50.68 :gkJjvuAc 日付.valueOf実行してみ。 薄いラッパーに包まれたただの値だとわかるよ。 : デフォルトの名無しさん [sage] 2016/06/17(金) 01:20:43.01 :gkJjvuAc > プロトタイプに実装されてるか String.prototype.hoge = function() {} と定義したものが "abc".hoge() で呼び出されるな。 プロトタイプに実装されてるわけか。 : デフォルトの名無しさん [sage] 2016/06/17(金) 01:38:53.96 :MlF9RYHU プリミティブ型とラッパーオブジェクトは別物だから明確に区別しとかないと事故るぞ 例えば以下の様なケース if(new Boolean(false) && new Number(0)){ //どちらもオブジェクトが存在するのでtrue //よってここは常に実行される } if(false || 0){ //どちらもプリミティブでfalseとして扱われる値 //よってこちらは実行されない } : デフォルトの名無しさん [sage] 2016/06/17(金) 02:49:55.65 :bQl7rsTf ありがとうございました。 : デフォルトの名無しさん [sage] 2016/06/17(金) 09:31:42.05 :srh2csoY いろんなJS質問スレ見てきてるが半年ぶりくらいに まともな初心者解説のコードが書かれたな。 : デフォルトの名無しさん [sage] 2016/06/17(金) 16:34:23.27 :6iHig3Yk ゴミが持論書きなぐってるだけのクソスレに何を期待してるの? : デフォルトの名無しさん [sage] 2016/06/17(金) 17:12:33.16 :BB7ZCZit 動画サイトだけ自動でCSSを切り替えるために、動的に挿入されたiframe, video, object, embed エレメントを検出したいんですが、効率的な方法が思い浮かばず困っています iframeとvideoはdocumentでイベントリスナ(load, loadedmetadata)すれば検出できるんですが、なぜかobjectとembedちゃんからのお便りが来ません(chrome ver51) とりあえず暫定的にクリック毎にgetElementsByTagName()で代替しているんですが、 何かもっとスマートな方法ないでしょうか : デフォルトの名無しさん [sage] 2016/06/17(金) 19:02:26.08 :Rqj2POSn MutationObserverで逐一tagName調べるのが無難かな : デフォルトの名無しさん [sage] 2016/06/17(金) 19:29:30.69 :BB7ZCZit 動画サイトの場合、オプション{childList true, subTree: true}でノード追加を監視すると、コンソールが常時ナイアガラの滝のように・・・ : デフォルトの名無しさん [sage] 2016/06/17(金) 19:41:50.28 :nZkVhJBc その通りだね 俺様流カレーライスの作り方みたいなもんだよねw : デフォルトの名無しさん [sage] 2016/06/18(土) 02:23:30.51 :zfC6EzMS その俺様流カレーライスの作り方で、ドヤ顔でハヤシライスの作り方説明して、これが「妥当なカレーライス」とか言っちゃうような俺流deepcopyerが 主みたいなスレだからね。 まともな奴はレスしなくなるっしょw : デフォルトの名無しさん [sage] 2016/06/18(土) 09:38:41.31 :Fpexe9SW ハヤシライスというより肉じゃがだと思う : デフォルトの名無しさん [!sage] 2016/06/18(土) 09:43:04.22 :pG9pCEms "a,b,c".split(",",1)で、 ["a","b,c"]を取得したいのですが、["a","b"]になります どうすrばいいですか : デフォルトの名無しさん [sage] 2016/06/18(土) 10:53:48.22 :49KWKmmu <input id="a" type="text"> document.getElementById('a').addEventListener('input', function(e) { console.log(e); }, false); enterキーを押した時だけログがでないんですがどうしてですか? : デフォルトの名無しさん [sage] 2016/06/18(土) 13:22:34.63 :z24FpIHh function test1() { return new Promise(function(resolve, reject) { // 非同期な処理 }; } function test2() { return new Promise(function(resolve, reject) { // 非同期な処理 }; } 上記の関数を逐次実行したい場合、 Promise.resolve() .then(() => { let promise = test1(); promise.then(() => { console.log('test1 OK'); }).catch(function(e){ console.log('test 1NG'); }); return promise; }) .then(() => { let promise = test2(); promise.then(() => { console.log('test2 OK'); }).catch(function(e){ console.log('test2 NG'); }); return promise; }) }); って書くってことであっていますか?意図通り動くのですが、回りくどいし見にくい気がして : デフォルトの名無しさん [sage] 2016/06/18(土) 13:28:02.54 :z24FpIHh document.getElementById('a').addEventListener('keydown', function(e) { console.log(e); }, false); keydown にすればenterも拾える : デフォルトの名無しさん [sage] 2016/06/18(土) 13:30:40.39 :qpxG5nAO そんなわけなかろうw いまゲームしてるからちょっと待てwww : デフォルトの名無しさん [sage] 2016/06/18(土) 13:32:40.70 :z24FpIHh splitだけでその配列を取得するのは無理 : デフォルトの名無しさん [sage] 2016/06/18(土) 13:33:55.65 :z24FpIHh お、ありがとうございます たのんます : デフォルトの名無しさん [sage] 2016/06/18(土) 13:40:53.70 :lYop9Jcb それ戻り値["a"]じゃね? とりあえず脳内補正で第二引数は2だとするとjavascriptのsplitだとその希望の動作にはならない 第二引数なしでsplitして[t[0],t.slice(1).join(',')]とか indexOfとsubstring組み合わせて自分で切り出すとか 他にも色々やり方はあるので要求に合った方法を考えて関数化しとけばいいよ : デフォルトの名無しさん [sage] 2016/06/18(土) 13:48:58.73 :7whaN/tJ indexOfでインデックスを取得してslice : デフォルトの名無しさん [sage] 2016/06/18(土) 13:49:03.57 :z24FpIHh 722ですがこっちですかね、余計見にくいような気もしますが(アロー演算子のせい?) test1().then(() => { return test2(); }, () => { console.log('1のNG'); }).then(() => { // 1 も 2 も成功 }, () => { console.log('2のNG'); }).catch(function(e){ console.log('ここにはいつくるんだろう?'); }); : デフォルトの名無しさん [sage] 2016/06/18(土) 13:52:05.82 :ousMayNp thenの結果は自動でプロミスに変換されるから、function test2 のなかでプロミスを作らなくておk シンプルにfunction test2(previousResult) { // 非同期な処理 return resTest2} としておいて test1 .catch(resTest1 => resCatch1) .then(test2) .catch(resTest2 => resCatch2) 〜 とつなげればいい 一個目のcatchを省略した場合、 test1でエラーが起きると最後のキャッチにジャンプする : デフォルトの名無しさん [sage] 2016/06/18(土) 13:54:20.50 :7whaN/tJ 可能性はいくつかある - input要素で [Enter] キーを押している - IME変換時に [Enter] キー : デフォルトの名無しさん [sage] 2016/06/18(土) 13:56:06.15 :ousMayNp thenの第二引数をcatchとして使うと、そのthenで起きたエラーは拾わなあいから、必要ないときはcatchを使ったほうがいいよ 分かり易いから : デフォルトの名無しさん [sage] 2016/06/18(土) 13:56:58.21 :qpxG5nAO ほらよ。ついでに値の渡し方も書いておいたぞ。 thenの戻り値としてPromiseではないものを返せるところにも注意な。(return textの所) あと、最初はPromise.resolveで始めなくても、いきなりtext1("sample").then でも良い。 function test1(text) { return Promise.resolve(text); //return Promise.reject(text); } function test2(text) { return Promise.resolve(text); //return Promise.reject(text); } Promise.resolve("sample") .then(text => test1(text)) .then(text => { console.log("test 1 OK:" + text); return text; }) .catch(text => { console.log("test 1 NG:" + text); return text; }) .then(text => test2(text)) .then(text => { console.log("test 2 OK:" + text); }) .catch(text => { console.log("test 2 NG:" + text); }); : デフォルトの名無しさん [sage] 2016/06/18(土) 14:06:33.76 :qpxG5nAO ただ、一直線に書くとtext1とtext2の範囲なのかわかりづらいから を少し改良したこれでもいい気もしてきたな。 Promise.resolve("sample") .then(text => test1(text) .then(text => { console.log("test 1 OK:" + text); return text; }) .catch(text => { console.log("test 1 NG:" + text); return text; }) ) .then(text => test2(text) .then(text => { console.log("test 2 OK:" + text); }) .catch(text => { console.log("test 2 NG:" + text); }) ); : デフォルトの名無しさん [sage] 2016/06/18(土) 14:09:27.96 :qpxG5nAO なお、もちろんこう書くこともできるし function test1(text) { let p = Promise.resolve(text); //let p = Promise.reject(text); return p.then(text => { console.log("test 1 OK:" + text); return text; }) .catch(text => { console.log("test 1 NG:" + text); return text; }); } function test2(text) { let p = Promise.resolve(text); //let p = Promise.reject(text); return p.then(text => { console.log("test 2 OK:" + text); return text; }) .catch(text => { console.log("test 2 NG:" + text); return text; }); } Promise.resolve("sample") .then(text => test1(text)) .then(text => test2(text)); : デフォルトの名無しさん [sage] 2016/06/18(土) 14:18:57.19 :qpxG5nAO catchをthenの機能に含めて、こういう書き方もできる。 Promise.resolve("sample") .then(text => test1(text)) .then(text => { console.log("test 1 OK:" + text); return text; }, text => { console.log("test 1 NG:" + text); return text; }) .then(text => test2(text)) .then(text => { console.log("test 2 OK:" + text); }, text => { console.log("test 2 NG:" + text); }); : デフォルトの名無しさん [sage] 2016/06/18(土) 14:27:30.76 :lYop9Jcb まずtest1とtest2の中の非同期でresolve(戻り値)またはreject(エラーの原因)を呼んでる事は前提とすると function err(e){console.error(e);}; function finish(val){console.info("終了",val);}; test1().then(test2).then(finish).catch(err); thenで第二引数を渡さなければrejectもcatchに飛ぶのでこれで充分なはずだけど? : デフォルトの名無しさん [sage] 2016/06/18(土) 14:30:46.97 :qpxG5nAO .then(text => test1(text)) は .then(test1) これでよかったな。 : デフォルトの名無しさん [sage] 2016/06/18(土) 14:38:51.52 :qpxG5nAO 他にもいろいろ書き換えてみたけど、これが俺の中でベストかな Promise.resolve("sample") .then(test1) .then(text => { console.log("test 1 OK:" + text); return text; }, text => { console.log("test 1 NG:" + text); return text; } ) .then(test2) .then(text => { console.log("test 2 OK:" + text); }, text => { console.log("test 2 NG:" + text); } ); : デフォルトの名無しさん [sage] 2016/06/18(土) 14:51:32.54 :z24FpIHh 皆さんありがとうございます。 まだ若干こんがらがってますが、理解がだいぶマシになりました。 test2はプロミスにしなくてOKということですが、 test2を単独で使用する可能性がある場合は今のままでも大丈夫ですよね...? : デフォルトの名無しさん [sage] 2016/06/18(土) 14:52:59.75 :z24FpIHh 皆さんのを参考に function test1(text) { return new Promise(function(resolve, reject) { setTimeout(() => { reject(text); }, 1000); }); } function test2(text) { return Promise.resolve(text); } Promise.resolve("sample") test1("test") .then(text => { console.log("test 1 ok " + text); return text; }, text => { console.log("test 1 ng " + text); return text; }) .then(test2) .then(text => { console.log("test 2 ok " + text); }) .catch(text => { console.log("test 2 ng " + text); }); こういうのを書いてみたのですが、 test1でrejectしてもそのままtest2に入ってきましたが、これはこういうものでしょうか? : デフォルトの名無しさん [sage] 2016/06/18(土) 14:54:43.38 :z24FpIHh すみません、の Promise.resolve("sample")は不要ですね : デフォルトの名無しさん [sage] 2016/06/18(土) 15:02:45.38 :qpxG5nAO > test1でrejectしてもそのままtest2に入ってきましたが、これはこういうものでしょうか? あれ?そういう仕様だと思ってたよw じゃあ書き換えが必要だね。 いまゲームしてるから(ry : デフォルトの名無しさん [sage] 2016/06/18(土) 15:15:57.87 :HfDVf1Az ttp://www.html5rocks.com/ja/tutorials/es6/promises/ : デフォルトの名無しさん [sage] 2016/06/18(土) 15:28:56.46 :z24FpIHh 何度もすみません。 ありがとうございます、そのサイト見てたはずですが見落としていました だいたい理解できました。 一連の質問は解決ということで問題ないです。 皆さんありがとうございました。 : デフォルトの名無しさん [sage] 2016/06/18(土) 23:31:55.96 :aNvZce14 imeオンオフに関わらずEnterキーが入力されたか確認する方法を教えてください : デフォルトの名無しさん [sage] 2016/06/19(日) 01:39:49.43 :XpUIM/8a IME周りはブラウザ毎に実装が違ったりして面倒なので全てのブラウザで動くとは保証出来んが keydownでキーコード229,0,13を拾えばだいたい拾えるんじゃないかね? : デフォルトの名無しさん [sage] 2016/06/19(日) 01:54:37.93 :jkRTuMFS おしんとひこうきぴゅんぴゅん : デフォルトの名無しさん [sage] 2016/06/19(日) 15:42:45.26 :j/5yp6z/ 古いソフトのプラグイン頼まれたんだけど新しめのESで追加された機能がほとんど使えなくて難儀してる よくわからないんだけどこういうのって作者が対応すれば使えるようになるの? VSなんかだと参照突っ込むだけで機能使えるようになるけど そういうお手軽はお話じゃないんかね : デフォルトの名無しさん [sage] 2016/06/19(日) 19:29:55.99 :fmRoj+h3 なんのエンジン使ってるか知らんが例えばV8でも無理でーす 奴らは自分のブラウザで動けばいいので毎日のように互換性壊しまくりのスケ〜 : デフォルトの名無しさん [sage] 2016/06/20(月) 18:11:29.60 :tys3WiX6 javaでいうTreeSetを使いたいのですが、ありますか? : デフォルトの名無しさん [sage] 2016/06/20(月) 18:48:32.16 :hRWj67CX (非数字)文字列ならオブジェクトのプロパティとして加えていって列挙すればソートされてる : デフォルトの名無しさん [sage] 2016/06/21(火) 00:26:47.70 :qdV120KE リンクをクリックするとJavaScriptでページ遷移するウェブページで、遷移する先のURLを事前に取得する方法はありますか? 意図としてはページに飛ばされる前にどこに飛ぶのか判断したいためです。 : デフォルトの名無しさん [sage] 2016/06/21(火) 00:47:36.70 :Zouo8B6w JavaScriptでページ遷移するなら遷移先URLもJavaScriptで分かっているはずなのだが : デフォルトの名無しさん [sage] 2016/06/21(火) 08:14:40.47 :vlWZNI1X 最終的な遷移先のURLを鯖側で生成してたらわからんけど : デフォルトの名無しさん [sage] 2016/06/21(火) 09:06:55.19 :zhgdBgoI 説明が足らずすみません。 他者が作ったウェブサイトの環境で、ブラウザの拡張機能などで自前のJavaScriptを実行して判断したいということでした。 そういうことだとさんの言うとおり、他者のサーバで生成してるからわからないってことになりそうですね。 : デフォルトの名無しさん [sage] 2016/06/21(火) 11:17:04.95 :Zouo8B6w URLの生成規則を探すとか、JavaScriptコードを読んでコードから遷移先URLを得る、とか一概には言えないと思う : デフォルトの名無しさん [sage] 2016/06/21(火) 12:14:28.77 :VoVagir1 クライアントが移動先を知ってるなら取る方法はない訳ではないが 鯖側でリダイレクトさせる場合にはAjaxでリンクを踏んで戻った内容からリダイレクト先をスクレイピングするとかしないと無理だろうね つまり画面遷移をせずにリンク先を取得する事は可能、鯖と通信せずにリンク先を取得する事は不可能なケースがある クライアント上で動作している以上、クライアントが知らない情報は取得出来ない : デフォルトの名無しさん [sage] 2016/06/21(火) 13:29:33.82 :NcocGzZA いや、どこに跳ぶかを判断したいくらいなのだから、 いろんな方法・想定で常識的な範囲で全て判断できると言えるだろう : デフォルトの名無しさん [sage] 2016/06/21(火) 19:00:28.03 :s0xSal8K VBのFormsみたいなフレームワークってないすか? デザイナでペタペタ配置してロジックは画面オブジェクトにハンドラを書くだけ的なやつです : デフォルトの名無しさん [sage] 2016/06/21(火) 19:02:39.48 :rJ2mr4JY ホームページビルダで出来ない? 使ったことないから知らんが : デフォルトの名無しさん [sage] 2016/06/21(火) 20:02:34.86 :zhgdBgoI 丁寧に回答していただきありがとうございます。 リンククリック時のJavaScriptからレスポンスを解析してURLを取得できるかを試してみます。 : デフォルトの名無しさん [sage] 2016/06/21(火) 22:07:52.39 :8xYufxWO var fs = require('fs'); var data = "write text test!"; fs.writeFile('writetest.txt', data , function (err) { console.log(err); }); : デフォルトの名無しさん [sage] 2016/06/21(火) 22:09:11.15 :8xYufxWO このくらいのプログラムをNodejsで作ってNodejs上ではもちろん動きましたが : デフォルトの名無しさん [sage] 2016/06/21(火) 22:14:12.35 :8xYufxWO webpack上では動きません。 先にNodistを入れたのですがUpdateすると依存関係のエラーが多かったので Nodejp単体で入れることにしました。 ところが npm install webpack -g とかするとなぜかNodistのフォルダに入ってしまいます。 そのせいでビルドができてないのでしょうか。 経験のある方お願いします。 スレ違いなら誘導していただけるとありがたいです。 : デフォルトの名無しさん [sage] 2016/06/21(火) 23:28:49.59 :8xYufxWO 変換したものは長くてここに表示しきれないですが require is not defined と出ますね。 一応webpackは通したのですが。 ブラウザはFirefoxです。 : デフォルトの名無しさん [sage] 2016/06/22(水) 00:14:59.67 :azjhZ3WA javaScriptのSetってSetとWeakSetしかないんですか? SortedSetが欲しいです : デフォルトの名無しさん [sage] 2016/06/22(水) 07:19:51.98 :cIEa5wGZ ソートっていろんな種類があるからねぇ。 自分で作ったら? : デフォルトの名無しさん [sage] 2016/06/22(水) 11:58:39.11 :q9pILfZy Nodist を アンインストールしてその後、 Node.jsを入れたのですが npm root -g としてモジュールがインストールされるディレクトリを見ると C:\Program Files (x86)\Nodist\bin\node_modules なっています。 環境変数も見ましたがNodistの残骸が残っているようにはありません。 どこにNodistの情報が残っているのでしょうか。 : デフォルトの名無しさん [sage] 2016/06/22(水) 14:53:18.59 :q9pILfZy ユーザーディレクトの下にprefixの設定が残っていたようです。 : デフォルトの名無しさん [sage] 2016/06/22(水) 14:58:05.09 :q9pILfZy npm config lsで調べて上記のことが分かったのですが、未だに require is not defined のエラーが解決されません。 /***/ }, /* 2 */ /***/ function(module, exports) { module.exports = require("fs"); /***/ } /******/ ]); どうもコメントばかりついていてうまく変換されたように見えません見えません。 : デフォルトの名無しさん [sage] 2016/06/22(水) 21:00:04.72 :/0SrxieV 誰としゃべってんのこいつ : デフォルトの名無しさん [sage] 2016/06/23(木) 00:00:47.49 :wmr/9KTO 恐らく環境変数node_pathがNodistのディレクトリのままだろうから書き換え あとfsのようなNode.js用モジュールはWebpackでバンドルできないはず Webpackからファイル読みたい場合はLoader使って事前に含めるしかない : デフォルトの名無しさん [sage] 2016/06/23(木) 01:13:09.29 :Lewr0A8P ありがとうございます。 Webpackからは基本できないのですね。 set コマンドでは NODE_PATH=C:\Users\habu\AppData\Roaming\npm\node_modules アンインストーラーを使っても環境変数を調べてもどうにもならなかったので アンインストーラーが削除し忘れた "C:\Users\xxxx\.npmrc" を手動で削除したらパスの通ったところにモジュールをインストールするようになりました。 : デフォルトの名無しさん [sage] 2016/06/23(木) 12:30:54.99 :TKILd+kM IE11,Edge,Firefox,Chrome,safari,Operaの6つのブラウザを同時に起動してるんですが javascriptを更新したらブラウザに切り替えてページ更新するのが面倒くさいんですが ファイルが更新されたら自動的に更新する方法ありませんか? : デフォルトの名無しさん [sage] 2016/06/23(木) 12:33:06.98 :p9xHkbsy 定期的にリロードするようにしたら良いんじゃないの? : デフォルトの名無しさん [sage] 2016/06/23(木) 14:14:01.07 :1rhmo8jO ファイルを監視して更新があったらブラウザのウィンドウをアクティブにしてリロード操作(F5?)のイベントを送るツールでも作ればいいんでない? : デフォルトの名無しさん [sage] 2016/06/23(木) 15:28:59.42 :it3byhHh 簡単に出来ますよ : デフォルトの名無しさん [sage] 2016/06/24(金) 11:16:15.69 :M5Y9qYOR いまいち例が無くてどのローダーを使えばテキストファイル出力ができるのか 分からないです。 ホームページで確認してraw-loaderがUTF-8に出力するみたいなことを書かれていた GreasemonkeyからinnerTextをテキストファイルに出力したいだけなのですが かなり敷居が高いようですね。 色々なサイトで実験されている : デフォルトの名無しさん [sage] 2016/06/24(金) 11:22:06.51 :M5Y9qYOR みたいなのですが、セキュリティがらみなので改善(改悪?)されてできなくなったところが多いです。 raw-loaderの使い方の例がもう少しサンプルで出されているサイトがあればいいのですが。 あと、少し2ちゃん専用のソフトの使い方になれてなくて間違えて文章を途切れ途切れに 送ってしまったことをお詫びします。 : デフォルトの名無しさん [sage] 2016/06/24(金) 12:30:59.24 :V/itJnf4 Loaderは読み込んでバンドルするだけで書き込みはできないよ ブラウザから書き込みしたいなら拡張機能のAPIを探すしかない : デフォルトの名無しさん [sage] 2016/06/24(金) 14:35:52.18 :M5Y9qYOR そうなんですか。どこを探しても無理なわけですね。 拡張機能と言うのはブラウザの拡張機能ですか? 煮詰まったので今のところはローカルにapacheでサーバーを立てて PHPでアクセスすることを考えています。 それでだめなら拡張機能のAPIを探すことを考えています。 : デフォルトの名無しさん [] 2016/06/24(金) 23:07:00.20 :qTbX1cTa プログラミングに詳しい方々がいると聞いて質問しにきました。 初心者なので説明力、知識が乏しいですが申し訳ありません。 私は、不特定多数の人が画像をサイト上のみで「読み込み→編集→ダウンロード」を全てできる画像編集サイトを作ろうと思っていて、 色々調べている内にImageMagickと言うプログラムにたどり着きました。 ですが使い方などが全くわからず、困っております。現在xサーバーを利用していてホームページを取得しています。 xサーバーは公式で既にImageMagickがインストールされているということです。(この事についてもいまいち分かりません) どなたか分かりやすく画像編集サイトの作り方を教えていただけませんでしょうか。 OSはwin7 64bitです。 本当に困っています。 : デフォルトの名無しさん [] 2016/06/24(金) 23:12:05.32 :Fo67yJqk PHPで作った方がいいと思うよ PHP板行ったら? ttp://echo.2ch.net/test/read.cgi/tech/1466683550/ : デフォルトの名無しさん [] 2016/06/24(金) 23:14:07.58 :qTbX1cTa PHP板にてここで聞いた方がいいと言われ、質問いましました : デフォルトの名無しさん [] 2016/06/24(金) 23:14:44.48 :Fo67yJqk jsじゃ無理だよ PHPじゃないと出来ない : デフォルトの名無しさん [] 2016/06/24(金) 23:16:31.66 :Fo67yJqk 一番簡単に作れるのは、Ruby Rubyスレ行ってみたらどうだ? : デフォルトの名無しさん [sage] 2016/06/24(金) 23:28:09.79 :V/itJnf4 その通りブラウザ拡張機能のAPI でもローカルにHttpd立てていいならの弄って使えばいいんじゃない どうせグリモンで動かすUserScriptからHTTPでやり取りするんだろうし まず画像を読み込んで編集して保存するのはJSで出来る 画像を不特定多数でどう扱うのかによってはサーバー側の実装も必要だけど これもNode.jsを使えばJSで作れる、因みにこっちはPHPでも作れる ただ作り方となると手順が膨大だから一々説明してられん 「JavaScript ファイル読み込み」など一つずつググって勉強するしかない : デフォルトの名無しさん [sage] 2016/06/25(土) 11:12:38.28 :FcXCwkAU textareaで入力した位置を知る方法ありませんか? : デフォルトの名無しさん [sage] 2016/06/25(土) 11:24:52.49 :YFtEcFF6 コピペなんかも含めると、入力される前の文字列をバッファしておいて、今回文字列と一番最初に差異が発生する文字まで素直に比較するほうが早いんじゃないかな。 : デフォルトの名無しさん [sage] 2016/06/25(土) 18:02:11.94 :4KOaD2nt selection とか range で調べるよろし aaa => aaaa どこだと思う? : デフォルトの名無しさん [sage] 2016/06/26(日) 00:07:56.02 :nF43cUdI いつもは、ネットと、日経ソフトウェアを毎月買ってるから、 日経ソフトウェアのJavascript特集しか読まないんだけど、 久しぶりに書店でJavascriptの本あさってたら、 JAVAの本と混同してJavascripの本が並べてあった。 何十人かに試したことあるが、プログラム興味ない人がらみたら、 JAVA=Javascripの省略して言うとJAVA Javascrip=JAVAの正式名称 って認識しかしてないからな。 : デフォルトの名無しさん [sage] 2016/06/26(日) 05:07:36.84 :G2D2TVQW コードの問題。 例えば旅行本だと国別に区切られてるが、プログラミング言語にはそれがない。 : デフォルトの名無しさん [sage] 2016/06/26(日) 05:45:31.43 :FIFPZYCa 自分の住んでる地元の一番大きい本屋もまんまこれだった CとかVBAとか有名な言語は分類札付けて、カテゴリ分かれてるのに JavaScriptだけJavaの所に全部突っ込まれてる : デフォルトの名無しさん [sage] 2016/06/26(日) 08:11:55.58 :lQezokMe JQueryを使ってテキストフォームを扱っていますが、項目数が増えさらにページ遷移が増えました。 JQueryよりもそういうことを扱うことに長けたフレームワークみたいなのがあればそちらに移りたいのですが何かそういったことを補助してくれるようなものはありませんか? : デフォルトの名無しさん [sage] 2016/06/26(日) 10:40:37.56 :TQCRDnYp 具体的に何がしたいのかがわかならい エスパーするとJQueryの使い方がわからないってことかな? : デフォルトの名無しさん [sage] 2016/06/26(日) 11:55:24.56 :9G4pt3CC DOM書き換えでのページ管理に限界を感じてるからjQuery捨てたいみたいな感じ? 学習コストかかるだろうけど、流行ってるReactとか : デフォルトの名無しさん [sage] 2016/06/26(日) 12:24:25.89 :rwwPSVEU どうも使い方が分かっていない人が多いよね センスがないとでも言うのだろうかw : デフォルトの名無しさん [sage] 2016/06/26(日) 12:39:49.80 :AVATszy2 ライブラリ質問はスレ違いといいたいところだが、テンプレが改変されてたんだった Web制作板の荒れようをみるにプログラム板にもライブラリスレを持ってくるべきなんだろうが、統合する流れでいいのかね あるいは、べつにスレを立てるべきか : デフォルトの名無しさん [sage] 2016/06/26(日) 12:51:24.25 :mFfhShD5 vol.120でまともなテンプレで建て直していいんじゃね あっちのライブラリスレもこの板に移す話はあったんだけどよくわからんな : デフォルトの名無しさん [sage] 2016/06/26(日) 14:02:23.24 :8VkrGxxn reactの質問はどこでしたらいいですか? : デフォルトの名無しさん [sage] 2016/06/26(日) 15:09:43.72 :Tksz8qNK Yahoo知恵袋がおすすめ : デフォルトの名無しさん [] 2016/06/26(日) 15:12:21.33 :GJBR8D9H javaの道(掲示板)がおすすめ : デフォルトの名無しさん [sage] 2016/06/26(日) 20:07:37.03 :YbtLHjt0 <img src=x onerror='alert(1)'></img> みたいにHTMLエンティティがエスケープされてるテキストノードをtextContentで参照するとエスケープが解除されるので、innerHTMLに代入した瞬間にalertが鳴るよって記事をどっかで見たんだけど、 誰か見覚えあってURLわかる人おらんかのう : デフォルトの名無しさん [sage] 2016/06/26(日) 20:28:22.69 :nF43cUdI 自分の作ってるwebアプリでエラー原因調べて、質問するって 難しいんだよな 問題を書き出すって骨の折れる作業だし : デフォルトの名無しさん [sage] 2016/06/26(日) 22:32:25.10 :D+buTpss 立て直すとスレが乱立するからこのスレに新しいテンプレを貼り付ける程度で十分かと 問題はライブラリスレもここに統合するか、別スレに独立させるか : デフォルトの名無しさん [sage] 2016/06/26(日) 22:58:59.69 :oKpI3hc9 重複が嫌なら一個飛ばして121にするとか 本来荒らしの立てたスレを再利用するってのはよくないし、まあ今はずるずる来てるけど : デフォルトの名無しさん [sage] 2016/06/26(日) 23:29:46.97 :S5Kwqidr むやみに別スレ建てんなよWeb製作版の二の舞いになる スルーすればいいだけ : デフォルトの名無しさん [sage] 2016/06/26(日) 23:30:12.91 :yAtATLvz ブレークポイントを適度に付けて、デバッグする。 変数の内容も見る。 エラーメッセージで検索する C/C++以外の言語は、シャローコピーするから、破壊的変更をするときは要注意! : デフォルトの名無しさん [sage] 2016/06/27(月) 00:44:37.06 :Azx2VHQP JSはDOM絡みのテスト書くのが特にしんどい 書いてもElectronで動いたのがwebkitじゃダメでしたとかままあるし 復活したWeb板のライブラリスレもぼちぼち伸びてきてるし また潰されるかあるいは埋まりそうになるまで保留でいいんじゃない : デフォルトの名無しさん [sage] 2016/06/27(月) 00:51:43.37 :Qt/WCn3i JSにかぎらずUIのテストっていうのは難しいんだよ。 : デフォルトの名無しさん [sage] 2016/06/27(月) 04:38:11.54 :Hl6kI6LE 別にJSじゃなくてもDOMのテストは難しいしね JSにはDOMしかないわけでもないし : 534 [sage] 2016/06/27(月) 12:24:43.46 :oBcOOaIt なんですが、プログラム板なのにコードが潰れることにもやっとしたので、スレにjs-beautifyとhighlight.jsを掛けるchrome拡張を作ってみました 試作機1号ができたのでさっそく試してみたんですが・・・ 2chのコメのなかにコーディングのカラースキームが混在してる違和感が凄いww ttp://i.imgur.com/a1EvCdi.png ttp://i.imgur.com/cGSR5cj.png ttp://i.imgur.com/JVt9adl.png ttp://i.imgur.com/rPbmqg9.png : デフォルトの名無しさん [sage] 2016/06/27(月) 19:39:44.45 :jJ8qgrxg <a href="〜hoge.pdf">PDF</a> 上記のようにHTMLでPDFのリンクを作成しPDFをダウンロードさせたいのですが、IEのみ同一タブでPDFが表示されてしまいダウンロードできません。 IEの設定を変更することなく、HTMLとjavascriptだけでIEでもダウンロードできるようにしたいのですが、何か良い方法はありませんでしょうか。 ちなみに、以下の4ブラウザ全てでダウンロード可能にしたいです。 ・IE11 ・chrome ・firefox ・safari(mac) よろしくお願いします。 : デフォルトの名無しさん [sage] 2016/06/27(月) 20:20:31.97 :Hl6kI6LE ChromeとFirefoxだけで我慢しんさい : デフォルトの名無しさん [sage] 2016/06/27(月) 20:45:40.58 :Qt/WCn3i 普通はHTTPヘッダで制御する。 つまりウェブサーバーかサーバー側のアプリ あんたがクライアントアプリしか書けないとか サーバーいじる能力がないなら諦めなさい : デフォルトの名無しさん [sage] 2016/06/27(月) 20:59:41.80 :zoQ6BtW7 やはり無理なんですね…… ありがとうございます! : デフォルトの名無しさん [sage] 2016/06/27(月) 21:24:55.66 :zcQLvEgn var xhr = new XMLHttpRequest(); xhr.open("GET", "hoge.pdf"); xhr.responseType = "blob"; xhr.addEventListener("load", function(){ var blob = new Blob([xhr.response]); window.navigator.msSaveBlob(blob, "hoge.pdf"); }); xhr.send(); : デフォルトの名無しさん [sage] 2016/06/28(火) 15:38:36.90 :+n63MTqJ 「できる」と「やっていい」は別だよな 最低限のモラルも守れないようじゃねぇ まあdownload属性のエミュなら良いと思うよ : デフォルトの名無しさん [sage] 2016/06/28(火) 16:46:50.81 :YVMoIJVb ttp://jsdo.it/ksk1015/7lvD のページのサンプロコード、20行目で見かけたのですが、 この場合のvideoの前後にあるスラッシュはどういう意味があるのでしょうか? if( !/video/.test(file.type) ){ !video.test(file.type) ではダメなのでしょうか : デフォルトの名無しさん [sage] 2016/06/28(火) 17:09:49.76 :+pusRZvt /で囲まれてるのは正規表現 この場合file.typeに"video"って文字列が含まれてるかみてる : デフォルトの名無しさん [sage] 2016/06/28(火) 18:04:00.99 :YVMoIJVb なるほど、ありがとうございます : デフォルトの名無しさん [sage] 2016/06/29(水) 11:29:03.86 :VdhPxYFi わりと素で聞きたいんだけど、このケースのどの部分がモラルに反してるの? 他のブラウザがdownload属性でできることを、IEができないから代替策探してるだけだよね : デフォルトの名無しさん [sage] 2016/06/29(水) 16:17:09.72 :L39nkKa/ function fileListDirectory(files) { var ファイル数 = files.length; var ファイル名 = new Array(); var パス = new Array(); for (i=0; i<ファイル数; i++) { ファイル名[i] = files[i].name; パス[i] = files[i].webkitRelativePath; // 行A } } これでフォルダの全てのファイルのパスがわかるんだが これを絶対パスにするにはどうすればいいんだ? : デフォルトの名無しさん [] 2016/06/29(水) 21:48:19.77 :ViUTH2Wh JQueryの$って関数ですか?連想配列ですか? $(hoge)が出来るというのは関数だと思うんですが、$.foo(bar)が出来るというのは連想配列だと思います 一体何なんですか?あのキモイ未知の変数は : デフォルトの名無しさん [sage] 2016/06/29(水) 22:21:45.97 :uR/sla0B 関数もオブジェクトだからな : デフォルトの名無しさん [] 2016/06/29(水) 22:29:13.21 :ViUTH2Wh つまり hoge=function(){ //処理 } hoge.a=function(){ //処理 } hoge.b=function(){ //処理 } って事ですか? : デフォルトの名無しさん [sage] 2016/06/29(水) 22:45:16.05 :11RiuwSN jQueryは関係ありません。 あなたはJavaScript自体がわかっていません。 そしてオブジェクト指向もわかっていません。 「オブジェクト指向言語であるJavaScriptは、関数もオブジェクトです。」 この一言で理解できますかね?w function foo(a, b, c) {} という関数を作ったら関数もオブジェクトなんだから console.log(foo.name) とか ※nameは非標準だけれどだいたい使える console.log(foo.length) とか ※関数の引数の数 foo.toString() とか ※ソースコードを返す。 標準でできるんですよ。 : デフォルトの名無しさん [sage] 2016/06/29(水) 22:48:52.04 :11RiuwSN 真のオブジェクト指向言語は何でもオブジェクトであるって 考え方ができるかどうかですねw JavaScriptではオブジェクトではないものもあるけれど、 どちらかと言えばオブジェクトであるものが多い方 真のオブジェクト指向に近づくほど なんでもオブジェクトになる。 : デフォルトの名無しさん [] 2016/06/29(水) 22:52:05.42 :0EN53mtK そんな事出来るのかよ 凄い : デフォルトの名無しさん [sage] 2016/06/30(木) 00:37:24.48 :s9p3Net1 だからnullもオブジェクトにしたまま放置なんですね(白目) : デフォルトの名無しさん [sage] 2016/06/30(木) 01:51:26.57 :RtLNL8Qe Functionオブジェクトも、大本のObjectオブジェクトから派生している。 Objectは、処理(メソッド)・状態(プロパティ)を持つ 関数型言語ではオブジェクトは、1級市民オブジェクト(First Class Object)と言って、 持ち運べたり、関数の引数に渡したり、関数から戻り値として返したりできる つまり、Functionはオブジェクトだから、持ち運んで、後で呼べる(遅延・コールバック) クラス・無名クラス・クロージャ・ラムダも同じで、オブジェクト。 primitive 以外は、すべてオブジェクト : デフォルトの名無しさん [sage] 2016/06/30(木) 11:12:43.81 :bL1n9aIG 一級市民オブジェクトw : デフォルトの名無しさん [sage] 2016/06/30(木) 12:54:42.82 :EibH/T4h JapScript : デフォルトの名無しさん [sage] 2016/06/30(木) 12:55:18.07 :s9p3Net1 一級市民オブジェクトとか和訳した人センスあるわw 嫌いじゃない でも和訳で覚えるとググるとき大変じゃね : デフォルトの名無しさん [sage] 2016/06/30(木) 13:18:07.02 :bL1n9aIG ググった結果、驚愕の真実が・・・ ファーストクラスオブジェクト: 約 1,520 件 第一級オブジェクト: 約 1,400 件 一級市民オブジェクト: 約 49 件 少なすぎじゃね? Googleぶっこわれてんのか? : デフォルトの名無しさん [sage] 2016/06/30(木) 13:41:53.09 :9tXhK5Ll First Classで市民が出てくる当たり英語というか教養がないな : デフォルトの名無しさん [sage] 2016/06/30(木) 14:17:10.15 :bL1n9aIG 逆かもよ ttps://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88 > 第一級オブジェクト > > 第一級オブジェクト(ファーストクラスオブジェクト、first-class object)は、(略) > (略) > この言葉は1960年代にChristopher Stracheyによって「functions as first-class citizens」という文脈で初めて使われた。 : デフォルトの名無しさん [sage] 2016/06/30(木) 14:32:43.41 :WQ4EC21M 上級市民オブジェクトにしろ : デフォルトの名無しさん [sage] 2016/06/30(木) 19:06:07.78 :nv8TDX79 > 関数型言語ではオブジェクトは、1級市民オブジェクト(First Class Object)と言って、 この訳がおかしい、といわれてるだけ 一級市民を名乗るなら "citizens" を入れればいい - 一級市民のような関数(functions as first-class citizens) - 第一級オブジェクト(First Class Object) : デフォルトの名無しさん [sage] 2016/06/30(木) 22:26:27.40 :s/7LoWQJ そもそも、「functions as first-class citizens」の訳は「第一級市民関数」ではないよな 「第一級市民関数」と呼ぶなら "functions of first-class citizens" と書いてもらわんと ただし、as から of になると「一級市民に属する関数」の意味になって本質と全く異なる表現になる 何をもって「一級市民」が出てきたのかをよく考えるといい : デフォルトの名無しさん [sage] 2016/07/01(金) 10:57:22.28 :2ngPRN1W ofはないわー : デフォルトの名無しさん [sage] 2016/07/01(金) 13:26:49.33 :swuu46hd どう書くのが正しい? : デフォルトの名無しさん [sage] 2016/07/01(金) 14:26:32.24 :GE+MZRxs 普通に、asは、としての、でしょ。 : デフォルトの名無しさん [sage] 2016/07/02(土) 18:28:16.22 :m2NwGvL3 は?「としての」? 「としての」なんて日常生活で殆ど使わないし 意味もぱっとしないだろ 「としての」「としての」「としての」 用意にゲシュタルト崩壊するだろ? : デフォルトの名無しさん [sage] 2016/07/02(土) 18:47:47.96 :hHp4sSVy 「一級市民としての関数」? : デフォルトの名無しさん [sage] 2016/07/02(土) 20:14:00.55 :AmR+G6iW 普通に使うだろ。 プロジェクトの担当としての回答はこうですが、理想論としては確かに認めます、とか。 低い次元の日常生活してるな。 そもそも、イギリスでのfirst-class citizenとsecond-class citizenの違い知ってりゃ理解出来るだろうけど、そういう教養も無いんだろうし。 言っとくと、British citizen otherwise than by descentと、British citizen by descentだからな。 「誰かから受け継いだものではない『英国市民』」と「誰かから受け継いだ(にすぎない)『英国市民』」の違い。 だから、何かから作られたものではない関数含めるオブジェクトを一級市民になぞらえ、そうではないものを二級市民になぞらえてる。 どっかのスレで論破されて発狂してた奴そっくりだな。 : デフォルトの名無しさん [sage] 2016/07/02(土) 20:18:56.43 :AmR+G6iW あ、これ書いたらわかりやすいかな。 ・イギリスで産まれれば一級市民 ・親がイギリス人(一級市民)でも、イギリス国外で産まれれば二級市民、 ・親がイギリス人でも、二級市民であれば、イギリス国外で産んだ場合国籍を与えることは出来ない : デフォルトの名無しさん [sage] 2016/07/02(土) 20:31:38.20 :/wal4gbU 一級市民とはニートじゃなくて ちゃんと税金を払ってる人のことですよ : デフォルトの名無しさん [sage] 2016/07/03(日) 04:16:19.31 :+KSQOYrq それは普通では無いな。 意地を張らずに自分の非を認めろよ。 低い次元の日常生活してる奴には無理かもな。 : デフォルトの名無しさん [sage] 2016/07/03(日) 10:44:20.95 :xMv6BMC9 マスタースレーブとかひどい言い方だよな。 お前らは所詮使い捨ての奴隷よ。 : デフォルトの名無しさん [sage] 2016/07/03(日) 12:12:49.74 :btJwgGWt 普通でしょw とりあえず言いかえせば良いと思ってるんだろうけど。 : デフォルトの名無しさん [sage] 2016/07/03(日) 13:30:07.63 :oNgHKg4C 今まで、スラッシュ/ってコントロール文字だから、 var moji="\/"; って具合にエスケープするって認識でいたのですが、 good parts P11に 「/とコントロール文字を除くすべてのユニコード文字」 って書いてあるのですが、 スラッシュ/ってコントロール文字ではないのですか? : デフォルトの名無しさん [sage] 2016/07/03(日) 14:14:39.57 :A4NkGxi2 コントロール文字がなんなのかも知らないのかw : デフォルトの名無しさん [sage] 2016/07/03(日) 14:16:55.67 :A4NkGxi2 表示したら音がなる文字があるっていったら へぇーって言うんだろうなw : デフォルトの名無しさん [sage] 2016/07/03(日) 14:43:21.41 :JMRewaFc さすがに若い奴がBEL(0x7) 知らんかったとしても仕方なかろうと思うがなぁ : デフォルトの名無しさん [sage] 2016/07/03(日) 16:11:02.52 :YeoQWaDz ゆとりはどうしてググらないのか : デフォルトの名無しさん [sage] 2016/07/03(日) 16:11:29.21 :qk7lGSjH ジジイの方がググらねーけどな : デフォルトの名無しさん [sage] 2016/07/03(日) 16:18:36.85 :YeoQWaDz はえーよゆとり、びびるわ もしかしてBotでも仕掛けてある? : デフォルトの名無しさん [sage] 2016/07/03(日) 16:41:53.92 :5c1HtZx3 反応が気になって常にリロードしてんのかな SNSのやりすぎ : デフォルトの名無しさん [sage] 2016/07/03(日) 16:53:17.69 :YeoQWaDz しかしググれば分かることを質問されてもな。 もしそれで俺の時まで回答を待っていたのなら、完全に病気だな。 : デフォルトの名無しさん [sage] 2016/07/03(日) 19:28:43.02 :+KSQOYrq 普通じゃないでしょw とりあえず言いはれば良いと思ってるんだろうけど。 : デフォルトの名無しさん [sage] 2016/07/03(日) 21:31:43.21 :EZH9raf4 立場を明示せず発言するのは危険だぞ? : デフォルトの名無しさん [sage] 2016/07/03(日) 21:51:09.80 :A4NkGxi2 じゃあお前から立場を明示してくれ : デフォルトの名無しさん [sage] 2016/07/03(日) 22:03:40.88 :EZH9raf4 俺個人としては痛い子がこれ以上恥を上塗りするのがかわいそうだと思ったから発言した 一人の社会人としては、個人の発言を会社の見解と取られるリスクは避けたいので個人的な発言には必ず私個人としてはと前置きするのが普通だと思う これでいいか? : デフォルトの名無しさん [sage] 2016/07/03(日) 22:10:11.68 :A4NkGxi2 お前なんか可哀想だな。 休日の書き込みなのに、 会社の顔色をうかがってるんだね。 会社第一の人生って感じがするよ。 会社が悪く思われるからこんなことはできん!ってな。 : デフォルトの名無しさん [sage] 2016/07/03(日) 22:21:47.90 :EZH9raf4 そうか、まあどちらが可哀想かは見解の相違だな ところで何故そんなにイラついてるんだ? 腹でも減ってるのか?ちゃんと食わんと体に悪いぞ? : デフォルトの名無しさん [sage] 2016/07/03(日) 22:23:43.44 :A4NkGxi2 いらついてるのお前じゃね?w なんで俺がいらついていることにしたいか知らんけどw : デフォルトの名無しさん [sage] 2016/07/03(日) 22:26:30.67 :EZH9raf4 そうか、まあイラついてないならいいんだ 話題をすり替えてまで攻撃的な言葉を向けて来たから 何かイラついてるのかと思ったんだ、まあ気にするな : デフォルトの名無しさん [sage] 2016/07/03(日) 22:28:43.96 :A4NkGxi2 話題をすり替えてっているなら、お前が話題をすり替えてるじゃんw : デフォルトの名無しさん [sage] 2016/07/03(日) 22:30:05.90 :A4NkGxi2 あと気づいてないようだが、俺は上のだれとも違うよw お前は一体誰と戦ってるんだ?w 俺は遊べそうと思ったから遊んでるだけだw : デフォルトの名無しさん [sage] 2016/07/03(日) 22:37:55.93 :EZH9raf4 コントロール文字知らない子を馬鹿にしてた痛い奴だろ? まあ俺は相手は誰でもいいんよ、反応のいい馬鹿をからかうのが楽しいだけだから では寝る、スレ汚し失礼した : デフォルトの名無しさん [sage] 2016/07/03(日) 22:51:46.92 :YeoQWaDz コントロール文字を知らないゆとりも、ググれないゆとりも、馬鹿にされて然るべき。 おかしな擁護をするからゆとりはゆとりのまま。それはゆとりのためにもよくない。 : デフォルトの名無しさん [sage] 2016/07/04(月) 04:44:18.07 :gPjkHcng コントロール文字を知らない若人は雇うかもしれないが 人を馬鹿にする奴は雇わない : デフォルトの名無しさん [sage] 2016/07/04(月) 07:56:58.66 :Nc/f1szG 確かに! : デフォルトの名無しさん [sage] 2016/07/04(月) 21:07:56.31 :xBEl8jJ1 と思う意識高い系ゆとりであった いよいよここもゆとり汚染が酷いな そうやって自分の周りを自分より馬鹿で固めて安心しているうちはゆとりのままだね じきに会社が潰れるからそれでいいと思うけど 資本主義はゆとりを特別扱いしてはくれない 君らがコントロール文字すら知らない中年になるのは数年後さ 若いという言い訳が通用しなくなった時にどうなるか見物だね : デフォルトの名無しさん [sage] 2016/07/04(月) 22:32:04.97 :vRFMByUM コントロール文字を知らない中年と 他人を馬鹿にする事しかしない中年 確実に後者の方が害悪だな : デフォルトの名無しさん [sage] 2016/07/04(月) 22:52:08.82 :xBEl8jJ1 それが正しいかどうかは社会が決めてくれる。 君らが正しければ再就職先はあるだろうし、間違っていれば無いだけの話だ。 ここで言い争う意味はない。楽しみに待てばいい。 : デフォルトの名無しさん [sage] 2016/07/04(月) 22:55:17.69 :0oVcG5wM 今まで、スラッシュ/ってコントロール文字だから、 var moji="\/"; って具合にエスケープするって認識でいたのですが? : デフォルトの名無しさん [sage] 2016/07/04(月) 23:07:56.13 :xBEl8jJ1 ID:EZH9raf4 俺らの対応に文句を言っているお前らが答えろよ。 当然知っているからその態度なんだろ? それで放置するのなら俺らに文句を言う筋はないよ。 もっともゆとりにはこの「筋」ってのが通じなくて困るんだが。 : デフォルトの名無しさん [sage] 2016/07/04(月) 23:15:25.46 :2qwL8Tkv コントロール文字がわからなくてぐぐってみたんだが、制御文字(control character)の事か! なぜ、controlだけカタカナにするんだろう? コントロールキャラクタの方がまだ分かる : デフォルトの名無しさん [sage] 2016/07/04(月) 23:27:23.31 :vyHh0WrX ルー大柴に尋ねてくれ : デフォルトの名無しさん [sage] 2016/07/04(月) 23:50:51.04 :SuUmocnF ttp://www.kogures.com/hitoshi/javascript/file-api/directory.html これ使ってフォルダ読み込んでいるんだけど 指定する場所が毎回同じだから最初からそこを指定するにはどうすればいいんだろう? わかる人いたら教えて下さい。 : デフォルトの名無しさん [] 2016/07/05(火) 00:16:53.06 :50xvo8fd 元々ハードを制御する為に使われていたASCIIコードの先頭32文字を指していた言葉、改行や前述されたBELなど通常の文字として画面表示されないもの Unicodeではこの32文字に加えて第14面の追加特殊用途面などに更に多くの制御文字がマッピングされている なおスラッシュは/という文字なのでコントロール文字ではないし、エスケープが必要かと制御文字どうかには直接的な関連性はない 本当はコントロールキャラクターと表記したいが多くの日本人はキャラクターという言葉から文字を連想しないから文字と置き換えたのではないかね? : デフォルトの名無しさん [sage] 2016/07/05(火) 00:24:24.40 :aq1IVl4D まあ確かに、コントがロール(役割)なキャラクターって思っちゃうわな。 : デフォルトの名無しさん [sage] 2016/07/05(火) 01:58:08.99 :94G9IfNv <p>〜</p> はいらないので、コメントにするか、削除する コメントにする場合、<!-- と --> で囲む。 ただし、コメントの中に、コメントは含められないため、<!-- 行C --> を削除する <!-- <p> 〜 </p> --> <script> fileListDilectory("フォルダ名") function fileListDilectory(files) { <script>タグと、function〜の間に、fileListDilectory("フォルダ名")を追加する。 フォルダ名は、半角ダブルクォーテーションで囲む : デフォルトの名無しさん [sage] 2016/07/05(火) 02:14:24.57 :iQZ7PuWs どちらかといえば、「制御文字」が広く知られていると思うのだが : デフォルトの名無しさん [sage] 2016/07/05(火) 03:12:34.89 :gnmCE5Y/ 結構勘違いされてるけどHTMLのコメントアウトって<!--で開始で-->で終了じゃなくて <!と>の中にある--で開始で--で終了だから <!ここはコメントじゃない--ここはコメント--ここはコメントじゃない> : デフォルトの名無しさん [sage] 2016/07/05(火) 03:15:48.89 :gnmCE5Y/ <!------> ↑これコメント閉じてない : デフォルトの名無しさん [sage] 2016/07/05(火) 03:31:12.38 :94G9IfNv Effective JavaScript という本の項目45で、 オブジェクトを辞書として使う際、キーに、hasOwnProperty, __proto__ などを使うと、 既存のプロパティが上書きされて、バグるというのは本当なの? var dict = { hasOwnProperty : null, __proto__ : null } <!-- と --> の間では、-- は使えない : デフォルトの名無しさん [sage] 2016/07/05(火) 04:05:49.05 :gnmCE5Y/ だからなんだってば : デフォルトの名無しさん [sage] 2016/07/05(火) 04:07:46.52 :Dhx8/uPE 最近仕様が変更されてコメント内の二重ハイフンも OK になった ttps://github.com/whatwg/html/commit/518d16fdc672d1023dcfd2847d86f559d13a842f : デフォルトの名無しさん [sage] 2016/07/05(火) 14:28:39.06 :eormrIAE そんなことはない ttps://html.spec.whatwg.org/multipage/syntax.html#comments その理屈が認められるならDOCTYPE宣言にもコメントを埋め込み可能になる <!DOCTYPE html--コメント--> : デフォルトの名無しさん [sage] 2016/07/05(火) 14:49:36.44 :eormrIAE あなたが Object.prototype 上のプロパティを使いたいなら(自分自身で生み出した)バグといえるし、そうでなければバグではない そもそも、__proto__ に null を代入しているのだからプロトタイプチェーンを辿れないのは当然の事だ 自分が何をしているのかを理解していればそれがバグとなる由もない var dict = { hasOwnProperty : null, __proto__ : null }; Object.prototype.hasOwnProperty.call(dict, 'hasOwnProperty'); // true dict.hasOwnProperty('hasOwnProperty'); // TypeError: dict.hasOwnProperty is not a function dict.valueOf(); // TypeError: dict.valueOf is not a function : デフォルトの名無しさん [sage] 2016/07/05(火) 16:01:54.40 :50xvo8fd w3cのhtml5勧告によると、<!--の4文字シーケンスで始まり-->の3文字シーケンスで終わるときっぱり書いてある 以下出典と該当する部分の引用 ttp://www.w3.org/TR/2014/REC-html5-20141028/syntax.html#comments 8.1.6 Comments Comments must start with the four character sequence U+003C LESS-THAN SIGN, U+0021 EXCLAMATION MARK, U+002D HYPHEN-MINUS, U+002D HYPHEN-MINUS (<!--). (ここに中身について云々あるが中略) Finally, the comment must be ended by the three character sequence U+002D HYPHEN-MINUS, U+002D HYPHEN-MINUS, U+003E GREATER-THAN SIGN (-->). : 890 [] 2016/07/05(火) 23:08:07.75 :94G9IfNv 入力されたデータを、オブジェクトのハッシュとして扱った際、バグらないのかな? または、これを利用して、システムを壊したりするとか : デフォルトの名無しさん [sage] 2016/07/05(火) 23:17:50.58 :eormrIAE それはそういう設計にしているプログラマが悪い プロパティに何でも代入可能なハッシュ値ならプロトタイプ上のプロパティが上書きされる事も考慮すべきだ Object.keys, Object.prototype.hasOwnProperty.call で回避できるからな あるいは new Map でも使えばいい : 853 [sage] 2016/07/05(火) 23:21:29.77 :fKNXFIY8 オレ、27歳だけど、コントロール文字にスラッシュ入るって 言ってたら、まずいですか? : デフォルトの名無しさん [sage] 2016/07/05(火) 23:49:25.07 :Coapt2bz 『JavaScript: The Good Parts』(P11)の文字列リテラルの説明は意味が分からん " (</ とコントロール文字を除くすべてのユニコード文字> | <エスケープ文字>)* " なぜ "/" (スラッシュ) を除く? ES6 を読んだが、"/" が許可されないようには読めん ttp://www.ecma-international.org/ecma-262/6.0/#sec-literals-string-literals 『JavaScript: The Good Parts』の説明では """ が許可されるように読めるが、実際そんなことはなく、SyntaxError になる <" とコントロール文字を除くすべてのユニコード文字> であるべきだと思うのだが : 853 [] 2016/07/06(水) 00:00:08.69 :zGLlF+Oq 実は、アマゾンで売ってるkindleの電子版のgood partsでは String ""で囲まれた文字列は、 any unicode character except " and \ and control character ''で囲まれた文字列は、 any unicode character except " and \ and control character となっており、日本語版のgood partsとは書いてあることが違う 英語版にはexcept / とは書いてない。 オライリーの公式には、ここの訂正がない。 ってなってるんだけど、もちろん、このスレの住民は 英語版のgood partsくらい普通に読んでるんで、 気づいているはず : デフォルトの名無しさん [sage] 2016/07/06(水) 00:02:33.66 :Np1SAbRe 運が良かったな。誤字って予想ぐらいすぐにおもいつけよ ttp://bdcampbell.net/javascript/book/javascript_the_good_parts.pdf : デフォルトの名無しさん [sage] 2016/07/06(水) 00:14:41.00 :1PwyVn8f 正規表現の文字列表記から見ると、”/”は制御文字扱いになるのかな? : 899 [sage] 2016/07/06(水) 00:14:59.53 :YMmDVDK6 気が付いていたなら初めからで正しい情報を書け、といいたい 間違いと分かっている和訳版の情報を寄せるのはミスリードを誘っているようにしか見えん 公式サイトに添削がないからおかしいとは思った 仕様書にない時点で間違いだと99%確信はしてたが、誰も指摘しなかったんだな ただ、はっきりいって誤字のレベルを超えていると思う "'と/ではキーの位置が大きく違うが、どうやったら誤字になるんだ? : デフォルトの名無しさん [sage] 2016/07/06(水) 00:18:21.76 :Np1SAbRe マヌケかw /と\ の間違いだろw : デフォルトの名無しさん [sage] 2016/07/06(水) 00:18:26.98 :YMmDVDK6 /が制御文字と主張するなら「何を制御しているのか」をよく考えろ 通常、制御文字とは NUL, BS, LF, CR のように入力された機器に特別な制御命令を与える文字を指す /は入力された機器に何も制御命令を出さないので普通は制御文字とは呼ばない プログラミング言語や正規表現で現れる特殊文字は「メタキャラクタ(meta character)」と呼ぶ 扱う言語によってメタキャラクタは変化するので「JavaScriptの正規表現では/はメタキャラクタ」というように言語指定してやれば正しく伝わるだろう : 853 [sage] 2016/07/06(水) 01:02:18.07 :zGLlF+Oq ""と''の中の文字列はany Unicode character になっており /を除くと書いてない。 (コントロール文字に/を含めにないとき) The escape sequencesに\/があるってことは /がコントロール文字でないと辻褄が合わないではないか!? っと考えました。 /はコントロール文字ではないが、正規表現で使う特殊文字だから、 コントロール文字の中に含めているって解釈でいい(?) メタキャラって/もですが、+ / *とかもメタキャラですよね しかし+ / *はThe escape sequencesでない。 : デフォルトの名無しさん [sage] 2016/07/06(水) 01:11:51.83 :Np1SAbRe まだやってんのか? コントロール文字って定義があるんだから それ以外はコントロール文字じゃねーだろ。 それだけの話んだが。 : デフォルトの名無しさん [sage] 2016/07/06(水) 01:31:13.03 :YMmDVDK6 escape sequencesは制御文字の反意語ではない そもそも、文字列リテラル上で制御文字は特別な文字ではなく、エスケープを必要としない 文字列リテラルでエスケープが必要なのは "'\ と LineTerminator だけだ ttp://www.ecma-international.org/ecma-262/6.0/#sec-literals-string-literals : デフォルトの名無しさん [sage] 2016/07/06(水) 01:35:42.48 :YMmDVDK6 ああ、あと英語が読めるなら『ECMAScript 2015』を読んでおくといい 『JavaScript: The Good Parts』よりも参考になる : デフォルトの名無しさん [sage] 2016/07/06(水) 01:51:00.52 :YMmDVDK6 改めて読み直したが、 > /はコントロール文字ではないが、正規表現で使う特殊文字だから、 > コントロール文字の中に含めているって解釈でいい(?) 1行目と2行目の「コントロール文字」の定義が違うのはなぜだ? 「文字列リテラルのメタキャラクタ」と「正規表現のメタキャラクタ」は区別しろ 制御文字とメタキャラクタは別個の定義だ よくわからんなら制御文字は気にしなくていいが、/や\はメタキャラクタであっても制御文字ではない(文字列リテラルでは/はメタキャラクタではない) しっかりと理解してないなら全て「特殊文字」に統一しておいた方がマシ ttp://www.ecma-international.org/ecma-262/6.0/#sec-unicode-format-control-characters : デフォルトの名無しさん [sage] 2016/07/06(水) 02:04:58.41 :3UYEMUlZ 何でこのゆとりはこんなに必死なの? 間違いを認めればいいだけだろ。 もしそれをこれまで吹聴していたのなら、お前は既に馬鹿老害扱いされている。 それでも今後とも間違いを吹聴し続けるよりはマシ。 : デフォルトの名無しさん [sage] 2016/07/06(水) 07:18:52.57 :sTXK0Kzp 別に間違いを認めさせる必要もない。 それは優しすぎる傲慢。 その権利は俺達にないし、彼の問題に一々付き合ってやる義理もない。 : デフォルトの名無しさん [sage] 2016/07/06(水) 07:43:14.67 :zGLlF+Oq はい。 /はコントロール文字でない。 「文字列リテラルのメタキャラクタ」と「正規表現のメタキャラクタ」が分からないので /と\はコントロール文字でないが、escape sequencesに/と\があるのは 特殊文字だからって覚えておきます。 : デフォルトの名無しさん [sage] 2016/07/06(水) 08:07:50.32 :Uvvu3JgG / って正規表現で使うっけ? : デフォルトの名無しさん [sage] 2016/07/06(水) 08:27:04.26 :sTXK0Kzp 言葉の定義なんて前提と捉え方で用意に変わり得る。 例えば制御文字を表すためのエスケープ表現を『制御文字』と慣用的に読んだって間違いじゃないし、 『\』をそのエスケープ表現の開始記号として『制御文字』と言ったって必ずしも伝わらなかったり悪いわけじゃない。 慣用的に使われる言葉と、仕様のキーワードは別。 : デフォルトの名無しさん [sage] 2016/07/06(水) 09:51:11.02 :aYInvTWe /もちろん/ : デフォルトの名無しさん [sage] 2016/07/06(水) 10:42:32.00 :cNn6jv5y それリテラルのデリミタ。正規表現の一部じゃ無い : デフォルトの名無しさん [] 2016/07/06(水) 11:35:43.96 :YMmDVDK6 補足感謝 「/がメタキャラクタ」は適切な表現ではなかったな : デフォルトの名無しさん [sage] 2016/07/06(水) 11:48:57.84 :sTXK0Kzp 仕様上の正規表現内のメタキャラクタではないね。 実際書く上では実質「正規表現」の「メタ」なキャラクタと考えられなくはないけど。 : デフォルトの名無しさん [sage] 2016/07/06(水) 21:22:48.04 :3UYEMUlZ ゆとり「通じればいいんだ。間違いではない」 他人(なんだこのゆとり…間違いは間違いだろ) 間違いだし、伝わりにくいし、悪いよ。いちいち言わないだけで。 : デフォルトの名無しさん [sage] 2016/07/06(水) 21:26:31.47 :zGLlF+Oq オレ、仕事は製造業で電子部品作ってる工場で働いているからさ 趣味でJavascriptの勉強してるだけだし別にいいだろ って開き直ってやる : デフォルトの名無しさん [sage] 2016/07/06(水) 21:32:48.07 :3UYEMUlZ だとすれば話は簡単で、明日から正しい言葉を使うことを心がければいいだけ 過ちては改むるに憚ることなかれ リアルで誤用しまくりなら信用の回復は無理ぽだけど、そういうことではなさそうだし : デフォルトの名無しさん [sage] 2016/07/06(水) 22:48:29.74 :Np1SAbRe 本当にゆとりだな。 ASCIIコードを勉強するときに 必ずコントロール文字は出てくるだろ。 JavaScript以前の問題だ。 : デフォルトの名無しさん [sage] 2016/07/06(水) 23:09:55.62 :3UYEMUlZ ユニコードしか知らないんだろ 10代ならあり得るが、20代しかも後半なのはちょっと不自然だけど 逆に俺はJavaScriptのソースコードがユニコードなのが衝撃的だったが : デフォルトの名無しさん [sage] 2016/07/07(木) 07:09:03.14 :kX0s01tc 何が衝撃的だったの? : デフォルトの名無しさん [sage] 2016/07/07(木) 19:41:06.60 :xu7eLIup javascriptスレだったと思うんだけど 変数名をhanteiにしたら、クレームが来て、 取引先の会社「変数名hentai(ヘンタイ)ってどいうことですか?」 当社「違いますhanteiの間違えです。」 って事件があったとさ これってなんかのコピペなんですか? 実際に、仕事でhanteiなんて変数名に使うものなのでしょうか? : デフォルトの名無しさん [sage] 2016/07/07(木) 21:22:02.81 :emRikmn6 コピペかコピペじゃないかを気にするより他の事に時間を割いた方が有意義だよ : デフォルトの名無しさん [sage] 2016/07/07(木) 21:34:20.25 :+CDrHRBK コピペかどうかはさておき、hanteiは使っててもおかしくないと思う 良いか悪いかは別の話ね : デフォルトの名無しさん [sage] 2016/07/07(木) 22:43:23.54 :iLaVioOv const {app} = hoge; const app = hoge; ES6の定数宣言で、この二つの書き方は何が違うんでしょうか? どちらを使うべきか指針とかあったりしますか? : デフォルトの名無しさん [sage] 2016/07/07(木) 23:01:35.80 :H48+30O4 > どちらを使うべきか指針とかあったりしますか? 普遍的なルールとして、短い方を選ぶ方が良い。 : デフォルトの名無しさん [sage] 2016/07/07(木) 23:39:05.17 :emRikmn6 明らかに挙動の違うものを「どちらを使うべきか指針」といわれても… ttp://http://js-next.hatenablog.com/entry/2015/05/18/181956 "> ttp://js-next.hatenablog.com/entry/2015/05/18/181956 : デフォルトの名無しさん [sage] 2016/07/07(木) 23:40:07.51 :j5TOflcB 動作が違うでしょ。 const {app} = hoge; は const app = hoge.app; と等価 : デフォルトの名無しさん [sage] 2016/07/07(木) 23:44:51.74 :iLaVioOv 右辺のプロパティ名と同じ変数が作れるんですね 理解しました、ありがとうございました : デフォルトの名無しさん [sage] 2016/07/08(金) 00:17:25.93 :gFg8sSWK ライブラリ板の荒れ具合が酷いのでやはり、プログラム板に統合した方がいいと思う あと、テンプレも復活させる必要がある : デフォルトの名無しさん [sage] 2016/07/08(金) 00:27:47.76 :+TjkY6Hg Web板のHTML、CSS、ライブラリ含むWeb総合質問スレと、 プログラム板のJS総合スレの2つに分けるのがいい。 : デフォルトの名無しさん [sage] 2016/07/08(金) 00:54:45.54 :yD4trqxh 次スレでーす + JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net ttp://echo.2ch.net/test/read.cgi/tech/1467906869/ : デフォルトの名無しさん [sage] 2016/07/08(金) 07:41:13.87 :lv/3l3yT テンプレは ttp://fiddle.jshell.net/fH4cC/174/show/ を元にライブラリ許容型に変更すればいいね : デフォルトの名無しさん [sage] 2016/07/08(金) 07:46:45.99 :lv/3l3yT 以下、ライブラリスレより。 これを組み合わせればいいと思う。 ■関連スレ JavaScript ライブラリ総合質問所 vol.5 [無断転載禁止]©2ch.net ttp://echo.2ch.net/test/read.cgi/hp/1465399470/ ■各種ライブラリ jQuery API Documentation ttp://api.jquery.com/ jQuery Mobile API Documentation ttp://api.jquerymobile.com/ API Docs - YUI Library ttp://yuilibrary.com/yui/docs/api/ Underscore.js ttp://underscorejs.org/ lodash documentation ttps://lodash.com/docs : デフォルトの名無しさん [sage] 2016/07/08(金) 08:49:21.45 :+TjkY6Hg DOM系のライブラリはどうしてもHTMLやらCSSやらの話にも成りがちだから、 Web板の方で統合した方がいいと思う。 : デフォルトの名無しさん [sage] 2016/07/08(金) 08:50:41.84 :vGS1irmk (9)を削除して「諸注意」を書き変えればいいかね 完全に消すと初見さんが荒らしへの対処に困りそうだし : デフォルトの名無しさん [sage] 2016/07/08(金) 11:24:47.84 :KhEBU29m 俺はに一票 Web板は既にそれぞれの質問スレがあるから上から統合立てるのはどうかと 統合するならどれか立たなくなってから徐々にまとめていく形がいいと思う その場合ここのテンプレは前スレのリンク切れ直すくらい いずれにせよ荒らしの立てたスレ使うのは本当によくないからはスルーで : デフォルトの名無しさん [sage] 2016/07/08(金) 13:47:44.11 :U0/kuRoy この状況でWeb制作板に統合するのは荒らしを助長させるだけでデメリットしかないと思う プログラム板に統合する案に賛成 : デフォルトの名無しさん [sage] 2016/07/08(金) 18:33:42.72 :+TjkY6Hg プログラム板に統合するのなら、HTMLやCSS中心の話題も許容するくらいじゃなきゃまた大揉めすると思うぞ。 俺はそれならそれでいいが、多くの人が納得するかは知らない。 いずれにしろ統合するならそういう文言を必ずテンプレに入れてくれ。 : デフォルトの名無しさん [sage] 2016/07/08(金) 21:17:40.39 :GrB7vStf > プログラム板に統合するのなら、HTMLやCSS中心の話題も許容するくらいじゃなきゃまた大揉めすると思うぞ。 俺もその意見に賛成。も言ってるけどDOMの話をするのなら HTMLとCSSは必ず出てくる。UIを作るときにはかならず使うものだからね。 時々JavaScriptだけで見た目を制御しようとして ごちゃごちゃしたコードを書く人がいるけど HTMLとCSSを正しく使えばJavaScriptコードは減る。 「CSSだけで作る」で検索すればいろいろと動きのある メニューとかが出てくるはず。 : デフォルトの名無しさん [sage] 2016/07/08(金) 22:04:36.09 :+TjkY6Hg こういうのですね。わかります。 ttp://design.kayac.com/topics/2011/06/css-programing.php : デフォルトの名無しさん [sage] 2016/07/08(金) 23:30:39.02 :CZkAeEnB HTML/CSSのスレってこれ? ttp://echo.2ch.net/test/read.cgi/hp/1467511443/ 本来はあっちでDOM操作関連のチョロJavaScript(〜30行程度)までは取り扱うべきなんだよ。 それを越えてきたらこちらということで。 あいつらは今後ともstaticなHTML/CSSだけのつもりなのか? : デフォルトの名無しさん [] 2016/07/08(金) 23:36:09.26 :/soOgtk1 WEB製作とWEBプログラミング板をID表示に出来ない? : デフォルトの名無しさん [sage] 2016/07/08(金) 23:45:11.18 :BGnGAFet それなら同じ理屈で、こっちでも30行程度の HTMLやCSSを扱うべきじゃね? : デフォルトの名無しさん [sage] 2016/07/08(金) 23:48:54.41 :3Ch7jsxi スレ違いの質問は該当スレに誘導すればいいだけ そういう輩は「技術的に詳しそうなのでスレ違いを承知で質問します」という体だから裾野だけ増やしても仕方ない 一つ例外を認めればあれもこれも認めろという声が上がるのは明白 : デフォルトの名無しさん [sage] 2016/07/08(金) 23:50:58.91 :BGnGAFet そもそもHTMLやCSSはスレ違いではないという話だよ。 : デフォルトの名無しさん [] 2016/07/08(金) 23:53:38.62 :/soOgtk1 HTML/CSS/JSを全て扱う「クライアントサイドWEB製作総合スレ」建てれば? : デフォルトの名無しさん [sage] 2016/07/08(金) 23:56:27.86 :3Ch7jsxi JavaScriptスレならHTML/CSSはスレ違い Web制作初心者スレならHTML/CSSはスレ違いではない HTML/CSSにも関わりのあるJavaScriptの質問をするなら許されることもあろうが、JavaScriptと関係しないHTML/CSSの質問は完全にスレ違い ex: article要素とsection要素の違いは何ですか? : デフォルトの名無しさん [sage] 2016/07/09(土) 00:00:07.52 :My2a4Ewi だからそういう無関係質問用に専門スレは残しておくとしても、HTML/CSS/JSが全て関わっているとどこで聞くか迷わない? : デフォルトの名無しさん [sage] 2016/07/09(土) 00:03:20.01 :ej5NI84G 主従関係を考えればいいだけ JavaScriptが主、HTML/CSSが従の質問をすればいい ECMAScriptの範疇でしか質問を受け入れないわけではない : 946 [sage] 2016/07/09(土) 00:11:15.70 :iLP51t8A いやそれはない。俺はあのスレの内容には全く興味がない。 DOMはJSにとっては入出力だから外すことは出来ないが、 本格的にプログラミングすると当然DOM以外の部分が大半になる。 むしろ、DOM関連のJavaScriptだけ分離するべきか? まあそれが元々はjQueryスレだったんだろうけど。 とはいえ,954は妥当だな。とりあえず現状維持でいいよ。 迷ったら一番妥当だと思うところで聞けばいいだけ。 その判断が間違いならスレチ誘導すればいいだけ。 維持出来ないほど過疎れば自然と統合されるだけ。 : デフォルトの名無しさん [sage] 2016/07/09(土) 00:14:45.57 :3ye6tHD5 じゃあ現状維持で + JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net ttp://echo.2ch.net/test/read.cgi/tech/1467906869/ : デフォルトの名無しさん [sage] 2016/07/09(土) 00:16:51.15 :3DBY5ZwO > DOMはJSにとっては入出力だから外すことは出来ないが nodejsを見ればわかるようにDOMは必須じゃない : デフォルトの名無しさん [sage] 2016/07/09(土) 00:52:31.22 :US7tnKBO のテンプレを更新した。 ttp://https://fiddle.jshell.net/6018r9tu/1/show/light/ "> ttps://fiddle.jshell.net/6018r9tu/1/show/light/ : デフォルトの名無しさん [sage] 2016/07/09(土) 00:57:59.04 :jK+6h30t テンプレの中の人生きてたのか… 住み分けはの考え方が俺も適切だと思う そもそもの板ルールだってケースバイケースでやれとのお達しが出ているし とりあえずライブラリスレはまだ埋まるまで時間があるから議論は持ち越しとして このスレの現状維持には賛成だが,を使うのには重ねて反対だ : デフォルトの名無しさん [sage] 2016/07/09(土) 05:01:09.70 :u3A/GFo2 統合しようとしてる今の全体状況を考えても、それは難しい。 統合するならWeb全般と、JS全般の2つにするか、 HTMLの質問くらいなら許容してあげるくらいのJS全般1つにすべき。 : デフォルトの名無しさん [sage] 2016/07/09(土) 07:11:01.87 :ej5NI84G HTML/CSSは統合しなくていいし、メリットがないと思う 統合するならHTML/CSS/JavaScriptだけに特化して統合する必要はない SEO対策、ブラウザ、サーバサイドスクリプト...etc 境界線が分からない質問者が質問しそうな話題は無数にある Web制作板で「Webサイト制作初心者用質問スレ」を復活させるのが妥当だが、JavaScriptスレとは無関係に進めるべき あと、統合するなら周辺スレの住人の合意を得る必要があるから : デフォルトの名無しさん [sage] 2016/07/09(土) 08:39:06.50 :Bk+A+H3d 許容範囲でいえば、こんな感じかな ○ アコーディオンメニューの作り方(JavaScriptメイン、HTML/CSSサブ) × section要素の使い方(HTML 100%、CSS 0%、JavaScript 0%) × display: flex の使い方(CSS 100%、HTML 0%、JavaScript 0%) × Web検索結果の順位を上げたい (SEO対策 100%、JavaScript 0%、HTML 0%、CSS 0%) : デフォルトの名無しさん [sage] 2016/07/09(土) 10:41:56.68 :iLP51t8A お前がそういうことにしたいのは分かったが、ところで統合しようとしている相手はどのスレなのよ? このスレは十分流れているし、機能もしている。 jQueryのスレも同様。どちらもどこかに合流する必要はない。 統合ってのは過疎スレが維持出来ずに落ちて、 そこの住人がどこか近いところに移住することによって行われる。 十分流れているスレで上から「統合」指令出しても効果はない。 落ちそうな過疎スレをそのまま落とせば自然と統合されるし、それ以外の妥当な方法はない。 結果的にスレチ誘導出来ず、その落ちたスレが取り扱っていた内容も自然と取り扱うことになる。 つまり統合に関してはここでの議論は無意味で、統合される側のスレ住民が納得しないと効果も無い。 分化したスレが機能している以上、それは分離すべきだったということだ。 「ぼくのかんがえたさいきょうのとうごうすれ」は存在し得ない。 例えば主にDOM関連に興味があるのなら、そいつはこれまで同様HTML/CSSのスレも見ろってことでしかない。 : デフォルトの名無しさん [sage] 2016/07/09(土) 14:22:57.47 :8raa4CZV 見て思ったのはアコーディオンメニューはCSS100%でも作れるってこと どちらが主になるかなんて実装次第だが、このスレに投下した時点でJavascriptで実装すること前提であってほしい 何で作るのがいいかわかってないような奴をここでいちいち相手にしたくないから総合的スレがこのスレと別に向こうにあったらありがたいとは思うな このスレをどこかと統合する必然性はないと思うが、おかしな奴をまず総合スレで相談して来いって追い出せるのは便利だ : デフォルトの名無しさん [sage] 2016/07/09(土) 15:30:53.75 :iLP51t8A その他 ついでだから追加。 既に述べたように、 機能しているスレで議論できる内容は、「何かを分離するか、現状維持か」 過疎って機能してないスレで議論すべき内容は、「どこかに統合するか、現状維持か」 統合したいのなら、統合される過疎スレ側に連絡し、それを住民が受け入れれば統合されるだけ。 こっちが過疎スレ側にごそっと移動してもスレ乗っ取りにしかならないだろ。 最近は減ったように思うが、テンプレ回答として ・PHPでやれ ・CSSでやれ ってのがあったから、の言う総合案内所は役に立つだろう。 ただそこで複数の実装方法があったとして、どれがいいかを説明するのはかなり難しいとは思うが、 お前らは説明の再生産はしたがっているようだから、それもいいのではないか。理解を深めることにはなる。 上手く行けばそのスレはめちゃめちゃ繁盛するだろう。 多分最初からJS/HTML/CSS/PHPまで入れておいた方がいい。 質問「○○をやりたい」に対し、基本的には「○○スレに行け」という回答で案内に徹せば上手く行く。 : デフォルトの名無しさん [sage] 2016/07/09(土) 18:27:15.89 :/ZL1+tl1 がいうように「Webサイト制作初心者用質問スレ」を復活させれば万事解決する気がする : デフォルトの名無しさん [sage] 2016/07/09(土) 20:10:41.89 :1nvCXdBR アコーディオンメニューをCSS100%で作れるからと言って、 質問する人はそう思ってない。JavaScriptが必要だと思ってる。 だから最初からCSSスレに書き込むのは不可能 JavaScriptスレで質問するのは仕方がないことだが これをCSSスレに移動させるか?といえば、実はそうとは限らない。 CSS100%で作れると言ったが細かい要件によっては CSS100%で作れないかもしれないからだ。 だからCSSで作れるかどうか分からない質問をここでするのは問題ないし JavaScriptで作る回答があるならば、ここで会話を続けていい。 その答えの一つとしてJavaScript使わないでできますって言うのも答えなわけだ。 結論としては 質問者・・・JavaScriptを使うと思っているならば質問していい 回答者・・・JavaScriptでやるのが間違いだと思うならば、他のスレに誘導 手法の一つとしてJavaScriptでやる方法があるのならこのスレでよく、 回答の一つとしてJavaScriptを使わない方法を提示しても良い。 でいいんじゃねーの? : デフォルトの名無しさん [sage] 2016/07/09(土) 20:34:43.05 :iLP51t8A 何でお前は取り扱い範囲を広げたがっているの? それともお前は単発荒らし?なら無視するだけだが。 何で作ればいいか分からない人向けの「Webサイト制作初心者用質問スレ」であって、 ここで聞く限り「JavaScriptで作る気」な場合にしろって事だろ。明確で妥当な基準だ。 既に書いたが、既に機能しているスレでは「範囲を狭めて分化していくか、現状維持か」だよ。 何でも聞けるスレは何も出来ないスレになる。 仮にプログラミング言語一般として、JavaもCもJavaScriptもPHPもありのスレにしても意味無いだろ。 複数の話題に興味があるのなら、お前が複数スレを巡回すればいいだけ。 分化しすぎてて過疎って落ちれば自然と統合されるだけ。そこでバランスが取れるようになっている。 CSSの話題がここで為されるとしたら、CSSスレが落ちて誰も立てなくなった時だよ。 あっちが機能している限り、CSSの話はあちらでやるべきだ。それがお互いの利益になる。 重ねて言うが、お前がCSSに興味があるのなら、お前がCSSスレも見ればいいだけだ。 : デフォルトの名無しさん [sage] 2016/07/09(土) 20:37:57.40 :1nvCXdBR 範囲を狭くしたいっていうのなら 純粋なJavaScript専用にしてもいいけど? つまりNode.jsでも動くものしかだめ。 DOMを扱うコードは禁止。 : デフォルトの名無しさん [sage] 2016/07/09(土) 21:25:56.06 :iLP51t8A 言い返したいだけのクソガキ乙 俺はそれでもいいと言っているだろ。 分離するのならそこだ。 ただしnodeはスレが別にあるので考慮する必要はない。 (nodeガーについては全部nodeスレに誘導すればいいだけ) 分離する理由は(nodeは関係なく)DOM部分はHTML/CSSとも絡むため、迷子の原因だからだ。 ただこれについては「Webサイト制作初心者用質問スレ」の方が妥当だという意見だ。 俺もそれでいい。つまり、このスレは現状維持で上記スレを新設でいい。 ただしこの新設スレを機能させるには、少なくともフルスタック()な連中がそこにいないといけない。 お前らだけで対応出来ないのなら、他スレからも応援してもらう必要がある。 とは言っても立てないことには始まらないので、妥当だという意見が多いようなら立てればいいと思うが。 : 941 [sage] 2016/07/09(土) 22:14:27.41 :lCeUP8cE 失礼の統合をこの板へ移行するものだと読み間違えてた このスレとWeb板のライブラリスレを統合するってことなら自分は反対だ 当初向こうで出た話ではIDの出る板への単なる移行だったはず ,の言うように「JSが主になる」質問をそれぞれのスレで扱うことと の言うように初心者スレ復活を別の流れで模索することには賛成 : デフォルトの名無しさん [sage] 2016/07/10(日) 02:54:32.77 :eiCoffPe スクリプトで非同期にファイルダウンロードってどうやるの ajaxでバイト配列を取得するとこまでできたけどファイルを保存する方法がわからねえ : デフォルトの名無しさん [sage] 2016/07/10(日) 05:23:29.64 :bPE6a5y9 その通り。 まず一歩目としてはその結論以外無い。 : 名無しさん@そうだ選挙に行こう! Go to vote! [sage] 2016/07/10(日) 12:28:37.49 :j73ykfM2 ライブラリスレにいる者だが、俺はこのスレに統合する案に賛成だな ライブラリスレがプログラム板に移行するに留まるとほぼ間違いなく、過疎化する 俺の感覚ではライブラリスレで俺以外で回答に参加していたのは信者君+1〜2名というところだが、そもそも質問者の絶対数が少ない JavaScript ライブラリ総合質問所 vol.5 [無断転載禁止]©2ch.net ttp://echo.2ch.net/test/read.cgi/hp/1465399470/ このスレでの質問はほとんどないに等しい これじゃあかんと思ってjQueryの感想を書いてつなぎ止めようとしても釣れるのは信者君とその他大勢の煽りだけ 質問者にとって重要なのは質問に答えてくれることであって質問した結果、荒れようがIDが見えなかろうが関係ないからな 信者君は質問には高確率で回答していて、質問者にとっては都合がいよいからjQueryスレの質問がそれなりに多いのだろう 「プログラム板に移行したら今まで黙っていた俺だが、質問する予定があるぜ」という人が名乗り出るなら別だが、俺はプログラム板に移行するだけでは質問者にも移行を促すほどの請求力はないと思うぞ : 名無しさん@そうだ選挙に行こう! Go to vote! [sage] 2016/07/10(日) 12:35:33.20 :rTKcHDH+ 俺としては別にライブラリスレでもjQueryスレでも ここでもjQueryの話題があればレスしてるので どこでもかまわないかな : 名無しさん@そうだ選挙に行こう! Go to vote! [sage] 2016/07/10(日) 13:53:52.88 :BhOPIXig お前は一体何がやりたいのさ?その件については明らかに信者の方が妥当だぞ。 そのスレってjQueryのスレとスレ立て合戦した奴だろ。頭の方に痕跡も残ってる。 どっちが本家なのかは知らないが、だったらまずそれらと統合すべきだろ。 そしてその話し合いは当該スレでやれ。ここではない。 スレ立て合戦の結果、人が居ないので釣ってみたが無理っぽいから統合したい? 死ね > 質問者にとって重要なのは質問に答えてくれること > 信者君は質問には高確率で回答していて、質問者にとっては都合がいよい 専用スレで信者が積極的に回答するのは全く問題ないし、むしろいいことだ。 それで質問スレとしても完全に機能してるんだろ?何も問題ない。 むしろお前の「ぼくのさいきょうのすれにならなかったから」というのが終わっている。 現実的にはjQuery以外のライブラリは新規に学ぶ価値が無くて、質問もないんだろ。 だったらそれはjQueryスレに飲み込まれるのが正しいあり方だよ。 お前がどれだけjQuery君を嫌ってようが、jQuery以外のライブラリが無用ならそうとしかならない。 : 名無しさん@そうだ選挙に行こう! Go to vote! [sage] 2016/07/10(日) 14:06:47.72 :SLnFWOAS > お前がどれだけjQuery君を嫌ってようが、jQuery以外のライブラリが無用ならそうとしかならない。 jQuery以外のライブラリで有用なものはいくつかある。 無用というならばjQuery以外のDOM操作ライブラリというべきだろうね。 DOM操作に関連しないライブラリで有用なものはいくつかある。 例えばJavaScriptの少ない標準関数を補ってくれるlodash(underscore) (Rubyを知っていればJavaScriptの標準関数は本当に少なく感じる) 日付関連をシンプルに扱えるmoment SVGをjQueryライクに扱えるD3 ここらへんが有用なライブラリだな。 なおフレームワークやPolyfillは除いている。 : 名無しさん@そうだ選挙に行こう! Go to vote! [sage] 2016/07/10(日) 15:35:48.24 :ZmdhimD5 深淵を覗こうとする時はなんとやら 荒らしに餌やってまで伸ばそうとするのは最早呆れて何も言えないわ あの状態じゃ質問なんて出来る雰囲気ではない 行うべきは燃料投下や統合よりも住み分けによる質問レスの誘導なんじゃないの ここやNodeスレでライブラリやモジュールの質問スルーされてる難民とか結構いるぞ : 名無しさん@そうだ選挙に行こう! Go to vote! [sage] 2016/07/10(日) 15:54:54.42 :SLnFWOAS 誘導したらどういう理由で問題が解決すると言うの? : 名無しさん@そうだ選挙に行こう! Go to vote! [sage] 2016/07/10(日) 16:35:09.95 :BhOPIXig 適切な誘導をして流れるようになればそれでよし。 適切な誘導があっても過疎って落ちるようなら、落ちるべくして落ちただけ。 そのスレは独立して存在する価値がないことになる。 つまり、適切な誘導が行われれば、あとは放置すれば判定は出るというだけ。 話は簡単だ。次スレを立てる時にとりあえずこのスレのテンプレに入れておけばいい。 このスレで出来ることはそこまでだよ。 入れるスレは以下の4つで良いのか?追加あれば挙げて。 JavaScript ライブラリ総合質問所 vol.5 [無断転載禁止]©2ch.net ttp://echo.2ch.net/test/read.cgi/hp/1465399470/ ">ttp://echo.2ch.net/test/read.cgi/hp/1465399470/ JavaScript & jQuery 質問用スレッド vol.6 + [無断転載禁止]c2ch.net ttp://echo.2ch.net/test/read.cgi/hp/1465566635/ 【node.js】サーバサイドjavascript 4【io.js】 [無断転載禁止]c2ch.net ttp://echo.2ch.net/test/read.cgi/tech/1460359714/ (X)HTML/CSS の質問に優しく答えるスレ23 [無断転載禁止]c2ch.net ttp://echo.2ch.net/test/read.cgi/hp/1467511443/ ちなみになあ、テンプレの人 : 名無しさん@そうだ選挙に行こう! Go to vote! [sage] 2016/07/10(日) 17:22:43.78 :6EzdDOVN 回答者が流れても質問が来ないのではないかと思ってね 回答者だけいて質問者がいないのでは質問スレとして成り立たないから質問者が名乗り出てくれるのが有り難い 人が少なければ統合するのは自然な流れだと思う 誘導して人が来るならそうだな : 名無しさん@そうだ選挙に行こう! Go to vote! [sage] 2016/07/10(日) 17:48:41.01 :tgTIUHUH ライブラリスレの問題は気に入らない回答にいちいち噛みつく奴の存在だと思うな 彼一人のせいでまともな回答者が大分減ったし 誰だって自分の回答が馬鹿にされたらいい気持ちはしない プログラム板への移行が望まれるのは当然だね : 名無しさん@そうだ選挙に行こう! Go to vote! [sage] 2016/07/10(日) 18:04:56.98 :bPE6a5y9 俺は個人的にはライブラリ大嫌いだし、今のライブラリスレの元を何年も前に作ったのも俺だが、 統合は反対はしないよ。 だって、向こうのスレ(JSとライブラリ)全く機能してないもん。 逆に、向こうの質問スレに行った方が良いよと言えるまでは少々Web感が強くてもこっちで扱うべきと思う。 もしも、無効にWEB総合スレを作る試みが上手く行った暁には改めて振り分ければいい。 : 名無しさん@そうだ選挙に行こう! Go to vote! [sage] 2016/07/10(日) 18:58:46.48 :BhOPIXig 何度も言っているが、統合するかどうかは当該スレの住民が判断する話で、 こちらで決めることではない。 住民が納得して移住し、スレが落ちれば統合は完了する。 分化して専門性を高めたスレが存在して流れているのであれば、 それは存在価値があるからであって、統合する意味はない。 お前らみたいな「おれのさいきょうのすれっど」の馬鹿ばかりだからどうにもならないんだよ。 Web板に一生引きこもってろよ。 IDが出ないのをいいことにWeb板の質問スレでやりたい放題やっていたのはお前らだろ。 そういう馬鹿を見切った奴らがこっちに集まったからここは多少まともなんだよ。 統合して欲しいのなら、当該スレでそういう話し合いをすればいいだけだろ。 お前らは根本的に間違っているよ。 : デフォルトの名無しさん [sage] 2016/07/10(日) 21:10:07.28 :ZmdhimD5 ここのプログラム板移行に賛同して極力回答していた身からすれば 延々と荒らしに構って荒れた挙句の過疎なのだから正直ざまあみろと思う所もある でもその認識はちょっと偏見が過ぎるんじゃないの 向こうの両スレでID出ないのをいいことにやりたい放題やっていた輩っていうのは 件の信者でありの噛みつく奴でありテンプレで注意されていた同一人物だ ここだって結局vol120にしてWeb板同様に乗っ取られているわけだ 向こうの住民だって数年間やれることはやった上での現在なんだろうよ : デフォルトの名無しさん [sage] 2016/07/10(日) 21:25:02.79 :bPE6a5y9 荒らしはあまり関係ないかと。 昔っから色んな意味で言いたい放題やりたい放題や奴は大勢いたし、 仕切り厨もスレチ厨も大活躍してた。 別に過疎の原因はスレ住民が悪いせいでは無いと思う。 むしろ過疎になったからそういう奴が目立ってきただけ。 : デフォルトの名無しさん [sage] 2016/07/10(日) 21:28:08.59 :ZmdhimD5 ああそうなのか ちょうどlodash啓蒙で大荒れ乱立してた頃からしか知らないんだわ : デフォルトの名無しさん [sage] 2016/07/10(日) 21:47:15.37 :BhOPIXig そうでもないだろ。 そもそもIDあり板に移動したければさっさとやればよかっただけ。 今までへばりついていたのはID無しの方が都合がよかったからだろ。 こっちに来てからも何度も誘導も見た。どうしてもIDがない方が都合がいい奴がいるのは確かだ。 俺はざまあみろとは思わないが、そういう奴がここに来ると迷惑だと思っている。 ちなみに俺はその「信者」や「噛みつき君」は大して問題視していない。技術的である限り、やればいいのさ。 ゴミコードはゴミコードだと言うべきだし、その指摘が間違っているのなら逆に叩かれればいい。 「ぼくのかいたさいきょうのこーど」が礼賛される方が問題だ。 彼はIDがあったとしてもスタンスは変わらないだろうし、その点でも問題ない。 ちなみに彼の問題は、他スレでも「布教活動」をしていたことだよ。それは本当に邪魔だから止めてもらいたい。 ただ、今のところjQueryスレにこもって布教することにしたようだから、それは問題ないし、 こちらからもjQueryの専門的な話題は積極的に向こうに誘導すべきだろう。それがお互いの利益になる。 最悪に問題なのは、ID無し板で自演したり釣りをしたり横槍だと明確に分からない形で横槍を入れてくる奴らだ。 それは話の邪魔なんだよ。だからどうにもやりにくかった。それが今文句言っている奴らだろ。 その「信者」「噛みつき君」「注意されていた人」は彼等「自演君」「釣り君」「会話乗っ取り君」とは別の人だよ。 要するに、IDありとID無しで振る舞いを変えるような卑怯なゴミこそが問題なんだよ。 その点、「信者」君は卑怯ではない。繰り返すが、俺は彼には布教活動以外の問題は感じない。 だから彼がjQueryスレにこもってひたすら回答者に徹するのであれば、関連質問者は積極的に誘導でいい。 それの方がこっちのスレとしても楽だろ。 とはいえ、いい加減結論を出さないといけない。 荒らしのスレ,956はセオリーどおりスルーとして、俺はテンプレがあった方がいいと思うから、 ベースで関連スレだけに差し替えが俺の意見になる。 「Webサイト制作初心者用質問スレ」は次スレで引き続き検討として、 とりあえずこのスレの次スレをどうするかを決めよう。 : デフォルトの名無しさん [sage] 2016/07/10(日) 22:27:02.42 :ZmdhimD5 布教活動に限らずスレ乱立に横やりや煽りだらけだったろうに もっとも彼以外にもそういうのが居たってのは同意見だ じゃあここの次スレに争点を絞ろう ・荒らしの立てたスレは使わずに新スレを立てる ・このスレは現状維持 ・状況により初心者スレを検討 まずの改訂版は統合スレ用のものだから現状維持の場合は適さない 今回は以前のテンプレにの関連スレを加えたものを使うべきだと思う 肯定的なレスが付いたら建ててくる : デフォルトの名無しさん [sage] 2016/07/10(日) 22:31:41.73 :J3sPgwrM > ベースで関連スレだけに差し替え 概ね賛成だけど、canvasスレの削除はどうなんだろうね 俺は落ちてない以上は入れてもいいと思う : デフォルトの名無しさん [sage] 2016/07/10(日) 22:38:00.44 :BhOPIXig > 統合スレ用のものだから現状維持の場合は適さない 俺は子細はよく分かっていないのでこの辺はID:ZmdhimD5に任せる。 落とさないといけないって事はない。 ただ、あのスレ入れててもなぁ、とは思うが、 火種になるという意味では、今回は無難に入れておいていいとも思う。 まあいずれにしてもID:ZmdhimD5に任せる。 スレが埋まったらまずいので俺は今後は様子見する。 とにかくID:ZmdhimD5に任せる。よろしく。 : デフォルトの名無しさん [sage] 2016/07/10(日) 22:39:44.89 :tx16mOUk 175 自分:Name_Not_Found[sage] 投稿日:2016/07/10(日) 22:19:22.40 ID:??? どこでもいいよw 俺は人がいるところに行くだけだから。 : デフォルトの名無しさん [sage] 2016/07/10(日) 22:47:57.91 :KHJNSY1I おまえらってさ、javascriptでどんなwebアプリ作ってんだ? : デフォルトの名無しさん [sage] 2016/07/10(日) 22:55:57.73 :ZmdhimD5 + JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net ttp://echo.2ch.net/test/read.cgi/tech/1468158373/ ">ttp://echo.2ch.net/test/read.cgi/tech/1468158373/ >>958 をベースにして そぐわない部分をカットしてからを追加することにした あといつの間にか諸注意の内容がほぼ倍になってたから以前のものを使った Web板のかな、少なくともこのスレで同意を得て追加されたものではないし : デフォルトの名無しさん [sage] 2016/07/10(日) 22:58:59.73 :Hr2GHwDG のテンプレを更新した。 ttp://https://fiddle.jshell.net/6018r9tu/2/show/light/ "> ttps://fiddle.jshell.net/6018r9tu/2/show/light/ : デフォルトの名無しさん [sage] 2016/07/10(日) 23:03:27.28 :XBuYUIhG がID:ZmdhimD5に一任した途端、独断専行っぷりが酷い どうみてもライブラリスレを統合する流れだっただろうに : デフォルトの名無しさん [sage] 2016/07/10(日) 23:08:39.77 :tx16mOUk お前ら喧嘩するなよw スレタイがどうなろうが、俺はあちこちのスレに行って jQueryとlodashの話題をするだけなんだからw : デフォルトの名無しさん [sage] 2016/07/10(日) 23:12:17.55 :ZmdhimD5 そりゃ流れであって統合派も移行派も現状維持派もいたんだから 残りレス数が一桁切ってる状況ならひとまず現状維持で持ち越すしかないでしょ 勢いが冷めないうちに次スレで議論して欲しい : デフォルトの名無しさん [sage] 2016/07/10(日) 23:13:07.16 :BhOPIXig 乙。 諸注意や信奉者の主張例とかは俺もちょっと気になったが、(テンプレにしては感情すぎる) まあそれもテンプレ作成者の意志だから尊重してもいいかとも思っていた。 俺が落としたくなかったのは関連スレとかのリンクだから、とにかく乙。 とりあえずここで揉めても意味無いから、今後は 基準で「落ちるまでは関連スレに入れる」でいいんじゃないか。 だからWebGLの奴も入れておけばいい。 分化した専門スレが落ちるようなら需要がないって事だから帰ってくればいい。 流れるようなら存在価値があるのだからそのままでいい。 政治的に「宣伝してやらない」とか考える必要はない。 分化した専門スレであり、質問を受け付けるのであれば、基本的に追加すればいい。 : デフォルトの名無しさん [sage] 2016/07/11(月) 00:15:27.69 :gzpHRxsK うめ : 1001 [] Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。 life time: 49日 4時間 23分 54秒 : 1002 [] Over 1000 Thread 2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。 運営にご協力お願いいたします。 ─────────────────── 《プレミアム会員の主な特典》 ★ 2ちゃんねる専用ブラウザからの広告除去 ★ 2ちゃんねるの過去ログを取得 ★ 書き込み規制の緩和 ─────────────────── 会員登録には個人情報は一切必要ありません。 月300円から匿名でご購入いただけます。 ▼ プレミアム会員登録はこちら ▼ ttp://premium.2ch.net/ ttp://pink-chan-store.myshopify.com/
凡例:
レス番
100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている
名前
名無しさん (青) → sage のレス
名無しさん (緑) → age のレス
ID
ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID
このページは2ch勢いランキング が作成したアーカイブです。削除についてはこちら 。