トップページ⇒tech
1002コメント464KB

+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2016/08/29(月) 01:23:24.09ID:MUTWRWKo
プログラマ板の趣旨にあわせてブラウザ限定ではなくサーバーサイドJavaScriptや
トランスパイラなどの関連技術の話題も取り扱うように変わりました。

ECMAScriptの言語仕様の話題。最新ECMAScriptによるモダンな書き方、Promiseやasync/awaitを
使った非同期プログラミング。ES2015、2016、2017等の最新ECMAScriptをブラウザで今すぐ使う方法、
ビルド環境やbowerやnodeのパッケージを使う方法等、モダンなJavaScript環境についての幅広い話をしましょう。

ECMAScript対応実行環境一覧(ブラウザやbabelを含む)
http://kangax.github.io/compat-table/es5/
http://kangax.github.io/compat-table/es6/ (= es2015)
http://kangax.github.io/compat-table/es2016plus/
http://kangax.github.io/compat-table/esnext/

JavaScriptとは?
もともとMozillaの前身のNetscapeが作った言語であり本来のJavaScriptはFirefoxの実装のみです。
JavaScriptの正式な仕様名はECMAScriptです。ですが一般に使われているとおり
ChromeやEdgeで使う言語もJavaScriptとしてこのスレでは扱います。
Firefox等のJavaScript実装は最新のECMAScriptに準拠しています。

※DOMはブラウザが提供しているものでありJavaScript(ECMAScript)の範囲外です。
なのでDOMを使ったプログラミングは原則としてこのスレの対象外です。
DOMはwindowオブジェクト(ブラウザのホストオブジェクト)経由で
参照するもので、window自体、window.document、window.Workerなどです。
これに関する話題はWeb制作板の下記のスレに移動してください。

