[過去ログ] + JavaScript の質問用スレッド vol.122 + [無断転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
86
(1): ◆SEdFBOkLSw (アウアウ Sacf-RETc) 2016/09/03(土)21:12 ID:YIu9WVDua(2/2) AAS
>>84
しがみついてるわけではなくて、要件定義で絞れるならネイティブにそう書くよ。
ポリフィル使う意味もあんまないと思うわ。
それなら、ライブラリ作ったほうが余程建設的だと思う。
ライブラリ自体の実装を、どれ用、で分ける事はあるだろうけど、面は同じにしとくよ。
87
(1): (オッペケ Sr8f-RETc) 2016/09/04(日)12:32 ID:chJ34NF3r(1/3) AAS
>>86
例えば、ES3、IE8対応の自作ライブラリを永続的に使うとしよう
ライブラリ依存から抜け出さないし、ES7→ES8と機能が増えていく度にES5,6,7,8を全て自作ライブラリで担当するのでライブラリの負担は増えていく
社内チームで作っていくなら自作ライブラリを更新する度に制作したあなた以外の人に教えるコストがかかる
ドキュメントも作る必要があるだろうし、後に入社する新人は膨大な自作ライブラリを覚えなければならない
あなたのスタンスは自分一人で作って自分一人で保守している感覚なんだよな…

で、setTimeoutのコードはスルーするんだな
88
(1): (オッペケ Sr8f-RETc) 2016/09/04(日)12:39 ID:chJ34NF3r(2/3) AAS
>>82
前半3行は意味が分からんのだが、「中身」とは何を指してるんだ?

> 動きが全く一緒だけど、それはbabel用の言語(?)だって言い張ってるw
Babelは可能な限りES6に似せてトランスコンパイルするが、同じではないと思うぞ
Polyfill可能な機能は大部分を同じに出来るが、構文が異なる機能を完全に同じにするのは難しい
トランスコンパイルされたコードを想定して書くのはおかしなことではないかと
89
(1): (オッペケ Sr8f-RETc) 2016/09/04(日)12:46 ID:chJ34NF3r(3/3) AAS
>>85
俺に何を説明したいのかよくわからんが、>>84で書いたようにsetTimeoutがPromiseの代替にならないのは理解している
Promiseはコールバックで非同期処理完了を検知するわけだが、Promiseを使わなくともコールバックで完了を検知するしかない
だから、自作ライブラリで実装するならコールバックを管理する形になるはずでそこにsetTimeoutの出番はない
少なくとも、発端となった>>23-24にsetTimeoutを勧める理由はないはずだ
90
(1): (ワッチョイ efce-wh/5) 2016/09/04(日)13:03 ID:EwnjeGwb0(1/3) AAS
>>88
> Babelは可能な限りES6に似せてトランスコンパイルするが、同じではないと思うぞ
同じものと、不完全なものの二通りある。
ポリフィル用語では前者はshim、後者はshamと呼ばれているものだよ。

> 構文が異なる機能を完全に同じにするのは難しい
babelは構文を置き換えるのだから、構文の違いはまったく関係ない。
完全に同じにできない理由は、JavaScriptの内部の機能に依存するから。

同じゃない部分っていうのは動きが違うわけじゃなくて一部が実装されてない(できない)
だから動く部分に関しては完全に同じだよ。

> トランスコンパイルされたコードを想定して書くのはおかしなことではないかと
省9
91: (ワッチョイ efce-wh/5) 2016/09/04(日)13:19 ID:EwnjeGwb0(2/3) AAS
> Babelは可能な限りES6に似せてトランスコンパイルするが、同じではないと思うぞ

ここは完全に間違ってるから訂正w

babelはES6に対応していないブラウザで実行できるように、
ES6のコードを可能な限りES5のコードに変換するもの
他の言語からES6やES5のコードに変換するわけじゃない。
92
(1): ◆SEdFBOkLSw (スププ Sd5f-RETc) 2016/09/04(日)13:35 ID:ysPFxgV5d(1/7) AAS
>>87
前半はわりとそうかな。
アーキとしてチームで作るし、教育もドキュメンテーションもするし、規約もQAも書くよ。
一人じゃ無いよ(笑)どんな会社だよそれ。。

setTimeout解決してない?なんか誤読してるのかもしれないし、何がひっかかってるの?

>>89
うん、そういう意図では使わんのだが。本来のコードに勧めてるわけでもない。
何故二人が、あってもいいって発想で、お前だけ絶対に無しだって発想なのか、どこが差なんだろ。
93
(1): ◆SEdFBOkLSw (スププ Sd5f-RETc) 2016/09/04(日)13:38 ID:ysPFxgV5d(2/7) AAS
>>90
関係あるんじゃ?構文の違い。
確か、いくつかが言語仕様上変換しようがないから、
意味合いの変わるコードになるよ、一般解においては結果は同じだけど、とテヘペロしてたような。
またリポジトリ見てくるか。
94
(1): (ワッチョイ efce-wh/5) 2016/09/04(日)13:58 ID:EwnjeGwb0(3/3) AAS
>>93
質問していい?

babelで変換したコードはリポジトリに入れたり
変換したコードは必要ない限り見たりテキストエディタで
修正したりしないんだけどそれはわかってる?
95
(1): (ワッチョイ 13ce-wh/5) 2016/09/04(日)14:27 ID:+uXpWhFu0(1/10) AAS
>>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)
省9
96
(1): ◆SEdFBOkLSw (スププ Sd5f-RETc) 2016/09/04(日)14:44 ID:ysPFxgV5d(3/7) AAS
>>94
うん、同じコンパイラが確保できること、納品としてbabelかけたあとのものを納品しない、が前提であれば、わかってるけどそれがなにか?
>>95
知ってるよ。
中で、一連のJSが走り終わってから走ってほしいという意図で、setTimeoutやら、setImmediateを使われていたら、
こちらはその意図に合わせて、非同期に呼んだらないとね、って話で、だからこそレベル低いポリフィル引き合いに出して、ネイティブなら、って言ったんだけど。
97: ◆SEdFBOkLSw (スププ Sd5f-RETc) 2016/09/04(日)14:48 ID:ysPFxgV5d(4/7) AAS
理由が理解できてないだけだったか…
98
(1): (ワッチョイ 13ce-wh/5) 2016/09/04(日)14:51 ID:+uXpWhFu0(2/10) AAS
>>96
> 中で、一連のJSが走り終わってから走ってほしいという意図で、setTimeoutやら、setImmediateを使われていたら、

