1 :
◆SEdFBOkLSw 転載ダメ©2ch.net (スププ Sdb8-t1qj)
2016/08/29(月) 08:21:23.08 ID:zn5a5dIZd
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-6のテンプレを読んだ上で質問してください。次スレは
>>950が
>>2のテンプレ案(本スレで改善案があれば考慮)を元に立ててください
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は
http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。
>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
※前スレ
+ JavaScript の質問用スレッド vol.121 +
http://echo.2ch.net/test/read.cgi/tech/1468158373/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2 :
◆SEdFBOkLSw (スププ Sdb8-t1qj)
2016/08/29(月) 08:22:19.52 ID:zn5a5dIZd
3 :
◆Pj4prouD92 (スププ Sdb8-LFRZ)
2016/08/29(月) 08:24:24.04 ID:zn5a5dIZd
4 :
◆SEdFBOkLSw (スププ Sdb8-LFRZ)
2016/08/29(月) 08:25:42.49 ID:zn5a5dIZd
5 :
◆Pj4prouD92 (スププ Sdb8-LFRZ)
2016/08/29(月) 08:26:07.58 ID:zn5a5dIZd
6 :
◆SEdFBOkLSw (スププ Sdb8-t1qj)
2016/08/29(月) 08:28:22.86 ID:zn5a5dIZd
7 :
◆SEdFBOkLSw (スププ Sdb8-t1qj)
2016/08/29(月) 08:28:57.37 ID:zn5a5dIZd
8 :
◆SEdFBOkLSw (スププ Sdb8-t1qj)
2016/08/29(月) 08:29:18.16 ID:zn5a5dIZd
■諸注意
vol.115でlodashを不必要に推奨して啓蒙する行為が多く確認されており、ライブラリ系の質問はvol.116から禁止されました。
vol.115,116ではライブラリ禁止する発言が見られた直後にライブラリを許可する意図で次スレを立てる行為が確認されています。
本スレッドでライブラリ許可を求める発言が確認された場合は不要な争いを避ける為、スルーすることを推奨します。
ライブラリの質問はライブラリスレへ誘導し、誘導行為への反論はスルーしてください。
-----ここまでテンプレ-----
9 :
デフォルトの名無しさん (ワッチョイ 2aa7-gQqU)
2016/08/29(月) 12:07:07.79 ID:uRu8v7uy0
取りあえず一乙だけどレスポンチは他所でやってほしい
10 :
◆SEdFBOkLSw (スプッッ Sdc8-t1qj)
2016/08/29(月) 12:12:04.30 ID:v+VBJ2wid
>>9 うん、それはマジですまんかった。
新しいスレ立ててもらえたようだし、ワッチョイもやってみたし、迷惑掛けた分多少なりとも貢献させてくれ。
11 :
デフォルトの名無しさん (ワッチョイ 7f5b-gQqU)
2016/08/30(火) 19:50:02.89 ID:XVRDpTr20
一乙ワッチョイ乙。
個人的にはやりたいことをやればいいと思うから、
「スレを乗っ取る」のではなく、「新しいスレを立てて何かやる」のはいいと思うよ。
今回はその新しいスレが「質問スレ」と銘打っているから駄目だと思うけど。
仕様について語りたい人が多いのなら、「仕様スレ」を立てればいいんだよ。
人を集めるのが面倒だからといって、既存スレを乗っ取るのは駄目だよ。
結果的に「質問スレ」「仕様スレ」と並立した状態で、質問スレが過疎って落ちるのなら、
それは不要という意味だから、その時統合すればいいだけ。
それ以前に無理矢理方針変更するのは、ただの乗っ取りでしかない。
質問スレは単独で十分流れているわけだし。
前回何故か「仕様スレ」が放置されて落ちたでしょ。
それも含めて単独で「仕様スレ」が存在出来ないと考えて「質問スレ」としたのなら姑息だよ。
単独で存在出来ないのならそれは需要がないということでしかない。
それでも需要を掘り起こしたいのなら、ぬしって保守していくしかない。
自分では何もする気がなくて、他人が作り上げた物を横取りすることしか考えないのは、ただのクズだよ。
実際、君らには「仕様スレ」が必要なのだろう?
だったら姑息なことをせずに正面から「仕様スレ」立てて勝負すれば良かっただけの話だよ。
それが落ちたらそれまでの話でね。別に殺されるわけでもなし。
というのが今回の顛末で思ったことだね。
はい、では次の質問どうぞ。
12 :
◆SEdFBOkLSw (アウアウ Sa45-t1qj)
2016/08/31(水) 02:07:12.14 ID:hBi44Zvna
>>11 いや、俺にそこまでの強い意図があったわけでは無いんだ。
質問スレで、間違ってる答えってのはその中で訂正、再発言されて然るべきだと思って、おかしいんじゃねえの?
って言ったのを、良くわからん理屈で訂正どころか、
間違いに間違いを重ねるから。
訂正してほしかっただけよ。後続の人のために。
売り言葉に買い言葉になっているだけで仕様を語りたいわけでは(俺は)無くて、間違ってなければそれで良いよ。どんな話してても。
13 :
デフォルトの名無しさん (ワッチョイ 7dce-gQqU)
2016/08/31(水) 03:17:11.25 ID:Z+fjIbnf0
訂正してほしかったじゃなくて、お前が訂正するんだよ。
正しい情報をちゃんとしたソース込みで。
相手はちゃんとソース出しているんだから、
お前がそれよりも信頼できるソースを出せない以上、
相手が正しいで終わりだろ。
14 :
◆SEdFBOkLSw (アウアウ Sa45-t1qj)
2016/08/31(水) 07:41:52.69 ID:VVMtMJPza
>>13 平行線だろ。
こっちが、ソースやら考え方を話しても聞かないんだから。
だから説得は諦めた。
15 :
デフォルトの名無しさん (ワッチョイ 27b1-CT9T)
2016/08/31(水) 07:49:31.73 ID:xPKmFyyb0
以下の言語がいいよって言われたんですが聞き取り間違えたのか検索しても出てきませんでした。
ホトリン
正確な言語名を教えて欲しいです。
16 :
デフォルトの名無しさん (ワッチョイ 11a1-qQHP)
2016/08/31(水) 20:30:25.87 ID:VPZCfIA10
kotlinじゃないかな
間違ってたらすまん
17 :
デフォルトの名無しさん (ワッチョイ 75ce-gQqU)
2016/08/31(水) 23:30:36.59 ID:mxX4GOAr0
ポワトリン
年齢がわかる
18 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/01(木) 01:07:46.75 ID:vX3kyOFIr
ここが比較的まともだな
19 :
◆SEdFBOkLSw (アウアウ Sacf-RETc)
2016/09/01(木) 07:30:55.95 ID:x5Fi8ahca
ガンは切らないとね。
20 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/01(木) 08:21:27.50 ID:bs0MIC6Pr
>>19 だったら、向こうのスレでレスするのを止めなよ
21 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/01(木) 11:17:03.88 ID:4NaaelJAd
22 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/01(木) 13:36:19.91 ID:Z7/OzEHdr
>>21 構わなければあの話題に関しては自然消滅するでしょ
あっちが本スレだと勘違いする人も出てくるだろうし、スルーが一番
23 :
デフォルトの名無しさん (ワッチョイ 17c9-wh/5)
2016/09/01(木) 18:09:09.45 ID:yAfRysov0
promiseのチェーンをn個動的につなげたいときはどうしたらいいの?
24 :
デフォルトの名無しさん (ワッチョイ 17c9-wh/5)
2016/09/01(木) 18:17:54.49 ID:yAfRysov0
a().then(b).then(c).then(d);
これをこう書き
function run(a){
return a[0]().then(a[1]).then(a[2]).then(a[3]);
}
a[] を4個固定じゃなくてn個にしたい
25 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/01(木) 18:44:11.05 ID:P+2ORA+3r
26 :
デフォルトの名無しさん (ワッチョイ 17c9-wh/5)
2016/09/01(木) 19:14:13.95 ID:yAfRysov0
27 :
デフォルトの名無しさん (ワッチョイ efce-wh/5)
2016/09/01(木) 20:03:48.39 ID:EP8ZkXWM0
28 :
◆SEdFBOkLSw (アウアウ Sacf-RETc)
2016/09/01(木) 21:56:03.01 ID:x5Fi8ahca
>>24 var f=function (a){
var y=a.shift();
if(y) y().then(function(){f(a)})
}
で全部いけるんでないの?
29 :
デフォルトの名無しさん (アウアウ Sacf-vSVO)
2016/09/01(木) 22:40:36.60 ID:ZxoQ7kpta
30 :
デフォルトの名無しさん (ワッチョイ f3ce-wh/5)
2016/09/01(木) 22:41:37.26 ID:scPPFiSF0
31 :
デフォルトの名無しさん (ワッチョイ eb5b-wh/5)
2016/09/01(木) 22:59:22.58 ID:+SVnGf+J0
>>28 前から思ってるんだけど、何でお前らそんな奇妙なコードを書くの?
そういう可変長ループはwhileが鉄板で、
>>24はそれを知らないだけだろ?
関数型()でインミュータブル()なら、shift使っちゃ駄目だと思うし。(俺は詳しくないが)
そのコード自体は自前Promiseとしてarrayを持ち、途中で挿入も出来るから、
そういった用途には面白いと思うよ。
ただ、普通は
>>24に対してそれはない。
というか、お前らどこで習った?或いは誰を参考にしてそのコードを書いてる?
>>24 while使って書いてみ?
正直、書くのは手間ではないのだけど、コードクレクレ君が集まるのはウザイから、
今回の質問レベルならコピペで動くコードを書く気はない。
ただ、十分なヒントだと思うから、クレクレ君でなければ書けると思うが。
32 :
◆SEdFBOkLSw (アウアウ Sacf-RETc)
2016/09/01(木) 23:19:49.59 ID:x5Fi8ahca
>>31 while使って書くって、プロミスなのに?
順序が保証できるのならそれで良いとは思うけど。
別に、shiftでも、carとcdrに相当するものでも良いよ。
どこも奇妙じゃないと思うけど。
33 :
デフォルトの名無しさん (ワッチョイ eb5b-wh/5)
2016/09/01(木) 23:29:32.66 ID:+SVnGf+J0
>>32 いや俺はPromise使ったことがないからその辺詳しくはないが、
>>24なら見た目普通に書けそうだが駄目なのか?
そもそも
>>24が駄目(動かないコード)なのか?そうだったら済まんかった。
やはりcarとcdrか。
つかcar/cdrで抽象化している関数型みたいな奴って、一般的にarrayを破壊的に使うものなのか?
(lispなら最近の大富豪プログラミング以前だからそうなのかもしれんが、
多分最近の関数型なら嫌われるのでは?)
34 :
デフォルトの名無しさん (ワッチョイ f3ce-wh/5)
2016/09/01(木) 23:31:41.25 ID:scPPFiSF0
>>31 ◆SEdFBOkLSw は技術レベル低いくせに
口ばっかりうるさいやつですから・・・
これまでも何度となく、意味不明なこと言ってるよw
35 :
デフォルトの名無しさん (ワッチョイ eb5b-wh/5)
2016/09/01(木) 23:46:42.27 ID:+SVnGf+J0
うーん、一応PromiseをMDNで確認してみたけど、書けると思うけどね。
見た目、functionで入れ子になるのが嫌で、タマネギ型オブジェクトにしてみただけだろ?
まあ、俺は使ったことがないから、壮絶な勘違いをしているかもしれんが。
ちなみに
>>30は「タマネギ型」であることを説明しているわけだが、
それは
>>24見る限り本人は分かってると思うんだよ。
そうではなくて、「n個にしたい」って言ってるんだから、そこを答えないと意味無いだろ。
なんつーか、Promise知ってる俺カッケーな答えでしかないんだよ。
>>30は。
36 :
デフォルトの名無しさん (ワッチョイ f3ce-wh/5)
2016/09/01(木) 23:52:20.69 ID:scPPFiSF0
n個にしたいなら、i < 10 の代わりに
i < n にすればいいだけじゃんw
37 :
デフォルトの名無しさん (ワッチョイ eb5b-wh/5)
2016/09/01(木) 23:57:35.19 ID:+SVnGf+J0
だからそこを説明しろってこと。Promiseの説明全くいらんよね。
というか、これを書けないレベルの人がPromiseの使用を強制されられるところが
若干JavaScriptは歪んでる。まあこれも前から思っていることだが。
38 :
デフォルトの名無しさん (ワッチョイ f3ce-wh/5)
2016/09/02(金) 00:00:22.58 ID:gFIXdWf60
39 :
◆SEdFBOkLSw (アウアウ Sacf-RETc)
2016/09/02(金) 00:26:17.09 ID:nUqjDcPOa
>>33 まぁ、破壊されたものを次に渡してるし、参照型で渡ってるから気持ち悪いだけで、破壊せずに渡してもいいと思うよ。
多分嫌われるw
>>34 本質理解してないお前よりマシだけどな。
なんだあのセンス無いやつ。
>>35 thenの中はコールバック関数で遅延評価だから、whileだと終わったかどうかわかんないと思うけど、どんなソース想定してる?
40 :
デフォルトの名無しさん (ワッチョイ eb5b-wh/5)
2016/09/02(金) 00:40:54.92 ID:oKN/Shh+0
>>39 いやPromiseで書くのはあくまで処理の事前予約だよな?
そこは変更不能だし、同期的に確定する。
もちろん中身の関数は実際には後に呼ばれるけど、
一般的にそれを「遅延評価」とは表現しない。
俺の想定しているコードなら、
>>30をwhileに変えただけに近い。
とりあえず君の言い分が正しいのなら、
>>30は間違いだということになるが、そうか?
41 :
◆SEdFBOkLSw (アウアウ Sacf-RETc)
2016/09/02(金) 01:01:25.21 ID:nUqjDcPOa
>>40 あー、そういう事か。いや、間違ってない。面目ないな。
入れ替えると言うか、それごと変えるという事か。
それは再帰とどっちが良いのかは目的次第かもしれん。
俺は残り回数渡して再帰すると思うわ。setTimeoutで包んで。
42 :
デフォルトの名無しさん (ワッチョイ eb5b-wh/5)
2016/09/02(金) 01:23:27.78 ID:oKN/Shh+0
>>41 >>23が「動的に」って言っているからそこは微妙なのだけど、
まあ初心者にそこまで厳密に言っても仕方ないからね。
多分あの質問なら単純に「可変長ループ」が分からないのだと思った。
それはさておき、
>>28のコードは面白いとは思うが、
>>28を読める奴がこの質問はないだろってこと。
Promiseなら突っ込んだ時点でそこまでの処理は確定だが、
>>28なら途中の関数内で処理を変更出来る。
これを「動的に」と表現するのは自然ではあるが、
これを記述しようとする奴が
>>24の質問はない。(と見た)
43 :
デフォルトの名無しさん (ワッチョイ f3ce-wh/5)
2016/09/02(金) 01:52:27.16 ID:gFIXdWf60
> setTimeoutで包んで。
またなぁw 余計な一言。
なんでsetTimeoutを含まなきゃならんのか。
これも何も分かってない証拠よ。
理屈はわからないけど、これやったら動いた!
正しい理解をせずに長年やったやつの末路だなw
44 :
デフォルトの名無しさん (ワッチョイ eb5b-wh/5)
2016/09/02(金) 02:32:24.71 ID:oKN/Shh+0
んー、まあ俺は
>>41の使い方ならsetTimeoutで包んだ方が妥当だと思うがな。
ただし俺はC派だからそういう余計な処理は出来るだけ入れたくなくて、
俺は実際にはほぼ直接呼び出しにしているが、その分気を使わなければならなくなる。
そういう面倒なことは無しにしようってのが昨今のプログラミングスタイルだろ。
つーか、お前も若いんだと思うが、噛み付きまくるのはやめい。
setTimeoutで包むかどうかは上位のコーディングポリシーの話だから、
「常に」どっちがいいとかいうことはないし、ここで白黒つけられることでもないよ。
むしろそこに噛み付いた時点で無知だと晒しているようなもん。
まあそれでも「技術的に」やり合うのならどうぞご自由にだが。
45 :
デフォルトの名無しさん (ワッチョイ 3fa7-wh/5)
2016/09/02(金) 03:01:31.89 ID:L3z5oHD70
ご自由にされちゃたまらんわ
やり合うんだったら
>>27の隔離スレでやってくれ
46 :
◆SEdFBOkLSw (アウアウ Sacf-RETc)
2016/09/02(金) 07:39:58.54 ID:HDM5TMU3a
>>43 よく理解して実装してるにきまってるでしょ。
自分の経験書かないでよ。
47 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/02(金) 08:28:05.43 ID:ZAub+DJjr
>>46 いや、setTimeoutは不要でしょ
遅延処理をするわけでもないのになぜ使う必要があるのさ?
48 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/02(金) 08:40:46.72 ID:Nu/77N8Pd
>>47 生粋のネイティブなPromiseなら、非同期になることは保証されてるけど、
どんなPromiseっぽいものかわからん現状安全側に倒すよ。
次の処理始める、ではなくて、
今もし、今回の呼び出しでキュー溜まってるならそれ終わらしてからやりたいし、
コールスタックも深くなるじゃん。
49 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/02(金) 08:45:09.66 ID:ZAub+DJjr
>>48 非同期の逐次処理で重要なのはコールバックでしょ
非同期処理が完了したことを確認するにはコールバックするしかない
seTimeoutはコールバックを楽に実装する機能がないわけで何の役にも立ってない
50 :
デフォルトの名無しさん (ワッチョイ efa5-w0F2)
2016/09/02(金) 11:47:53.06 ID:RZSd/NSC0
こんにちは、初歩的な話で恐縮ですが、
textareaの入力から複数行、行頭スペース・連続スペースを含む文字列を取得したいのですがJS側で何とかすることはできませんか?
51 :
デフォルトの名無しさん (ワッチョイ 739d-Es5g)
2016/09/02(金) 11:52:59.18 ID:d9/aWFQj0
52 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/02(金) 11:56:09.84 ID:Nu/77N8Pd
>>49 thenの中の話だが。
promiseのそれっぽいポリフィルだと、即時に関数呼び出しするから、
promiseの中でsetTimeoutしてた場合、そいつらが走る前に、次のPromiseが走るよね。
そうじゃなくて、キューイングすることで、もし何かが実行されていてもその後に実行されるじゃん。
あと、コールバックが書けない、は一番ナンセンスじゃない?
配列の最後のPromiseが、「コールバックを呼び出す」ってPromiseであれば良い。
>>50 それぞれ取りたい感じ?
valueで全体は取れるけど、あとは正規表現でマッチした部分使えば良いんじゃないかな。
53 :
デフォルトの名無しさん (ワッチョイ efa5-w0F2)
2016/09/02(金) 12:59:55.23 ID:RZSd/NSC0
取得ではなく出力の時に に置換するのを忘れていたことに気づきました……
お騒がせしました……
54 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/02(金) 15:53:26.83 ID:XGUTMOjhr
>>52 君はPromiseとsetTimeputを激しく誤解している気がしてならない
> promiseの中でsetTimeoutしてた場合、そいつらが走る前に、次のPromiseが走るよね。
そんなことはない
そもそも、非同期処理を上手く活用することを目的としているPromiseにそれが出来ないわけがないだろう
やり方は既出だが、ちゃんと理解してないのではないか?
> そうじゃなくて、キューイングすることで、もし何かが実行されていてもその後に実行されるじゃん。
君の言葉を借りるなら非同期処理に対してsetTimeputを適用したらsetTimeputの数だけキューが増えると思うんだが
setTimeputは同期処理を非同期処理にするのに有効だが、非同期処理にsetTimeputを使っても遅延処理以上の結果は得られない
> あと、コールバックが書けない、は一番ナンセンスじゃない?
「コールバックが書けない」とは誰もいってない
55 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/02(金) 16:23:16.06 ID:Nu/77N8Pd
>>54 だからそれっぽいポリフィルだって言ってんじゃん。
日本語読めないならもう書かんほうが良いよ。
キューが増えていいんだよ。
promiseの中でsetTimeout(..,0)された物を先に動かしたいだけだから。
お前実装見ずに概念で話してない?
56 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/02(金) 18:24:53.65 ID:Z6ER1HHhr
>>55 それはPolyfillがおかしいだけだろ
おかしなPolyfillを基準にされてま困る
setTimeoutは役に立たんという意見もスルーするし、お前の方こそ日本語を読め
57 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/02(金) 18:33:05.77 ID:Nu/77N8Pd
>>56 あ、うん。
最初からそう言ってんじゃん。
まぁ、thenを持ったオブジェクトさえ返せば別にPromiseで無くともその辺誤魔化しつつ走ってくれる便利なやつなんだけどね。書いた関数。
なんでsetTimeoutするかの理解出来てないんだったら、同じようにcatch書いたときにどう例外オブジェクト飛んでくるか見たら?
catchで、setTimeoutしてthrowし直すとか割と普通っしょ。
コールスタックって言ったのになぁ。
58 :
デフォルトの名無しさん (ワッチョイ 739d-Es5g)
2016/09/02(金) 18:36:22.17 ID:YHEl/7lL0
そもそもpromiseってそんなに必要か?
59 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/02(金) 18:40:34.64 ID:Z6ER1HHhr
>>57 Promiseが理解できていればsetTimeoutが不要なことがわかるはずなんだがな
「それっぽいPolyfill」とやらも具体例が皆無
必要なら完璧なzPolyfillを探すなり、自分でPolyfillを書くなりやれと
お前さんのPolyfillらしきものがsetTimeoutなのかもしれんが、無駄が多すぎだろ
60 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/02(金) 18:40:39.63 ID:Nu/77N8Pd
>>58 ちゃんと処理が出来るならなんでも良いよ。
俺は嫌いだからeventEmittet的なものでイベント起こす。
イベントのリスナが一つとも限らんし、発火させるやつが一つとも限らんし。
そのイベントがリエントラントでさえあれば良い。
61 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/02(金) 18:41:53.96 ID:Nu/77N8Pd
>>59 書いたでしょ。
>>48 で。
噛みつきたいだけならお前圧倒的に理解力足らんわ。
62 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/02(金) 18:44:14.81 ID:Z6ER1HHhr
>>58 Promiseがなくてももちろん実装できる
Promiseの利点は統一されたインターフェースで非同期処理を管理できること
自分なりのコード資産があるのならPromiseを使わなくてもいい
が、他人に読ませるならPromise一択だな
63 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/02(金) 18:51:50.44 ID:Z6ER1HHhr
>>61 >>48のどこに「ポリフィルっぽいもの」の具体例がある?
余所様のPolyfillが使用できないなら自分で書けばいいのにな
64 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/02(金) 18:57:53.41 ID:Nu/77N8Pd
>>62 error,resultほうが余程そして統一されてるんでは?
65 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/02(金) 18:59:39.77 ID:Nu/77N8Pd
>>63 逆じゃん。
生粋のものであれば、の方でPromiseの定義してるでしょ。
もちろん使うなら内製はするだろうけど、基本的にはポリフィル自体を使わんよ。
66 :
デフォルトの名無しさん (ワッチョイ eb5b-wh/5)
2016/09/02(金) 21:24:55.46 ID:oKN/Shh+0
>>58 自分では使わないが、
意識高い系APIが返してくる場合はどうしようもないだろ。
67 :
デフォルトの名無しさん (ワッチョイ f3ce-wh/5)
2016/09/02(金) 22:29:55.63 ID:gFIXdWf60
◆SEdFBOkLSw お前はポリフィル使ったらだめだよ。
中身が違うだろ?w
68 :
デフォルトの名無しさん (オッペケ Sr8f-vSVO)
2016/09/03(土) 07:07:29.63 ID:z0le1ilUr
>>65 > 生粋のものであれば、の方でPromiseの定義してるでしょ。
そんなことは聞いてない
> promiseの中でsetTimeoutしてた場合、そいつらが走る前に、次のPromiseが走るよね。
こんなおかしなPolyfillがあるならそのPolyfillをDL出来るURLを出せ、って事だ
正直、そんなPolyfillがあるなら「Promise」と呼ぶのもおこがましいレベルだが、
実際のところは君が書いているPromiseのコードがおかしいだけでPolyfillに罪はないと思ってるよ
どうせsetTimeoutをPromise化してないんだろ?
69 :
デフォルトの名無しさん (ワッチョイ a3a1-10NS)
2016/09/03(土) 08:12:05.87 ID:I7zaPf2I0
promiseの中でsetTimeoutしたらその先まで面倒見るのは
promiseの仕事じゃない気がするんだが
どんなコードを前提にしてるのかさっぱり分からん
70 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/03(土) 08:26:26.61 ID:Y2U/H6HXr
◆SEdFBOkLSw がPromiseを理解してないってことはわかった
71 :
デフォルトの名無しさん (ワッチョイ e33c-10NS)
2016/09/03(土) 09:05:52.38 ID:KrSHBF2N0
>>69 Promiseの中でsetTimeoutした場合に、その先まで面倒見るかどうかは使う側の問題なのでどちらとも言えない
Promise自身は内部で何をしているかに関わらず、resolveまたはrejectが呼ばれるまで次の処理に進まずに待つだけだ
setTimeoutの処理を待ちたいならsetTimeoutの中でresolveを呼べばいいし、待たないならsetTimeoutの外でresolveを呼べばいい
Promiseなんてちょっと賢いコールバックの仕組みでしかなく、正しく使えるかどうかは使う側の問題
まあそのちょっと賢いに慣れてしまうとわざわざ他を使おうなんて思えなくなるぐらい便利なんだがw
72 :
デフォルトの名無しさん (ワッチョイ a3a1-RETc)
2016/09/03(土) 09:15:44.52 ID:I7zaPf2I0
>>71 ありがとう
setTimeoutの中でresolveを呼んでる場合
引数を受け取らずに次が走るって状況が想像付かんのだわ
73 :
デフォルトの名無しさん (ワッチョイ f77b-RETc)
2016/09/03(土) 09:29:11.12 ID:e3VOV86p0
一つ教えて下さい。
Promiseで実行指定した処理群内部では
タイマー関連を使えないのでしょうか?
これが使えないならば、WebWorkerでも極力使わない方が良い様に思います。
74 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/03(土) 13:42:23.73 ID:WfmCkwdkd
理解してない、というか理解したつもりになってる人が、
それでよいと盲信して使っているが故にこうなる見本じゃん。
75 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/03(土) 13:55:25.79 ID:40V3o/40r
76 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/03(土) 13:58:36.46 ID:WfmCkwdkd
77 :
デフォルトの名無しさん (ワッチョイ 0bce-wh/5)
2016/09/03(土) 14:22:41.73 ID:EZVA2rF20
ここでも◆SEは能力不足だって指摘されてるなw
78 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/03(土) 18:29:27.52 ID:fDA8i4Yzr
向こうのスレでは ID:EZVA2rF2 が頑張ってるな
79 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/03(土) 18:49:19.66 ID:fDA8i4Yzr
>> はい、で?お前は何がブラックボックスだって?
> うん、得体のしれないポリフィル、に対して言ってた。
> 読めば良いだけ、なら、そんな工数無駄なので、作れば良いだけ。
この人(◆SEdFBOkLSw )、他作製コードは全く使わんつもりなのかな
このポリシーではライブラリ系が全く使えん
それとも、jQueryやらReactやらは盲目的に信頼するタイプなのか
信頼の多寡をはかる指標の問題だろうが
80 :
デフォルトの名無しさん (ワッチョイ 0bce-wh/5)
2016/09/03(土) 18:51:02.59 ID:EZVA2rF20
>>79 ブラウザはソースコードを全部読んで
ライブラリは全部自分で作るらしい。
コストは全部客持ちだから何も痛くないだってさw
81 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/03(土) 19:42:03.71 ID:fDA8i4Yzr
>>80 > ブラウザはソースコードを全部読んで
> ライブラリは全部自分で作るらしい。
わざわざブラウザのソースコードを読む理由が分からんのだが、実装依存な挙動を確認する目的?
実装依存に頼るコードは様々な対策をやりきってどうしようもないときぐらいしか出番がないわけで
定常的にはWHTWG HTMLやECMA262を読む方に時間をかけると思う
(まあ、その辺の仕様書を読まないからわざわざソースコードを読みにいっているのかもしれないが)
82 :
デフォルトの名無しさん (ワッチョイ 0bce-wh/5)
2016/09/03(土) 19:47:33.04 ID:EZVA2rF20
>>81 > わざわざブラウザのソースコードを読む理由が分からんのだが、実装依存な挙動を確認する目的?
◆SE曰く。全く同じ動作をしていて同じコードが動いてテストコードを使ってテストしていても
中身が違えば、ブラウザごとに違うテストが必要になるって思ってるらしいよw
挙動じゃなくて中身のコードが同じかどうかで考えてる。
だからES6という言語で書いたソースコードをそのまま動かす(テストにも通る)のと
babelを使ってES5にして動かす(もちろんこちらもテストに通る)のとで
動きが全く一緒だけど、それはbabel用の言語(?)だって言い張ってるw
83 :
◆SEdFBOkLSw (アウアウ Sacf-RETc)
2016/09/03(土) 20:24:19.03 ID:YIu9WVDua
>>79 全くじゃないけど、基本的には使わんなぁ。
jQueryは検証しまくったし、パッチもだいぶ出したから使うけど、それでも割と古い。
Reactは使わんねぇ。個人的にはRiotが使いたいけど。
似たようなのはあるが、仮想DOMでは無いんだよなぁ。
>>81 どっちも読んでるよ。
ブラウザ見るときは、例外として何という文言で飛んできてくるか、とか。
ログに落としてたりするから。
FireFoxはmessageにスタックトレース飛んでこないしね。
例外が起こる、とだけテストしても無意味だし。
84 :
デフォルトの名無しさん (オッペケ Sr8f-vSVO)
2016/09/03(土) 20:46:37.83 ID:fDA8i4Yzr
>>83 仕様書を読めるならPolyfillを書けばいいのになぜ書かないんだ?
いつまでも古いES用のコードにしがみつく理由が分からん
そのやり方なら動作保証している最も古いブラウザに合わせたコードしか書けないだろうに
setTimeoutを使ったコード例が欲しいな(setTimeoutはPromiseの代替にはならないと思ってる)
85 :
デフォルトの名無しさん (ワッチョイ 0bce-wh/5)
2016/09/03(土) 20:55:50.71 ID:EZVA2rF20
> setTimeoutを使ったコード例が欲しいな(setTimeoutはPromiseの代替にはならないと思ってる)
当たり前。
Promiseは終わったと言うイベントを通知するだけ。
setTimeoutでいえば、setTimeout(function() {・・・}, 1000)の
「function() {・・・}」この部分の代替。
別スレッドでn秒待つとかいうことはできない。
86 :
◆SEdFBOkLSw (アウアウ Sacf-RETc)
2016/09/03(土) 21:12:28.45 ID:YIu9WVDua
>>84 しがみついてるわけではなくて、要件定義で絞れるならネイティブにそう書くよ。
ポリフィル使う意味もあんまないと思うわ。
それなら、ライブラリ作ったほうが余程建設的だと思う。
ライブラリ自体の実装を、どれ用、で分ける事はあるだろうけど、面は同じにしとくよ。
87 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/04(日) 12:32:50.46 ID:chJ34NF3r
>>86 例えば、ES3、IE8対応の自作ライブラリを永続的に使うとしよう
ライブラリ依存から抜け出さないし、ES7→ES8と機能が増えていく度にES5,6,7,8を全て自作ライブラリで担当するのでライブラリの負担は増えていく
社内チームで作っていくなら自作ライブラリを更新する度に制作したあなた以外の人に教えるコストがかかる
ドキュメントも作る必要があるだろうし、後に入社する新人は膨大な自作ライブラリを覚えなければならない
あなたのスタンスは自分一人で作って自分一人で保守している感覚なんだよな…
で、setTimeoutのコードはスルーするんだな
88 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/04(日) 12:39:09.43 ID:chJ34NF3r
>>82 前半3行は意味が分からんのだが、「中身」とは何を指してるんだ?
> 動きが全く一緒だけど、それはbabel用の言語(?)だって言い張ってるw
Babelは可能な限りES6に似せてトランスコンパイルするが、同じではないと思うぞ
Polyfill可能な機能は大部分を同じに出来るが、構文が異なる機能を完全に同じにするのは難しい
トランスコンパイルされたコードを想定して書くのはおかしなことではないかと
89 :
デフォルトの名無しさん (オッペケ Sr8f-RETc)
2016/09/04(日) 12:46:48.41 ID:chJ34NF3r
>>85 俺に何を説明したいのかよくわからんが、
>>84で書いたようにsetTimeoutがPromiseの代替にならないのは理解している
Promiseはコールバックで非同期処理完了を検知するわけだが、Promiseを使わなくともコールバックで完了を検知するしかない
だから、自作ライブラリで実装するならコールバックを管理する形になるはずでそこにsetTimeoutの出番はない
少なくとも、発端となった
>>23-24にsetTimeoutを勧める理由はないはずだ
90 :
デフォルトの名無しさん (ワッチョイ efce-wh/5)
2016/09/04(日) 13:03:47.49 ID:EwnjeGwb0
>>88 > Babelは可能な限りES6に似せてトランスコンパイルするが、同じではないと思うぞ
同じものと、不完全なものの二通りある。
ポリフィル用語では前者はshim、後者はshamと呼ばれているものだよ。
> 構文が異なる機能を完全に同じにするのは難しい
babelは構文を置き換えるのだから、構文の違いはまったく関係ない。
完全に同じにできない理由は、JavaScriptの内部の機能に依存するから。
同じゃない部分っていうのは動きが違うわけじゃなくて一部が実装されてない(できない)
だから動く部分に関しては完全に同じだよ。
> トランスコンパイルされたコードを想定して書くのはおかしなことではないかと
想定する内容は「一部の機能を使わない」ようにするということだけ。
でもこれって難しい?
だってそもそもブラウザだってES6のすべての機能をサポートしているわけじゃない。
babelを使わなかったとしてもお、普段からブラウザで動くJavaScriptコードを書いている人がやってることだよ。
このブラウザでは使える機能だっけ?って調べながらコード書いている。
トランスパイルできないコードを想定して書くのも
ブラウザが対応してないコードを想定して書くのも大きな違いはない。
むしろ多種多様なブラウザを想定するよりもbabelがブラウザの違いを吸収して
ブラウザ間の違いを減らしてくれる方が「想定する必要」が減って楽でしょ?
91 :
デフォルトの名無しさん (ワッチョイ efce-wh/5)
2016/09/04(日) 13:19:14.13 ID:EwnjeGwb0
> Babelは可能な限りES6に似せてトランスコンパイルするが、同じではないと思うぞ
ここは完全に間違ってるから訂正w
babelはES6に対応していないブラウザで実行できるように、
ES6のコードを可能な限りES5のコードに変換するもの
他の言語からES6やES5のコードに変換するわけじゃない。
92 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/04(日) 13:35:37.89 ID:ysPFxgV5d
>>87 前半はわりとそうかな。
アーキとしてチームで作るし、教育もドキュメンテーションもするし、規約もQAも書くよ。
一人じゃ無いよ(笑)どんな会社だよそれ。。
setTimeout解決してない?なんか誤読してるのかもしれないし、何がひっかかってるの?
>>89 うん、そういう意図では使わんのだが。本来のコードに勧めてるわけでもない。
何故二人が、あってもいいって発想で、お前だけ絶対に無しだって発想なのか、どこが差なんだろ。
93 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/04(日) 13:38:00.98 ID:ysPFxgV5d
>>90 関係あるんじゃ?構文の違い。
確か、いくつかが言語仕様上変換しようがないから、
意味合いの変わるコードになるよ、一般解においては結果は同じだけど、とテヘペロしてたような。
またリポジトリ見てくるか。
94 :
デフォルトの名無しさん (ワッチョイ efce-wh/5)
2016/09/04(日) 13:58:20.34 ID:EwnjeGwb0
>>93 質問していい?
babelで変換したコードはリポジトリに入れたり
変換したコードは必要ない限り見たりテキストエディタで
修正したりしないんだけどそれはわかってる?
95 :
デフォルトの名無しさん (ワッチョイ 13ce-wh/5)
2016/09/04(日) 14:27:30.61 ID:+uXpWhFu0
>>92 Promiseっていうのはthenでつなげるためには
Promiseオブジェクトを返さなきゃいけないと思ってるのかもしれないけど、
Promise.resolve(1)
.then(i => Promise.resolve(i+1))
.then(i => Promise.resolve(i+1))
.then(i => Promise.resolve(i+1))
.then(i => console.log(i))
こういう書き方も問題ないんだよ。
Promise.resolve(10)
.then(i => i+10)
.then(i => i+10)
.then(i => i+10)
.then(i => console.log(i))
setTimeoutはそれを入れる明確な理由があるのであれば
(「念のため」は明確な理由ではない)入れるべきだが、
理由がない場合は入れない。単なる無駄な処理。
あんたがディスられてるのは、理由をいわずに
setTimeoutを持ち出してきたから。
96 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/04(日) 14:44:53.31 ID:ysPFxgV5d
>>94 うん、同じコンパイラが確保できること、納品としてbabelかけたあとのものを納品しない、が前提であれば、わかってるけどそれがなにか?
>>95 知ってるよ。
中で、一連のJSが走り終わってから走ってほしいという意図で、setTimeoutやら、setImmediateを使われていたら、
こちらはその意図に合わせて、非同期に呼んだらないとね、って話で、だからこそレベル低いポリフィル引き合いに出して、ネイティブなら、って言ったんだけど。
97 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/04(日) 14:48:06.06 ID:ysPFxgV5d
理由が理解できてないだけだったか…
98 :
デフォルトの名無しさん (ワッチョイ 13ce-wh/5)
2016/09/04(日) 14:51:13.06 ID:+uXpWhFu0
>>96 > 中で、一連のJSが走り終わってから走ってほしいという意図で、setTimeoutやら、setImmediateを使われていたら、
そんな話全くしてないよね?
何先走ってるのさw
99 :
デフォルトの名無しさん (ワッチョイ 13ce-wh/5)
2016/09/04(日) 15:01:04.48 ID:+uXpWhFu0
いつsetTimeoutを使う必要があるかを考えて見ればわかると思うんだけどな(苦笑)
まずPromiseを使うときって言うのは、通常は非同期処理を行うAPIを使う時、
同期処理であればそもそもPromiseを使う必要が無い。
非同期処理を行うAPIを使うならば、非同期処理のAPIがsetTimeoutと
同じ効果をもたらすのでsetTimeoutを使うまでもなく一連のJSが
走り終わってから実行になる。
つまりsetTimeoutを使う必要があるのは、
「Promiseを返す関数の中で非同期APIを使ってない場合」に
限られるということ。
何も考えずに付け加えれば万事OKみたいに扱うものじゃない。
100 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/04(日) 15:07:54.44 ID:ysPFxgV5d
>>98 >>48でも、もし、キューが溜まってるならって言ってるし、
>>52では同じこと言ってるんだけど、
憎さのあまり読んでなかったのかな。もしくは「キュー」が何のキューなのか理解できてなかったのか。
付け加えてもなく、最初から俺はそうってるし、
「使っていない」なんて元にはないんだから、
「安全側」って言葉が出てくんだけど。
101 :
デフォルトの名無しさん (ワッチョイ 13ce-wh/5)
2016/09/04(日) 15:15:16.15 ID:+uXpWhFu0
あまり「安全側」という言葉を遣うなよ。
理由を明確に示していない「安全側」というのは
とりあえずこうしておけばうまくいくんじゃね程度の
浅い考えでしかない。
102 :
デフォルトの名無しさん (ワッチョイ 13ce-wh/5)
2016/09/04(日) 15:37:31.30 ID:+uXpWhFu0
なかなかいいサンプルを思いつかなかったが
やっと思いついた。
var p = Promise.resolve(1);
setTimeout(function() {
// 1秒も待っているので、pは確実にresolveされたPromise
console.log('start')
p.then(i => console.log(i))
console.log('end')
}, 1000);
この場合、start -> end -> 1 の順で表示される。
ChromeとFirefoxと有名なポリフィルのBlueBirdで確認した。
ここからわかるのはthenを使って呼び出されるのは必ず非同期になるということ。
つまりPromiseを作る段階でsetTimeoutが不要であるということを意味する。
世の中にはPromiseの仕様通りに動かないバグが有るブラウザやポリフィルが
存在するかもしれないが、そんなものに対応するのは「安全側」とはいわない。
問題が確実にあると分かってる場合にだけ問題に対処せよ。
もしかしたら世の中の何処かにバグが有るのでは?という可能性に対応するのであれば
for文にすらバグがあるかもしれないって話になるだろw
103 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/04(日) 17:17:34.55 ID:ysPFxgV5d
>>102 そうじゃない、何故1秒も待つのに使うものと、setImmediateと比べんのかわからん。
DOM弄って0待つ(DOM構築待ち)とか、そういうのじゃん。
getElementById("hoge").innerText=xxxxxx
setTimeout(function(){
//hogeの大きさ見たりする処理
},0)
みたいなやつ。
>>102 thenを使ったら必ず非同期になる、なんて言語仕様に書いてあるのにそういう検証してなんの意味があんのかわからん。
>>102 問題があるとわかってから対処はその通りだね。
ただ誰のどんな環境かわからん質問への返答としては、安全側としか言いよう無くない?
104 :
デフォルトの名無しさん (ワッチョイ 13ce-wh/5)
2016/09/04(日) 17:19:13.61 ID:+uXpWhFu0
> thenを使ったら必ず非同期になる、なんて言語仕様に書いてあるのにそういう検証してなんの意味があんのかわからん。
だからsetTimeoutはいらないだろ?
105 :
デフォルトの名無しさん (ワッチョイ 13ce-wh/5)
2016/09/04(日) 17:22:39.50 ID:+uXpWhFu0
> setTimeout(function(){
> //hogeの大きさ見たりする処理
> },0)
> みたいなやつ。
お前が俺が書いたコードの意図がわかってないだけ。
> ただ誰のどんな環境かわからん質問への返答としては、安全側としか言いよう無くない?
誰のどんな環境が分からないというならIE6の可能性もあるが?
なんで誰のどんな環境変わらんと言っておきながら
「Promiseが使えるが仕様通りでなく、その仕様通りでないというのは、
Promiseのthenが同期的に動くと言うバグがあること」という
自分の都合のいい環境に限定してるんだって話なんだが?
どんな環境かわからないなら、仕様通りの環境を前提にするべきだろ。
106 :
デフォルトの名無しさん (ワッチョイ 13ce-wh/5)
2016/09/04(日) 17:26:00.82 ID:+uXpWhFu0
仮にPromiseが仕様通りに動かないブラウザが有ったとして、
仕様通りに動くBluebirdを使えば、
すべてのブラウザで同じ挙動になるわけさ。
仕様外のブラウザがあることを懸念するならば、
素直にポリフィルを使ったほうが良い。
107 :
デフォルトの名無しさん (ワッチョイ a3a1-10NS)
2016/09/04(日) 18:48:47.88 ID:yHJJ2SAO0
promise実装に問題があるならコールバック地獄に書き直せば良いだけの話じゃ無いの
奇策使ってまで残す理由が分からん
108 :
◆SEdFBOkLSw (スププ Sd5f-RETc)
2016/09/04(日) 18:58:26.34 ID:ysPFxgV5d
素直に、読んでませんでしたと何故言えんのだろうか。
109 :
デフォルトの名無しさん (ワッチョイ 13ce-wh/5)
2016/09/04(日) 19:01:07.31 ID:+uXpWhFu0
110 :
デフォルトの名無しさん (ワッチョイ eb5b-wh/5)
2016/09/04(日) 19:21:57.04 ID:AXUinR+60
>>107 Promise使わないと死んじゃう病気なんだろ。
典型的な「手段と目的の混同」でしかないけど、割とどこの界隈でもいると思うが。
111 :
デフォルトの名無しさん (ワッチョイ 13ce-wh/5)
2016/09/04(日) 20:30:52.48 ID:+uXpWhFu0
>>110 これは「コールバック"地獄"」と書いてあるところから
ジョークと受け取って欲しいってことだと思ったがw
いや君が分かってやってるのなら良いんだけどさ。
112 :
デフォルトの名無しさん (ワッチョイ e33c-FA7T)
2016/09/04(日) 20:57:57.38 ID:me3Bqu020
以下のHTMLがあるんですが上のclass="a"のDIVを上のtitle内に、
下のclass="a"のDIVを下のtitle内に入れたいのですが
Jqueryでどのように書けばよいでしょうか?
どなたか教えて下さい
<div>
<div class="title"></div>
<div>
<div class="a">111</div>
</div>
</div>
<div>
<div class="title"></div>
<div>
<div class="a">222</div>
</div>
</div>
113 :
デフォルトの名無しさん (ワッチョイ 13ce-dyuG)
2016/09/04(日) 21:19:32.90 ID:XuW4/w2e0
$('.title').append(function() {
return $(this).next().find('.a');
})
114 :
デフォルトの名無しさん (ワッチョイ e33c-10NS)
2016/09/04(日) 21:47:50.25 ID:me3Bqu020
素晴らしいです
ありがとうございました!
115 :
デフォルトの名無しさん (ワッチョイ 13ce-wh/5)
2016/09/04(日) 21:48:56.32 ID:m9ZxPHXs0