+ JavaScript & jQuery 質問用スレッド vol.7 + [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/hp/1467906819/
+ JavaScript の質問用スレッド vol.130 + [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/hp/1463395557/

前スレ + JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1468158373/
0052デフォルトの名無しさん2016/08/29(月) 23:20:28.64ID:1MLmR57m
>>48
> 同じテストなら金掛からんの?
> 全く動作変わらないの?

お前何のためにテスト書いてるんだよw

中身が変わっても(改修を行っても)正しく動くことを
証明するためにテスト書いてるんだろw
0053 ◆SEdFBOkLSw 2016/08/29(月) 23:20:35.83ID:v+VBJ2wi
>>49
違うわw
0054 ◆SEdFBOkLSw 2016/08/29(月) 23:21:40.95ID:v+VBJ2wi
>>52
改修しても、正しく動く事を目的にテストしとんのだ。
誰のなんのどの金使うんだよそれに。
0055デフォルトの名無しさん2016/08/29(月) 23:22:14.47ID:1MLmR57m
>>51
お前IE使ってるんだよな?
IEのソースコード見れないよな?

それでテストしてるんだろ?
中身が見れなくてもテストしてるんだろ?

それと同じなんだが。テストって言うのは中身の実装に対してやるもんじゃないんだよ。
中身がどうであれテストの内容は同じものになる。

だから、お前がいう
誰がどうテスト結果を研修して〜の内容も
babelを使ったときと使わないときで何も変わらない。
0056デフォルトの名無しさん2016/08/29(月) 23:22:46.60ID:BFY9f7LW
でもTypeScript便利だよね
0057デフォルトの名無しさん2016/08/29(月) 23:23:18.10ID:1MLmR57m
>>54
> 改修しても、正しく動く事を目的にテストしとんのだ。

改修しても正しく動くことを目的とした
テストが自動化されてるんだろ?

じゃあ、中身をどう変えたところで
テスト内容は何も変わらんだろ。
0058デフォルトの名無しさん2016/08/29(月) 23:25:37.41ID:BFY9f7LW
テストって何?
あの誰も読まないテスト項目書に丸付けたあと適当にモンキーテストするやつ?
それともたまにしか通らないバグコードを増やすだけのUnitTest?
0059デフォルトの名無しさん2016/08/29(月) 23:28:55.81ID:1MLmR57m
>>58
ユニット(単体)テスト+結合テスト+統合テスト
困ったことにこれらの用語と意味する内容は
会社ごとに微妙に違う。

これらすべてが自動化されていることが理想。
特にウェブアプリは、一般的にブラウザもOSも
バージョンが頻繁に上がるから、自動化されてないとやっていけない。

ここまではbabel導入とは関係ない話な。

で、自動化されてるならば、babel導入しても
テストは変わらないんだからコストも変わらんという話をしてうr。
0060 ◆SEdFBOkLSw 2016/08/29(月) 23:29:05.16ID:v+VBJ2wi
>>55
だから、
babelのバージョン上げる、babelでどうの、が全部要らなくなるよな。使わなければ。

使わないときと使ったときでは明らかに違うじゃん。
babelのバージョン上がったからテスト、が一切無いんだし。
babelのバージョン上げねばならん、も一切無い。
文化オリエントに依存して死んでった会社みたい。

>>57
「改修しても」な。要望出した客か、不具合出した会社の「改修」が金出すわな。保守費からの間接か、スポット契約ならなおさら。
babelのテスト〜納品、検収。
これ誰の持ちだし?
0061デフォルトの名無しさん2016/08/29(月) 23:30:14.67ID:1MLmR57m
>>60
> 使わないときと使ったときでは明らかに違うじゃん。

babelを使ったときと使わないときでテストの内容は変わらん。

何を言ってるんだ?
お前はどんなテストを書いてるんだ?
それがどう変わるのか言ってみろよ。
0062 ◆SEdFBOkLSw 2016/08/29(月) 23:30:21.50ID:v+VBJ2wi
>>55
ちなみに、IEがどうのというが、契約次第だよ。
0063 ◆SEdFBOkLSw 2016/08/29(月) 23:31:01.12ID:v+VBJ2wi
>>61
テストの内容じゃなくて、テストの意味と金。
0064デフォルトの名無しさん2016/08/29(月) 23:31:23.80ID:1MLmR57m
> babelのバージョン上がったからテスト、が一切無いんだし。

意味が全くわからん。

その理屈だとブラウザのバージョンが上がったらからテストだって一切ないよな?
0065 ◆SEdFBOkLSw 2016/08/29(月) 23:31:59.18ID:v+VBJ2wi
>>61
続き書いてんのに、自分が理解できない事が出てきたら読めなくなる病気にでもかかってんのかな。
0066 ◆SEdFBOkLSw 2016/08/29(月) 23:32:52.90ID:v+VBJ2wi
>>64
は?
babelのバージョン上がったからテスト、がなんで無いと思う?

使ってないからだよ。
0067デフォルトの名無しさん2016/08/29(月) 23:33:10.79ID:1MLmR57m
>>63
お前が言ってるテストって何のテストをしてるんだ?

普通は単体テストであれば、
関数に引数を与えて答えがちゃんと帰ってくるかなんだが、
そこに関数の中身がどうなってようが関係ないだろ。

単体テストじゃないならばもっと関数は関係ない。
アプリの動作が全く同じならば、中身が何で作られてようが
全く関係ない。
0068デフォルトの名無しさん2016/08/29(月) 23:33:38.78ID:BFY9f7LW
>>66
JavaScriptのバージョンが上がったらどうすんの?
0069 ◆SEdFBOkLSw 2016/08/29(月) 23:34:21.31ID:v+VBJ2wi
>>67
総合テスト。

関係あるから言ってんじゃん。
0070デフォルトの名無しさん2016/08/29(月) 23:34:21.71ID:BFY9f7LW
>>67
でもbabelで作ってたらbabelのためにbabelのテストしないとだよね?
0071デフォルトの名無しさん2016/08/29(月) 23:34:37.44ID:1MLmR57m
>>66
お前が言ってる内容は
お前にしか通じんわw


だから他の人に聞く
> babelのバージョン上がったからテスト、がなんで無いと思う?
これの意味を説明してくれ(もし理解できる人がいるならばだ)


どうせ誰も説明できないさw
それこそ意味不明である証拠だからね。
0072 ◆SEdFBOkLSw 2016/08/29(月) 23:34:55.86ID:v+VBJ2wi
>>68
上げない。
上げるときは、予算とってやるよ。
0073デフォルトの名無しさん2016/08/29(月) 23:35:11.30ID:1MLmR57m
>>70
> でもbabelで作ってたらbabelのためにbabelのテストしないとだよね?

いらない。というかそのテストの一例を書いてみてくれ。
0074デフォルトの名無しさん2016/08/29(月) 23:35:45.37ID:BFY9f7LW
>>59
そのテスト自動化されてる環境が、
今の日本にどれだけあると思ってるの?
0075デフォルトの名無しさん2016/08/29(月) 23:36:18.74ID:1MLmR57m
>>72
予算取るのかよ(爆笑)
0076デフォルトの名無しさん2016/08/29(月) 23:36:37.95ID:BFY9f7LW
>>71
じゃあおまえPHP使ってないだろうけど今すぐPHPのテストしてこいよ
0077デフォルトの名無しさん2016/08/29(月) 23:36:49.46ID:1MLmR57m
>>74
自動化されてないならば、
どうやってブラウザがバージョンアップしたときの
テストをしているのか教えてくれ。
0078デフォルトの名無しさん2016/08/29(月) 23:36:58.58ID:BFY9f7LW
>>72
銭ゲバSE
泥棒
0079 ◆SEdFBOkLSw 2016/08/29(月) 23:37:57.57ID:v+VBJ2wi
>>71
次の行に書いてんのになぁ。

あるネジのあるロットに不備があるから、そのネジ使ってる製品全部リコール、
の、リコール対象って、ネジ使ってる製品だけじゃん。
0080デフォルトの名無しさん2016/08/29(月) 23:38:08.25ID:BFY9f7LW
>>77
みんなで手と手を取り合って愛と根性でテストするんだよ
日本の伝統文化だよ、ゲイシャフジヤマニンゲツ
0081デフォルトの名無しさん2016/08/29(月) 23:38:36.70ID:BFY9f7LW
>>75
誰の金で飯食えてると思ってるんだ、クソニートが
0082デフォルトの名無しさん2016/08/29(月) 23:38:38.48ID:1MLmR57m
>>79 >>80
なら、そのぽちぽちとやる人海戦術のテストの前に
babelを導入すれば、テストは一回ですみますよねw
0083デフォルトの名無しさん2016/08/29(月) 23:39:55.78ID:BFY9f7LW
>>82
バベルのバージョンが上がったらどうすんの?
0084 ◆SEdFBOkLSw 2016/08/29(月) 23:40:18.43ID:v+VBJ2wi
>>75
取るわwだれがタダで働くかww
>>78
なんとでも言えwその代わり出した金の分はきっちり二次請けがどう泣こうが品質保証する。盲判でリリースしてないから安心して金出してくれ。
0085デフォルトの名無しさん2016/08/29(月) 23:41:35.61ID:BFY9f7LW
>>84
跋扈の範囲内なのに・・・
0086デフォルトの名無しさん2016/08/29(月) 23:42:40.99ID:BFY9f7LW
>>73
No 内容             期待値
1 テストデータを用意する。   正常に購入完了できること。

はいどうぞ
0087 ◆SEdFBOkLSw 2016/08/29(月) 23:47:14.95ID:v+VBJ2wi
>>86
最悪のテスト。
テストに「正常」と言う言葉を使って、「正常となる」とテストすんなバカ。
何がどう正常かを定義してその通りだと確認すんのがテストだよ。
0088デフォルトの名無しさん2016/08/29(月) 23:47:42.65ID:BFY9f7LW
糞社畜ども
そろそろ寝る時間だよ
明日は交通機関が止まる可能性があるんだから1h前に家を出るんだよ
台風程度で遅刻する社会不適合者のゴミ屑は上司のウンコ喰って死ぬのが
この国の伝統文化だからね
0089デフォルトの名無しさん2016/08/29(月) 23:49:15.00ID:BFY9f7LW
>>87
自分で考えろ、ガキじゃないんだから
適切なデータを用意して、正常に動作することを保証するんだよ
行間を嫁って小学校の国語の授業で習わなかったのか?
そんなの上司に質問したら張り手もんだぞ
0090 ◆SEdFBOkLSw 2016/08/29(月) 23:49:20.25ID:v+VBJ2wi
>>88
さすがに1hくらい時差出勤しなよ…
コアタイムには間に合うだろ。
0091デフォルトの名無しさん2016/08/29(月) 23:51:15.79ID:BFY9f7LW
>>90
コアタイム9-18時
1時間前に出社して社屋の清掃
その1時間前に余裕を持って出社する
0092デフォルトの名無しさん2016/08/29(月) 23:54:05.50ID:BFY9f7LW
君たちにはアジャイル力が圧倒的に足りない
細かい言葉の違いなんかしょうもないことを気にせずテストは気楽に
ドキュメントは書いてはいけない
0093デフォルトの名無しさん2016/08/29(月) 23:56:37.04ID:BFY9f7LW
俺の貴重な夜が糞バカどもとの糞バカみたいなレスの欧州で終わった
損害賠償もんですわ
0094 ◆SEdFBOkLSw 2016/08/29(月) 23:59:07.49ID:v+VBJ2wi
>>93
楽しかったよ。
でもお前酔ってるだろw
0095デフォルトの名無しさん2016/08/29(月) 23:59:13.57ID:BFY9f7LW
aaaaaaaaaaaa今日がおわるうううううううううううううuuuuuuuuuu
0096 ◆SEdFBOkLSw 2016/08/30(火) 00:00:49.86ID:aQC/u3Rc
瑕疵の範囲かと思って、よく見たら跋扈の範囲だったのが面白かったわ。
反復横飛びじゃねえよ。
0097デフォルトの名無しさん2016/08/30(火) 00:08:00.53ID:vxcmsfn4
世界広と言えども、jsでここまでしょーもない話題で盛り上がれるスレはここしかないと思う
0098デフォルトの名無しさん2016/08/30(火) 00:44:53.70ID:h5DGk6QO
本スレから分かれたのは何故?
明らかに主題と離れているから?
それとも、ワッチョイがコワいから?
0099 ◆SEdFBOkLSw 2016/08/30(火) 01:11:41.90ID:aQC/u3Rc
>>98
俺が立てたから気に食わんのだろう。
雑談スレにすれば?
ブラウザとは全く関係のない、そして、古いJavaScriptではなく本人曰く、唯一無二の最新のJavaScriptの質問が来るまで。
0100デフォルトの名無しさん2016/08/30(火) 09:36:39.00ID:JoG6iYvQ
>>98
プログラマ板の趣旨からは外れているからですね。

掲示板にこのように書かれています。
http://echo.2ch.net/tech/
> プログラム・ソフトの使い方はパソコン初心者板やソフトウェア板へ。
> ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
> Javascript はweb制作管理板、CGI はWEBプログラミング板へ。
> 業界談義、愚痴はプログラマー板へどうぞ。

JavaScriptは本来Web制作管理板なんですよ。
だからブラウザ専用の話がしたいならそっちでやるべき。

だけど、これが書かれたのはJavaScriptがブラウザでしか動かなかった時代の話で、
サーバーサイドJavaScriptがWeb制作管理板とは思えない。
なのでこちらは純粋に言語の話と普通のコンパイラ言語のように
ビルド周りの話に切り分けるべきでしょう。

その話をWeb制作管理板でやるのは荷が重すぎますからね。
あちらはウェブデザイナーに毛が生えたようなレベルですから。
0101デフォルトの名無しさん2016/08/30(火) 10:31:44.92ID:rnePWv6a
ビルド周りの話?
まあそれもいいかもしれんがECMAScriptとスレタイにつけた限りは
過去のESスレのように仕様周りの話も期待させてもらうぞ。

どのみち、このスレはあまり業務向けではないな。
0102 ◆SEdFBOkLSw 2016/08/30(火) 11:56:39.50ID:7P5106vD
>>100
ビルド周りがわからんなぁ。
ES5で書いてても、node動いてるならム板でいいんじゃねえの?逆に。
ビルドするか、せずに使うかは好き好きだし。

ビルドするならブラウザの話もしても良いみたいな論調に聞こえるなぁ。

「純粋に言語の話」と「普通のコンパイラ言語」がビルドで別れてるわけでもあるまいて。
ビルドする処理系も、しない処理系も、しないけどJITな処理系もあるんだし。言語自体も、コンパイラとは全く関係ないじゃん。

「バベる話は含みます」と言いたい事言えばいいのに。
0103デフォルトの名無しさん2016/08/30(火) 18:30:50.76ID:rnePWv6a
別に明確な線引は必要ない。
整理しなきゃならないほどレス多くないんだから。
あくまで目安よ。目安。
0104デフォルトの名無しさん2016/08/30(火) 21:24:04.22ID:vxcmsfn4
>>102
でもおまえbabelアンチじゃん?
0105デフォルトの名無しさん2016/08/30(火) 21:55:39.79ID:JoG6iYvQ
>>102
> ES5で書いてても、node動いてるならム板でいいんじゃねえの?逆に。
> ビルドするか、せずに使うかは好き好きだし。
そう書いたつもりですけど?

> 「バベる話は含みます」と言いたい事言えばいいのに。
babel語なんてものは存在しない。っていうかもしかして知らないの?
babelでトランスパイルするように書いたコードにbabel専用の特別な命令なんかない。
最新のブラウザであればそのまま動くコード。

> 言語自体も、コンパイラとは全く関係ないじゃん。
あんたが言ったとおり。言語自体はトランスパイラ(babel)とは全く関係ない。

JavaScrpt(=ECMAScript)の部分はブラウザでもnodeでも同じように動く。
nodeで動かないのはDOMの部分だけ。DOMの部分というのは
windowホストオブジェクト経由で参照するもの。

そもそもJavaScriptはプログラム言語なのだから、この板対応だと思うが、
なぜかム板のルールでWeb制作版に追いやられてる。
(昔はウェブ専用の簡易スクリプトでしかなかったからだと思うが)

俺としてはJavaScriptの話をム板でやるのは問題ないと思うが、
Web制作版にもJavaScriptスレは必要というのなら、
DOM関連の話をWeb制作版に持っていこうという話。
0106デフォルトの名無しさん2016/08/30(火) 22:46:30.57ID:rnePWv6a
DOMっていうくくりが適切かは分からんけどな。
昔はDOMだったPromiseみたいにWebと関係ない独立したAPIも多いしね。
ブラウザだってWebサイトを回覧するためのものだけではなくなってて
Web自体がプラットフォーム化してる今APIで区切っても仕方ない。
0107デフォルトの名無しさん2016/08/30(火) 22:49:09.04ID:JoG6iYvQ
> 昔はDOMだったPromiseみたいに
昔からPromiseはDOMじゃないよ。
0108デフォルトの名無しさん2016/08/30(火) 22:56:53.51ID:JoG6iYvQ
そんな話聞いたこと無いので、昔のPromiseがどれのことを
指しているか知らんけど、

PromiseがJavaScriptの世界に提唱された初期の文書は
これなんだがURLからもわかるとおりCommonJSから生まれた
http://wiki.commonjs.org/wiki/Promises

CommonJSっていうのはサーバーサイドJavaScript
0109デフォルトの名無しさん2016/08/30(火) 23:29:26.97ID:rnePWv6a
DOM Promiseも歴史も知らんのか。
勉強しなおしてきなさい。
0110 ◆SEdFBOkLSw 2016/08/31(水) 00:33:00.02ID:hBi44Zvn
>>104
アンチでもないよ。
あれは処理系として数えたいだけ。
ただのAltJS。

>>105
専用の命令でもあるし、汎用の命令でもあるよ。
解釈のされ方の問題だってば。

問題ないと思うが、と思うなら変な応酬も復讐まがいのこともせんと、受け入れれば良いんじゃねえの?
勝ち負けにこだわる人だこと。

>>109
こいつその辺の話知らんよ。
そもそも大体殆どのものが借用語みたいな言語だって事も理解してない。
JavaScriptとは関数が一級市民で、って話も、いつぞやドヤ顔でしてたけど、
原始再帰関数もリストも知らん、lispもerlangも見たことないカスだから。
0111デフォルトの名無しさん2016/08/31(水) 01:42:04.32ID:mbRHTL3V
>>109
それは標準化されてない
0112デフォルトの名無しさん2016/08/31(水) 01:44:35.04ID:mbRHTL3V
しかもFutureという名前

http://www.html5rocks.com/ja/tutorials/es6/promises/
> JavaScript Promise は、最初 "Future" という名前で DOM の一部として実装されていたのが、
> 後に "Promise" と改名されて、最終的に JavaScript の一部として実装されました。
0113 ◆SEdFBOkLSw 2016/08/31(水) 02:01:42.67ID:hBi44Zvn
>>112
最初、と、最終的に、の間に何があったと思ってるんだろう。
0114デフォルトの名無しさん2016/08/31(水) 08:18:41.23ID:j/FYmeM2
>>112
すまんな。俺が最初に>>106で要らんちょっかい書けたのが悪かった。
もう事実に関係なく意味のない、相手の意見をどうにか覆すためだけの
単なる言葉の掛け合い合戦になってるのは分かるだろう?
ここらで終わりにしようや。
0115デフォルトの名無しさん2016/08/31(水) 09:31:50.57ID:mxX4GOAr
どもまだ◆SEdFBOkLSwが納得してないようだが、

これが初期のJavaScript1.1という仕様書
http://www.planetpdf.com/codecuts/pdfs/tutorial/jsspec.pdf
この段階からDOMはJavaScriptという言語の中に入ってなかったんだよ。

それは今も変わらずで、DOMはJavaScriptの仕様の範囲に入ってないから
ブラウザがDOMを作成して、それをJavaScriptの環境から参照できるようにしている。
これがブラウザでない場合はDOMはではなく、別のものになる。

◆SEdFBOkLSwはどうも曲解してこれを認めないから聞くだけ無駄だが、
この話が違うって言いたい人いる?
0116デフォルトの名無しさん2016/08/31(水) 12:36:42.81ID:05Cg2vNV
すみません
親クラスのプロパティを子クラスと共有する方法は何か無いでしょうか
0117デフォルトの名無しさん2016/08/31(水) 17:46:15.73ID:j/FYmeM2
具体的にどうぞ。
普通に考えて継承関係にあるなら共有されてるじゃん。
0118デフォルトの名無しさん2016/09/01(木) 01:28:37.64ID:G09cpOvF
すごい、こんな実用的なjavascriptの使い方を始めて見た

comic loスレより転載

パス:sage
ttp://www1.axfc.net/u/3712796
0119デフォルトの名無しさん2016/09/01(木) 01:31:37.14ID:qZMo0Rlk
>>116
具体的なコードを書いてくれないと意味がわからない。

例えばこれはMDNから持ってきたサンプルだが、
親クラス(Animal)のプロパティ(name)を子クラスと共有している。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Classes

class Animal {
 constructor(name) {
  this.name = name;
 }

 speak() {
  console.log(this.name + ' makes a noise.');
 }
}

class Dog extends Animal {
 speak() {
  console.log(this.name + ' barks.');
 }
}
0120 ◆SEdFBOkLSw 2016/09/01(木) 07:33:51.65ID:yxBt3oxw
>>115
なんでこう、曲解に曲解を重ねたり、
俺が納得するしないにこだわんのかね。

間違ってる部分が1ミリでもあるうちは、納得しないに決まってんじゃんねえ。
納得させたいのか、勝ちたいのか、認めさせたいのか、

自分の知識が不安なのかはっきりしろよ。
0121デフォルトの名無しさん2016/09/01(木) 08:56:57.32ID:+FVjZRJv
>>120
お前に聞いてねーよw

ほれ見ろ、誰ひとりとして俺が言ってることが
間違ってるとは言ってないじゃないかw
0122デフォルトの名無しさん2016/09/01(木) 09:30:51.00ID:+FVjZRJv
ちなみに>>119はChromeやFirefoxやEdgeで動く
適切なJavaScript(≒ECMAScript)コードであるが、
babelを使って古いIEなどで動かすことができる。

重要なのはこれをbabelで変換するからと言って
babel専用の構文ではない。
0123デフォルトの名無しさん2016/09/01(木) 09:32:58.55ID:+FVjZRJv
◆SEはそれを分かってないんだと思う。

おそらく、babel専用の共通の文法から
新しいブラウザ向けにclassに変換 or 古いブラウザ向けにfunctionに
変換するんだと思っているんだろうね。

AltJSはたしかにそれに近いが、babelは
新しいブラウザ向けの構文を変換するので
babel専用の文法なんてものは存在しない。
0124デフォルトの名無しさん2016/09/01(木) 09:51:14.48ID:5kBL1onl
BabelHelperとかいうクソみたいな関数が自動生成されるのは俺の目の錯覚だったか
0125 ◆SEdFBOkLSw 2016/09/01(木) 11:24:18.20ID:4NaaelJA
>>123
わかってるって(笑)
専用の文法とも、専用の言語とも言ってないだろ。

ただ、babelで使うために書いたのであれば、
FireFoxで使うために書いたコードがFireFox向けに書いたコードであるのと同様に
babelで使うために書いたコードは、babel向けに書いたコードであって、ネイティブなFireFoxの為に書いたコードとは意味合いが違うって言ってんじゃん。
webpackも同じ。

専用では無いよ、babelの為に書いたコードだってば。
そういう意味で、ほかのaltJS用のコンパイラに対して書いた言語と「立ち位置」が同じなの。
0126デフォルトの名無しさん2016/09/01(木) 19:58:52.56ID:+FVjZRJv
> ただ、babelで使うために書いたのであれば、

だから、そんなのが存在しない。
babelの存在は忘れろ。

ES6で書いてるだけだ。


知ってるか?ブラウザ内部でES6は
ネイティブコードに変換されてるんだぞ?
0127デフォルトの名無しさん2016/09/01(木) 20:00:45.39ID:+FVjZRJv
>>125
もしかしてクロスブラウザの開発をやってないの?

まさか、Firefox向けのコード、IE向けのコード
Chrome向けのコードって、完全にファイルが違うのか?
0128デフォルトの名無しさん2016/09/01(木) 20:01:38.52ID:+FVjZRJv
> FireFoxで使うために書いたコードがFireFox向けに書いたコードであるのと同様に
> babelで使うために書いたコードは、babel向けに書いたコードであって

この理屈だと、FirefoxもaltJSと立ち位置が同じってことになるが?
0129デフォルトの名無しさん2016/09/01(木) 20:04:32.89ID:6CqO2Avn
誘導されてきました。

promiseのチェーンをn個動的につなげたいときはどうしたらいいの?

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個にしたい
0130デフォルトの名無しさん2016/09/01(木) 20:11:11.58ID:np9Y5BfB
>>129
ネットでググるとreduceを使った例がよく出てくるけど、
forを使った例の方がわかりやすいと思う。

// 初期値として解決済みのpromiseを入れておく、
// これはthenメソッドを使えるようにするため。
var p = Promise.resolve();

for (var i = 0; i < 10; i++) {
 p = p.then(function() {
  return a[i]();
 });
}

// ES6版
for (let i = 0; i < 10; i++) {
 p = p.then(() => a[i]());
}

ようするにp変数に入っているpromiseに対してthenを実行して作った
新たなpromiseにどんどん入れ替えていけばいい。
reduceを使ったコードはこれを単に書き換えただけ。
0131デフォルトの名無しさん2016/09/01(木) 20:14:21.32ID:Wbd9Msfr
>>125
> FireFoxで使うために書いたコードがFireFox向けに書いたコードであるのと同様に
> babelで使うために書いたコードは、babel向けに書いたコードであって

babelというブラウザがあるわけじゃないんだけど?

Firefoxで使うために書いた(babelで変換する)Firefox向けのコードならあるよ。
でもbabelで使うために書いたコードなんてものはない。
babelは変換しかしないわけで、そのコードを使うのはFirefoxやChromeやIE。

そこをあんたは勘違いしてるんじゃない?
0132デフォルトの名無しさん2016/09/01(木) 20:24:24.66ID:gqH8EeeU
あ、なるほどw

◆SEdFBOkLSw は babelというブラウザの上で
実行するって勘違いしてるんだw

もしくはbabelとnodeを勘違いしてるとかだな。
0133デフォルトの名無しさん2016/09/01(木) 20:34:43.59ID:scPPFiSF
>>125
> babelで使うために書いたコードは、babel向けに書いたコードであって、ネイティブなFireFoxの為に書いたコードとは意味合いが違うって言ってんじゃん。

これがbabelで使うために書いたコード

 let func = () => console.log('hello');

これがネイティブなFirefoxのために書いたコード

 let func = () => console.log('hello');

何が違うのか教えてほしい。
0134デフォルトの名無しさん2016/09/01(木) 21:48:08.46ID:scPPFiSF
意味合いが違うとは言ってるが
どう違うかは何も言ってない。
0135 ◆SEdFBOkLSw 2016/09/01(木) 22:01:56.97ID:x5Fi8ahc
>>126
アホか。

>>127
完全には違わんよ。
多少は足周りは違うな。

>>128
頭おかしいのか?

>>132
違うわ。お前が理解なさすぎ。

>>133
処理系が違う、だな。
babelで処理したJSが実際に動かすのは、下記コードで、ES6ではない。

'use strict';

var func = function func() {
return console.log('hello');
};

匿名関数で無くなってるよね。
0136デフォルトの名無しさん2016/09/01(木) 22:05:27.31ID:scPPFiSF
>>135

これがbabelで変換して出力されたコード
'use strict';

var func = function func() {
return console.log('hello');
};


これがネイティブなFirefoxのために書いたコード
'use strict';

var func = function func() {
return console.log('hello');
};


何が違うのか?
0137デフォルトの名無しさん2016/09/01(木) 22:12:28.00ID:scPPFiSF
もしかしてさ、テストを書いてリファクタリングして
よりシンプルに書き直して、以前と全く同じように動くコードなのに、
元のコードとは記述が違うから、そういう修正はするなって言うタイプの人なの?
0138 ◆SEdFBOkLSw 2016/09/01(木) 22:16:55.85ID:x5Fi8ahc
>>136
それES6じゃないじゃん。正確にはES6でもあり、お前が否定していた古いJavaScriptじゃんww

$msg='hello world';
echo $msg;

が、perlなのかphpなのかは、どっちに食わすかによって決まるんじゃねえの?
何か違うか?見た目も動作も同じだけど、別物だよね。

>>137
手弁当で全部終わらせるんならいいんじゃねーの?
予算使うなら、余計なことすんなって言うけど。
0139デフォルトの名無しさん2016/09/01(木) 22:19:19.19ID:scPPFiSF
>>138
古いJavaScriptだからなの?

babelで変換した結果とFirefoxがネイティブで動かすコードは
全く一緒なのに何が問題なの?って聞いてる。


重要なのは同じように動くこと(仕様を満たしていること)であって
中身の実装なんてどうでもいいでしょw
0140デフォルトの名無しさん2016/09/01(木) 22:20:42.89ID:scPPFiSF
>>138
> が、perlなのかphpなのかは、どっちに食わすかによって決まるんじゃねえの?
> 何か違うか?見た目も動作も同じだけど、別物だよね。


どちらもFirefoxに食わせていますよw
babelで動かすんじゃなくて
babelで変換したコードをFirefoxで動かすか、
babelで変換しないコードをFirefoxで動かすかって
話をしてるんだから。
0141デフォルトの名無しさん2016/09/01(木) 22:27:03.04ID:scPPFiSF
>>138
お前が何を不安がっているのかわかったわw


前提条件: どちらも同じブラウザFirefoxで動かします。

1. ES6のコードをそのままFirefoxで動かす
(※ES6のコードのテストの結果は当然問題ない)

2. ES6のコードをbabelで変換してESにしたコードをFirefoxで動かす
(※ES5のコードのテストの結果は当然問題ない)


どちらもテストでOKとでてるのに、もしかしたら
バグがあるんじゃないか?って思ってるだろw
0142デフォルトの名無しさん2016/09/01(木) 22:40:53.56ID:UGSC1Nbq
美しいソースを志すプログラマからしたら自動生成には美学をまるで感じない
男なら黙ってprototype
不便に堪えて手書きでNative JavaScript

という冗談はともかく、納品するスクリプトはクライアントが使うんだから変な書き方も最新の玩具も使わずにネイティブのみで分かりやすくコメント添えながら書くのが普通じゃないのか?
0143デフォルトの名無しさん2016/09/01(木) 22:40:55.87ID:Yfa1ihki
babelがたまたま実行結果が読めるというだけで
ブラウザみたいな巨大なブラックボックスと区別する意味がよく分からん
0144デフォルトの名無しさん2016/09/01(木) 22:46:12.95ID:scPPFiSF
>>142
ネイティブかどうかは重要じゃない。

正しく動くことが重要。
そのためにテストをするんだよ。
0145デフォルトの名無しさん2016/09/01(木) 22:50:05.31ID:scPPFiSF
>>143
だよね。例えば内部でES6をES5に変換してから
実行するブラウザがあったっておかしくない。

そもそもJavaScriptなんてコンパイルして
バイナリにてから動かしているわけで、
そのバイナリなんてブラウザが違ったら違うだろうし、
同じブラウザでもバージョンアップしたら違う可能性もある。

どういう変換が行われて実行されるかは大した問題じゃない。
仕様通りに動いているかが重要。
0146 ◆SEdFBOkLSw 2016/09/01(木) 23:09:24.58ID:x5Fi8ahc
>>141
全然わかってねえじゃん。
0147デフォルトの名無しさん2016/09/01(木) 23:15:55.41ID:scPPFiSF
>>146
ん?ってことは、

ES6をbabelで変換してFirefoxで動かすのと
ES6をそのままFirefoxで動かすのは
全く同じだってことでいいかい?

はい か いいえ で答えてくれ。
0148デフォルトの名無しさん2016/09/01(木) 23:21:14.21ID:uGmloWI1
>>122
細かい話だけど、extendsは古いブラウザでは完全にエミュレートされないよ。
extendsはprototypeだけでなくstaticなメソッドも継承する。
つまり、任意のプロトタイプを持つコンストラクタを作れないと行けないのだけど、
これはES2015以前ではブラウザの独自実装の__proto__を使わないと実現できない。
0149デフォルトの名無しさん2016/09/01(木) 23:25:45.46ID:scPPFiSF
>>148
完全にエミュレートできないことでバグになることはなく、
エミュレートできない機能を使っていればバグになる。
でも、それを含めてテストするわけだからね。
動かないならテストで分かる。

ブラウザ間の互換性がない問題と同じよ。
互換性がない部分があっても、テストで動けば問題ない。
0150デフォルトの名無しさん2016/09/02(金) 00:00:38.90ID:OcKaQeg4
>>149
客「IE8で動かないんだけど?」
0151デフォルトの名無しさん2016/09/02(金) 00:01:45.81ID:gFIXdWf6
>>150
IE8でテストしろよw
■ このスレッドは過去ログ倉庫に格納されています