そんな話全くしてないよね?
何先走ってるのさw
99: (ワッチョイ 13ce-wh/5) 2016/09/04(日)15:01 ID:+uXpWhFu0(3/10) AAS
いつsetTimeoutを使う必要があるかを考えて見ればわかると思うんだけどな(苦笑)

まずPromiseを使うときって言うのは、通常は非同期処理を行うAPIを使う時、
同期処理であればそもそもPromiseを使う必要が無い。

非同期処理を行うAPIを使うならば、非同期処理のAPIがsetTimeoutと
同じ効果をもたらすのでsetTimeoutを使うまでもなく一連のJSが
走り終わってから実行になる。

つまりsetTimeoutを使う必要があるのは、
「Promiseを返す関数の中で非同期APIを使ってない場合」に
限られるということ。

何も考えずに付け加えれば万事OKみたいに扱うものじゃない。
100: ◆SEdFBOkLSw (スププ Sd5f-RETc) 2016/09/04(日)15:07 ID:ysPFxgV5d(5/7) AAS
>>98
>>48でも、もし、キューが溜まってるならって言ってるし、
>>52では同じこと言ってるんだけど、
憎さのあまり読んでなかったのかな。もしくは「キュー」が何のキューなのか理解できてなかったのか。

付け加えてもなく、最初から俺はそうってるし、
「使っていない」なんて元にはないんだから、
「安全側」って言葉が出てくんだけど。
101: (ワッチョイ 13ce-wh/5) 2016/09/04(日)15:15 ID:+uXpWhFu0(4/10) AAS
あまり「安全側」という言葉を遣うなよ。

理由を明確に示していない「安全側」というのは
とりあえずこうしておけばうまくいくんじゃね程度の
浅い考えでしかない。
102
(1): (ワッチョイ 13ce-wh/5) 2016/09/04(日)15:37 ID:+uXpWhFu0(5/10) AAS
なかなかいいサンプルを思いつかなかったが
やっと思いついた。

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 の順で表示される。
省8
103: ◆SEdFBOkLSw (スププ Sd5f-RETc) 2016/09/04(日)17:17 ID:ysPFxgV5d(6/7) AAS
>>102
そうじゃない、何故1秒も待つのに使うものと、setImmediateと比べんのかわからん。
DOM弄って0待つ(DOM構築待ち)とか、そういうのじゃん。
getElementById("hoge").innerText=xxxxxx
setTimeout(function(){
//hogeの大きさ見たりする処理
},0)
みたいなやつ。

>>102
thenを使ったら必ず非同期になる、なんて言語仕様に書いてあるのにそういう検証してなんの意味があんのかわからん。
省3
104: (ワッチョイ 13ce-wh/5) 2016/09/04(日)17:19 ID:+uXpWhFu0(6/10) AAS
> thenを使ったら必ず非同期になる、なんて言語仕様に書いてあるのにそういう検証してなんの意味があんのかわからん。

だからsetTimeoutはいらないだろ?
105
(1): (ワッチョイ 13ce-wh/5) 2016/09/04(日)17:22 ID:+uXpWhFu0(7/10) AAS
> setTimeout(function(){
> //hogeの大きさ見たりする処理
> },0)
> みたいなやつ。
お前が俺が書いたコードの意図がわかってないだけ。

> ただ誰のどんな環境かわからん質問への返答としては、安全側としか言いよう無くない?

誰のどんな環境が分からないというならIE6の可能性もあるが?

なんで誰のどんな環境変わらんと言っておきながら
「Promiseが使えるが仕様通りでなく、その仕様通りでないというのは、
Promiseのthenが同期的に動くと言うバグがあること」という
省2
1-
あと 897 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.013s