1 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 05:16:18.29 ] 《ECMAScriptを語るスレ》 1. - 概要 - ECMA-262規格として知られる言語(通称 ECMAScript)についての利用法や言語仕様、 その他四方山話をするスレです。 Standard ECMA-262 ECMAScript Language Specification Edition 5.1 (June 2011) 標準規格(英語) www.ecma-international.org/publications/standards/Ecma-262.htm Annotated ECMAScript 5.1 es5.github.com/ Draft Specification for ES.next (Ecma-262 Edition 6) wiki.ecmascript.org/doku.php?id=harmony:specification_drafts Under Translation of ECMA-262 3rd Edition (日本語訳) www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/ ■前スレ ECMAScript デス 3 toro.2ch.net/test/read.cgi/tech/1190160481/ ■過去スレ JavaScript デス pc5.2ch.net/test/read.cgi/tech/1052273054/ ECMAScript デス 2 pc11.2ch.net/test/read.cgi/tech/1088298991/
447 名前:デフォルトの名無しさん mailto:sage [2013/11/17(日) 15:42:20.11 ] Dartのcascade演算子JSにも欲しいなあ obj..a = 1 ..b = 2 ..c = 3 ↓ obj.a = 1, obj.b = 2, obj.c = 3 or Object.mixin(obj, { a: 1, b: 2, c: 3 })
448 名前:デフォルトの名無しさん mailto:sage [2013/11/18(月) 21:00:01.72 ] いよいよ始まるというのにこの過疎りようは悲しい……
449 名前:デフォルトの名無しさん [2013/11/19(火) 19:24:22.27 ] 今が一番盛り上がる時期なのにな
450 名前:デフォルトの名無しさん mailto:sage [2013/11/19(火) 22:43:24.98 ] >>447 VBのWithステートメントに似ているな。 With Label .Height = 2000 .Width = 2000 .Caption = "Label" End With JavaScriptのwithはピリオドが要らないという失敗をしてしまった。 with(label) { height = 2000 width = 2000 caption = "Label" } たったこれだけのことだが、heightはlabel.heightなのか withの外にあるheightなのか見た目でわからない上に、 label.heightが存在すればlabel.heightに、存在しなければwithの外のheightに 書き込むというだめだこりゃ的な動きをしてしまう。
451 名前:デフォルトの名無しさん mailto:sage [2013/11/20(水) 01:28:33.20 ] もしかしてプロキシと組み合わせればなんとかなる可能性が微レ存……? function makeSafeScope(obj){ return new Proxy(obj, { ...... }) } with(makeSafeScope(obj)) { }
452 名前:デフォルトの名無しさん mailto:sage [2013/11/20(水) 02:16:17.48 ] withってこうやって使うもんでしょ var scopeOrContext = {a:0, f: function(){++this.a}} with(Object.create(scopeOrContext)){ f()// 1 } scope.a// 0
453 名前:デフォルトの名無しさん mailto:sage [2013/11/20(水) 03:22:46.52 ] with(obj) { a = 1 } ってした時にaがobj.aなのかそうでないのか分かりにくいってことだよ
454 名前:デフォルトの名無しさん mailto:sage [2013/11/20(水) 17:17:17.01 ] そう言えば今までブロック文中の関数宣言は非推奨だったけど ES6からはブロックスコープになったんだよな (function (){ "use strict" if(1){ function a() {} } return typeof a })() //"undefined"
455 名前:デフォルトの名無しさん mailto:sage [2013/11/21(木) 22:19:07.88 ] >>401 >Array.apply(null, { length: 5 }).map(Number.call, Number); 配列内包ってもう固まったんだっけ?
456 名前:デフォルトの名無しさん [2013/11/22(金) 00:22:59.64 ] 固まってる for-ofとifだけ a = [1,2,3,4,5] b = [ for(v of a) if(v > 2) v*2 ] // [6,8,10]
457 名前:デフォルトの名無しさん [2013/11/22(金) 01:34:53.19 ] ES6への機能追加が21日で完了しました。 つまり、まもなくラストコールです。 今後は約1年間、実装からのフィードバックを含めた、 バグフィックスや小規模な改定のみが行われ、勧告となります。
458 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 02:38:13.10 ] やっと、ラストコールか。ちょっと停滞気味のRhinoフォークしてくる。
459 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 03:00:22.47 ] え、Rhinoって使ってる人いるの?
460 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 04:24:06.17 ] ググると結構あるぞ。むしろjavaだと他に何がある?
461 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 08:45:11.30 ] つNashorn
462 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 16:57:20.57 ] 余計な記法増やして読みにくくするのやめてほしいわ このスレ見ても結局 黒魔術が増えるだけなんだなES6って
463 名前:デフォルトの名無しさん mailto:sage [2013/11/25(月) 09:34:48.99 ] 流れについていけない守旧派の極みだな 別にいいんだよ、IE6が理解できる範囲のJavascriptしか頭に入りませんってなら
464 名前:デフォルトの名無しさん mailto:sage [2013/12/01(日) 04:26:34.11 ] ES6は必要な進化だろうけど、そのうち黒魔術化するでしょ LLJS/asm.js最適化しながら手書きできる人間なんて僅かしかいなくてコンパイラにjavascript吐かせる時代になるかもしれない アセンブラやCやってた連中が復活するかもしれないけど
465 名前:デフォルトの名無しさん mailto:sage [2013/12/01(日) 10:59:57.81 ] Dartのことですね
466 名前:デフォルトの名無しさん mailto:sage [2013/12/03(火) 12:22:46.92 ] ES6が糞過ぎて猫様もお怒り Hearing about ES6 modules - Node.js Reactions nodejsreactions.tumblr.com/post/64587440442/hearing-about-es6-modules
467 名前:デフォルトの名無しさん mailto:sage [2013/12/03(火) 22:17:04.57 ] 猫かわいい
468 名前:デフォルトの名無しさん mailto:sage [2013/12/12(木) 02:15:57.94 ] en.wikipedia.org/wiki/ECMAScript#Conformance_tests ここの結果見るとIEが一番準拠しててFirefoxの準拠度がダントツ悪い 逆だと思ってたから意外だな Firefoxは仕様が決まる前から先行実装してるっていうのがあるから しょうがない面もあるかも
469 名前:デフォルトの名無しさん mailto:sage [2013/12/21(土) 19:49:07.41 ] ES6はCと違ってよくわからないって人がごねた結果だろ
470 名前:デフォルトの名無しさん mailto:sage [2013/12/21(土) 19:50:05.91 ] >>469 Cをよくわかってないなら喋らない方がいいよw
471 名前:デフォルトの名無しさん [2013/12/26(木) 23:29:54.06 ] A=フェラチオ B=手マン C=セックス D=スカトロ
472 名前:デフォルトの名無しさん [2013/12/26(木) 23:57:34.24 ] >>468 最新のIEと10年前のFirefoxを比較すれば当然そうなります
473 名前:デフォルトの名無しさん mailto:sage [2013/12/27(金) 00:10:24.18 ] 10年前にFirefoxなんかあったっけ? 10年前だとIE以外は生まれてすらいない時代だと思うけど。
474 名前:デフォルトの名無しさん mailto:sage [2013/12/27(金) 00:13:04.22 ] >>473 でたらめを書かないでください。 Firefoxは10年前既にありました。
475 名前:デフォルトの名無しさん mailto:sage [2013/12/27(金) 00:15:25.39 ] あ、やっぱりなかったみたいだね。 ja.wikipedia.org/wiki/Mozilla_Firefox%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AE%E5%A4%89%E9%81%B7 2003年5月16日 製品名を Firebird へ改称 2004年2月9日 製品名を Firefox へ改称
476 名前:デフォルトの名無しさん mailto:sage [2013/12/27(金) 00:16:20.89 ] >>473 板違い IEの話はドザ板でやれ
477 名前:デフォルトの名無しさん mailto:sage [2013/12/27(金) 00:19:58.37 ] >>475 Firefoxの最初のバージョンはフェニックスと呼ばれました。 ウィキペディアで調べてもわからないことはあるものです。 そんなに恥ずかしがらなくてもいいです。 生きている価値が無いというほどのことではありません。 でも、ウィキペディアで調べて知ったかぶりをするのはもうやめたほうが良いかもしれませんね。
478 名前:デフォルトの名無しさん mailto:sage [2013/12/27(金) 00:20:55.81 ] 間違えた。IEを持ちだしたのは>>472 だった。 >>472 は消えろ
479 名前:デフォルトの名無しさん mailto:sage [2013/12/27(金) 00:22:18.40 ] >>475 名前が変わったら別の製品だと思ったのか 恥ずかしすぎワロタ
480 名前:デフォルトの名無しさん mailto:sage [2013/12/27(金) 00:45:26.15 ] もうそろそろ興奮収まったかい?
481 名前:デフォルトの名無しさん [2013/12/27(金) 01:03:00.89 ] ワールドクラスの馬鹿を発見した興奮!
482 名前:デフォルトの名無しさん mailto:sage [2013/12/27(金) 01:05:50.54 ] まだだったか
483 名前:デフォルトの名無しさん mailto:sage [2013/12/27(金) 05:30:34.81 ] >>477 >>479 全く読んでないから知らんけど、名前が違う頃のFirefox使ったデータならその頃の名前で書くんじゃねーの?
484 名前:デフォルトの名無しさん mailto:sage [2013/12/30(月) 16:38:13.73 ] >>472 >最新のIEと10年前のFirefoxを比較 どーゆー意味? >>468 に載ってるFirefoxのバージョンは26とNightly 29なんだけど
485 名前:デフォルトの名無しさん mailto:sage [2013/12/30(月) 19:17:26.11 ] >>468 mozilla.orgのJavascriptは独自仕様だよ。 ECMAScriptに入ってないのも独自の判断で仕様に入れて Javascript 1.xと称している。 この場合のJavascriptはmozillaの商標。 一般的に言ってるJavascriptは標準規格のECMAScriptの通称。 そのうち独自仕様は辞めると思うが、 もともとJavascriptは彼ら(前身のNetscape社)のもの。
486 名前:デフォルトの名無しさん mailto:sage [2013/12/30(月) 19:33:25.23 ] 困るんだよねー ちゃんと規格としてかっちり決まってから実装始めてもらわないと
487 名前:デフォルトの名無しさん mailto:sage [2013/12/30(月) 23:27:24.32 ] しかし実装がないと規格も決まらないというジレンマ
488 名前:デフォルトの名無しさん mailto:sage [2013/12/31(火) 16:53:03.28 ] >>486 このスレの住民の言葉とは思えんな Fxのお陰でどれだけ仕様が改善できて策定がスムーズに行ったことだか 特に構文レベルだと長いフィードバックが不可欠 それをFxがずっと前からやってくれたおかげで、 今のFxの独自実装が抱える多くの問題を踏まずにすんだ ChromeにだってSymbolやPromiseやら先行実装たくさんあるし これから先もSIMDやParallelやら先行実装が重要なものは沢山ある
489 名前:デフォルトの名無しさん mailto:sage [2013/12/31(火) 18:11:09.61 ] これからのJSって便利にもなるが厄介なことも増えるよな 例えばnewが要るかどうか 理屈としては継承のために@@createを呼び出させるべきかどうかなんだろうけど、 Mapなんかは付けないとエラー、Proxyやvalue object系には付けるとエラー、とか覚えるのが増えるね
490 名前:デフォルトの名無しさん [2014/01/01(水) 00:01:49.39 ] 今年はES6の年です 皆さん祝いましょう!
491 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 01:43:16.27 ] お断りします
492 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 02:31:16.08 ] >>489 今でもフレームワークごとに違うじゃん。
493 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 10:06:51.50 ] ビルドインオブジェクトの話でしょ フレームワークはフレームワーク まあ余談だけどユーザー側で作るAPIは基本的に Class.initとかClass.create〜とかを提供する形にした方がいいと思うね
494 名前:デフォルトの名無しさん [2014/01/01(水) 10:19:14.82 ] ついにJSも世代が分かれて古い方はstaticおじさんと呼ばれるようになるに違いない
495 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 12:44:58.45 ] ES6が糞過ぎるからしょうがないね
496 名前:デフォルトの名無しさん [2014/01/01(水) 14:35:09.29 ] そうか?物によっては10年もかけただけあって随分洗練されてると思うが 今でも微妙な問題は残ってるけど大山は全て乗り越えた感じだ
497 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 14:44:38.39 ] おまえらArray.prototype.shuffleとか作ってないか? そういうのは困るからArray.prototype._shuffleみたいにしろとさ
498 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 14:56:37.99 ] ES6に足りないものは、 {obj1,obj2,obj3}.prop.{prop1,prop2,prop3}.prop = val というシンタックス。あとはいい。
499 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 15:03:07.14 ] イラネ なんだその黒魔術
500 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 15:21:41.51 ] これが黒魔術なら分割代入も黒魔術ということになってしまうな
501 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 15:30:34.13 ] そうか 本当は [a,b,c] = [1,2,3] のように [o.a,o.b,o.c] = [1,2,3] を o[a,b,c] = [1,2,3] と書きたいが これだとa,b,cのコンマが独立した演算子と取られてしまうから 可能性としては o{a,b,c} = {a:1,b:2,c:3} か o{0:a,1:b,2:c} = [1,2,3] とするしかないのか それがどうも冴えないから入らなかったんだろうね
502 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 15:49:11.00 ] はあ・・ JavaScript ES6 Bad Parts -分かりにくい悪手法- という良書が出来るのが目に見えてる
503 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 15:55:16.38 ] でも>>498 の「{}.」は案外凄い良いシンタックスだと思うよ {obj1,obj2,obj3}.prop.{prop1,prop2,prop3}.prop = val {obj1,obj2,obj3}.{prop.{prop1,prop2,prop3}.prop} = val {obj1,obj2,obj3}.{prop.{prop1,prop2,prop3}}.prop = val {{obj1,obj2,obj3}.{prop.{prop1,prop2,prop3}}}.prop = val 読みやすさは最悪だか汎用性レベルは最高 あらゆるパターンを記述できるわ 案外ES7くらいで採用されるかもね
504 名前:デフォルトの名無しさん [2014/01/01(水) 16:14:52.51 ] ES6のBest Partsのspread演算子様 arr.slice() ↓ [...arr] arr.slice().push(x), arr ↓ [...arr, x] for(var i = 0, arr = []; i < len; i++) arr[i] = i ↓ arr = [...Array(len).keys()] arr.filter(function (x, i, a) {return a.indexOf(x) == i}) ↓ [...new Set(arr)] str.split('') ↓ [...str] 可能性は無限大
505 名前:デフォルトの名無しさん [2014/01/01(水) 16:47:20.67 ] 配列内包も素晴らしい s1 = 'abcde', s2 = '12345' for (var arr = [], i1 = 0; i1 < s1.length; i1++) for (var i2 = 0; i2 < s2.length; i2++) arr.push(s1[i1] + s2[i2]) ↓ arr = [for (c1 of s1) for (c2 of s2) c1 + c2]
506 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 21:58:18.62 ] みんなcoffeescriptからの流用なんだけどね
507 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 22:56:47.56 ] いいえPythonやHaskellなんかからの導入です CSも同じく
508 名前:デフォルトの名無しさん mailto:sage [2014/01/02(木) 08:45:45.32 ] 他の言語からの取り入れを悪いことのように言う傾向が今年は滅びますように
509 名前:デフォルトの名無しさん mailto:sage [2014/01/02(木) 10:23:18.50 ] そんなのは見たことないな
510 名前:デフォルトの名無しさん mailto:sage [2014/01/02(木) 10:48:29.19 ] >>501 o['a', 'b', 'c'] = [1, 2, 3]; が既存の分割代入に近くていい気がする。
511 名前:デフォルトの名無しさん mailto:sage [2014/01/02(木) 14:05:42.56 ] プロパティの分割代入とか、プロトタイプ継承を理解していない証拠
512 名前:デフォルトの名無しさん mailto:sage [2014/01/02(木) 14:27:08.28 ] >>510 それは無理 o['a', 'b', 'c'] = [1, 2, 3]; は既に o['c'] = [1, 2, 3]; と解釈されるから
513 名前:デフォルトの名無しさん mailto:sage [2014/01/02(木) 16:59:30.82 ] 慣れれば読みやすい可能性が微レ存 p{a,b} = q ↓ p.a = q.a p.b = q.b p.x.{a,b} = q ↓ p.x.a = q.a p.x.b = q.b p.{x.{a,b}} = q ↓ p.{x.a,x.b} = q ↓ p.x.a = q.x.a p.x.b = q.x.b
514 名前:デフォルトの名無しさん mailto:sage [2014/01/02(木) 17:00:13.11 ] p.{x,y}.{a.b} = q ↓ p.x.a = q.a p.x.b = q.b p.y.a = q.a p.y.b = q.b p.{{x,y}.{a.b}} = q ↓ p.{x.a,x.b,y.a,y.b} = q ↓ p.x.a = q.x.a p.x.b = q.x.b p.y.a = q.y.a p.y.b = q.y.b p.{z:{x,y}.{c:a.d:b}} = q ↓ p.{z.c:x.a,z.d:x.b,z.c:y.a,z.d:y.b} = q ↓ p.x.a = q.z.c p.x.b = q.z.d p.y.a = q.z.c p.y.b = q.z.d
515 名前:デフォルトの名無しさん mailto:sage [2014/01/02(木) 17:19:12.05 ] 後は分割代入でも先送りになったけど undefinedを見逃す?演算子系は実際必要だな if(a&&a.b&&a.b.c) ↓ if(a.?b.?c) var {a:{b:c}} = {} //c=undefind.b -> error ↓ var {a:{?b:c}} = {} //c=undefind.?b -> undefined
516 名前:デフォルトの名無しさん [2014/01/02(木) 17:59:53.93 ] >>514 パターンマッチはスクリプト言語なら強化して欲しいが、 これに?演算子やguardやら入ったらカオスになるんだろうな。
517 名前:デフォルトの名無しさん mailto:sage [2014/01/07(火) 14:42:38.41 ] おまえらみんなwithでも使ってろ ただし最後はちゃんと"use strict";を書いてデバッグすること
518 名前:デフォルトの名無しさん [2014/01/09(木) 16:12:01.04 ] with分も捨てたもんじゃない プロキシと組み合わせればスクリプトを分かりやすく書けたりする unit1.on('reqestCommand', unit => { with (new ControlerProxy(unit)) { if (Y > 100) TURN_LEFT_180 GO_100 if (Y < 0) FREEZE } })
519 名前:デフォルトの名無しさん [2014/01/15(水) 00:39:55.46 ] try { (ノ°□°)ノノ ┻━┻ } catch() { ┬─┬ ノ( ゜-゜ノ) }
520 名前:デフォルトの名無しさん mailto:sage [2014/01/16(木) 20:32:57.94 ] es6にguardsが入らなかったのはかなり残念だ JavaScriptでちゃんと静的型チェックをしようとすると、 https://developers.google.com/closure/compiler/docs/js-for-compiler?hl=ja このClosure Compilerのアノテーションを使うのが一番良さそうだけど 見ただけでめげた… guardsの構文を受け付けて、コンパイル時に削除してくれればいいんだけどなぁ
521 名前:デフォルトの名無しさん [2014/01/17(金) 06:08:12.57 ] ES6にGuardsが入ると思ってたのはあんただけだろうが、そもそもJavaScriptに静的型チェックなんて必要ない スクリプト言語の性格や既存のライブラリを考えると徒労に終わるだけだし そういうことで今では::構文もbindに取られてるし、ESメンバーにもそんなに好かれていない wiki.ecmascript.org/doku.php?id=strawman:bind_operator esdiscuss.org/topic/value-objects-roll-your-own#content-4 Trademarksはパターンマッチの為の機能として残るだろうが、今後型のための構文が採用されることはない JSでどうしても型を明記したい場合は、a = b|0 や c = float32(d + e) のようにすることだね そうじゃないのを望むならDartからでも変換すればいい
522 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 10:11:32.27 ] 静的型チェックっていうと大袈裟だったかもしれないけど、他人が書いた関数で 引き数に何を渡せばいいか分からない事ってないか? 複数人で規模の大きめのアプリを作る時とかは、みんなまじめにアノテーション とか書いてんのかね。 しかしBrendan Eichがいらねってんなら望み薄だな… bindはいいけど、guardsはTypeScriptと同じように:一個にすればいいんじゃね?
523 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 10:35:50.16 ] まあダックタイピング+トライ・アンド・エラーで行くしかしょうが無いでしょ。 公式で用意されてる関数は適当に叩けば適切なエラーが帰ってくるからそれ見習ってもいいかもな。 crypto.getRandomValues() //TypeError: Failed to execute 'getRandomValues' on 'Crypto': 1 argument required, but only 0 present. crypto.getRandomValues("^_^") //TypeError: Failed to execute 'getRandomValues' on 'Crypto': First argument is not an ArrayBufferView crypto.getRandomValues(new Float64Array(10)) //TypeMismatchError: Failed to execute 'getRandomValues' on 'Crypto': The provided ArrayBufferView is of type 'Float64', which is not an integer array type. crypto.getRandomValues(new Int32Array(10)) //[519742316, 1326690367, 1843628936, 94818381, 1481545681, -949200701, 1818462933, -1973550051, 2019705203, -1026601786]
524 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 14:41:15.55 ] トライ・アンド・エラーで別に構わないけど、crypto.getRandomValues()みたいに 適切なエラーを出す為にもGaurdsは必要だと思うけどね。 現状の現実的な解は、関数の先頭に型チェックするassertなりを仕込んでおいて リリース時にスクリプトで削除するか、何もしない関数に置き換えるとかかな。
525 名前:デフォルトの名無しさん [2014/01/18(土) 09:06:28.46 ] Gaurdsに頼る形だとtry-catchを使うことになるし、結局型に合わなかったことしか分からない 必要なのは適切な型か、適切なインターフェイスを備えてるかをテストすることだと思う この辺りを良くする仕組みはES6にも入ってる ES6ではinstanceof演算子は実質オーバーライド可能になって、関数じゃないオブジェクトに対しても使えるようになった 例えばこう書ける const IntegerArray = { [Symbol.hasInstance](x) { return [Int8Array, Int16Array, Int32Array, Uint8Array, Uint16Array, Uint32Array].some(A => x instanceof A) } } new Float64Array(10) instanceof IntegerArray //false new Int32Array(10) instanceof IntegerArray //true これなら柔軟に対応できる。ちなみにClassも継承を活用できていい class IntegerArray extends TypedArray { static [Symbol.hasInstance](x) { return super(x) && x[Symbol.toStringTag].contains('nt') } }
526 名前:デフォルトの名無しさん mailto:sage [2014/01/18(土) 17:02:05.76 ] なるほど型判定にinstanceofを使えばいいんだな しかし[Symbol.hasInstance](x)って見慣れない構文だな… x[Symbol.toStringTag]も どこ見ればいいか教えてもらえると助かる
527 名前:デフォルトの名無しさん [2014/01/18(土) 21:26:39.22 ] 前者はMethodDefinition ObjectLiteral ↓{ PropertyDefinitionList } ↓{ PropertyDefinition } ↓{ MethodDefinition } ClassExpression ↓class BindingIdentifier ClassTail ↓class Identifier extends AssignmentExpression { ClassBody } ClassBody ↓ClassElementList ↓ClassElement ↓static MethodDefinition MethodDefinition ↓PropertyName ( StrictFormalParameters ) { FunctionBody } ↓ComputedPropertyName ( FormalParameters ) { FunctionBody } ↓[ AssignmentExpression ] ( ) { FunctionBody } 後者は「known symbol」でドラフトを検索してみるといい
528 名前:デフォルトの名無しさん [2014/01/21(火) 07:00:19.03 ] try { (ノ°□°)ノノ ┻━┻ } catch() { ┬─┬ ノ( ゜-゜ノ) }
529 名前:デフォルトの名無しさん [2014/01/21(火) 14:32:33.68 ] ドラフトr22来たね wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#january_20_2014_draft_rev_22 1つ挙げるとしたら System.globalでグローバルオブジェクトが取れるようになったのは嬉しいね
530 名前:デフォルトの名無しさん [2014/01/25(土) 07:24:58.43 ] 例のwith proxyでvalue objectと演算子オーバーロードがエミュレートできるな 概念を書くと例えば v = vo1 + vo2 * vo3 のとき get vo1 → get vo2 → get vo3 → set v vo1 + vo2 * vo3 のリクエストが受け取れる ここでvalue objectがgetされたときは適当な数値で返しながら覚えておく 例えばそれぞれ2.1、3.2、4.3とか するとこの場合「set v 15.86」リクエストがあった時、実際の処理は2.1+3.2*4.3だったであろうことが逆算でわかる つまりvにvo1+vo2*vo3の意味するとこの結果を代わりに設定して、その後のget vで返すことができる これでマズイこともあるが、かなりのパターンのオーバーロードができそう もう一つ思いついたのは、クロージャなしで任意の変数を関数に紐付けできる WeakMapにcalleeとオブジェクトを紐付ければそれっぽくできるか with(scope(arguments)){ $static, hoge, fuga, puyo, $ } みたいな素敵な宣言文も定義できる
531 名前:デフォルトの名無しさん [2014/01/31(金) 06:23:51.84 ] 今やってるTC39ミーティングはES7がいよいよ始まったって感じで興味深いね。 Structured Clone、Typed objects、Value object、Parallel、Object.observe、Do expression、Async/await その中のTyped objectsのスライドも面白い。 https://docs.google.com/presentation/d/1HGoxjX74Q9i8I1ok-hkmxzWlM7CDQwxT0sUS5PJDxdg/ tobj.bufferで仮想的なメモリダンプができて、それを一旦保存して同型のコンストラクタに食わせることで復元したりも出来そうだね。 個人的お気に入りなのは『do式』 見た目はdo-while文のwhile以降がない形で、最後の評価値を返すブロック文のような式。 見送られたlet文のより良い代わりになったり、複数行アロー関数でのreturnの省略など、かなり素敵に役に立ちそう。 var v; let (r = rand()) { v = b*n|0 } ↓ var v = do {let r = rand(); b*c|0 } func = () => { ......; return hoge } ↓ func = () => do{ ......; hoge } ES6はいよいよ詰める作業に入ったね。 おそらくもう一回、3月末のミーティングを終えてから、4月くらいに最終草案が出来るんじゃないかな。
532 名前:デフォルトの名無しさん [2014/01/31(金) 19:19:33.18 ] Value Objectsのスライド面白いね。 www.slideshare.net/BrendanEich/value-objects2 興味深いのは数値にサフィックスを付けて独自の型を定義できるようになったことだろうか。 1KB + 1MB // 1025KB とかできるわけだ。 更に演算子での暗黙の型変換を簡単に調整できるかもしれない。 awaitの情報も面白い。 https://github.com/lukehoban/ecmascript-asyncawait Promiseが活躍してるね。
533 名前:デフォルトの名無しさん mailto:sage [2014/02/01(土) 01:35:24.81 ] 単体doはPerlを思い出すな
534 名前:デフォルトの名無しさん [2014/02/03(月) 21:58:06.74 ] 最近JSのマクロでsweet.jsが流行ってるけど、ES8のマクロはこれがベースになりそうな予感
535 名前:デフォルトの名無しさん mailto:sage [2014/02/03(月) 23:27:10.33 ] ES8って…鬼が笑いそうだな(節分だけに)
536 名前:デフォルトの名無しさん mailto:sage [2014/02/04(火) 00:01:33.82 ] ラムダっちゃ
537 名前:デフォルトの名無しさん [2014/02/04(火) 06:06:37.19 ] >>535 ES6の勧告は今年末 ES7の勧告はその2年後(つまり今から約3年後)を予定してるとなると ES8の勧告は2020年になるまでには……って感じだろうな でもこれまでの流れを見ると、ES7が大方固まったころ、つまり今から2年後にはES8の仕様もミーティングで話されていくし、 その1年前、つまりES6が勧告される頃には、メーリングリストで議論されてstrawmanに候補が挙げられだすのが定跡 つまり、ES8を考えだすのは来年の話でもないと思う そもそもSweet.jsはMozilla製だし、macro文とかdef文とかESに取り込まれることを狙っているのかもしれない あともう一つ挙げるなら、かつてES8だと思われてた機能も今のところマクロ以外はみんなES7になったし、 ES7だと思われてたPromiseが急遽ES6に入った例もあるから マクロもSweet.jsみたいなのがPromiseライブラリ並みの存在になればもしかしたら……ってのはある
538 名前:デフォルトの名無しさん mailto:sage [2014/02/04(火) 06:18:04.99 ] 春にはV8でもアロー関数が使えるようになりそうだよ!! やったねたえちゃん! https://code.google.com/p/v8/issues/detail?id=2700
539 名前:デフォルトの名無しさん [2014/02/05(水) 06:02:48.34 ] 今までWorker間のデータのやり取りはコピーか移譲しかできない件でいろいろ議論があったが、 V8/ChromeでArrayBufferの共有をできるようにするみたい。 オマケで排他処理を利用したスレッド制御ができるようになる。 https://chromiumcodereview.appspot.com/148283013/ https://chromiumcodereview.appspot.com/149053009/ https://chromiumcodereview.appspot.com/149053009/diff/1/src/arraybuffer.js
540 名前:デフォルトの名無しさん [2014/02/06(木) 10:10:23.63 ] 先日の会議でPromiseに関してchainを廃止してcastをresolveに統合することになったんだけど、凄い揉めてる esdiscuss.org/topic/promise-cast-and-promise-resolve 似たのがあるのはややこしくて無駄 chainとthen、resolveとcastでそれぞれ前者がベーシックで、後者が実用的という感じだろうか で、残すとなると実用的な方になるのはもっともだが、 ベーシックな方を捨てると、関数型スタイルとしての魅力を大きく損ない、ただのサポートAPIに成り下がってしまう 皆Promiseに対して考えてる重みが全然違う 高レベルなフレームワーク追加と思うかパラダイム導入と思うかでぜんぜん違う 宗教的な部分も関わってくる もっと根本的な設計から文句がある人もいる(決まるのが急すぎた!) 今でも案が出るし、PromiseじゃなかったらとっくにES7に持ち越しになってると思う 今後どうなるか注目
541 名前:デフォルトの名無しさん mailto:sage [2014/02/06(木) 18:21:27.41 ] こんな感じ? 〜ML〜 chain(flatMap)が要る要らないというようなことが半年前から度々話されてきた 〜そして先週の会議〜 「要らないよね〜」 「無くすのでいいと思う」 (ほぼ満場一致ですぐ決まる) 〜ML〜 「解決したよ〜^^ chainとresolveは無くすね」 「これはひどい><」 「話が違うじゃねえかざけんな!」 「オンラインでの積み重ねを大事にしろよ」 ・Googleの人 「あー、会議に出れなくて言えなかったのマズったな ま、周りではchain推しだしV8では無くさないことにしたから^^; (そもそもthenがクソだからchain実装したんだし!)」 「でも会議にでなかった人が決議を取り消せたら進展しないよね…」 『『『会議の意義って…………』』』 そして遂に出てしまった危険ワード「disasters like ES4」に皆が内心震え上がりましたとさ 爆死
542 名前:デフォルトの名無しさん [2014/02/16(日) 06:09:25.38 ] wiki.ecmascript.org/doku.php?id=strawman:relationships これでprivateメンバを実現する仕組みは分かったんだけど イマイチ他の有り難みが分からない もしかして f.set(b, v1) f.set(b, v2) f.set(b, v3) x = f.get(b) に比べて b@f = v1 b@f = v2 b@f = v3 x = b@f の形だと3変数を関連付けする意味も持ってるから x = v3 とコードを最適化できるってこと? それと、もしこうなったらなんかヤバイね esdiscuss.org/topic/merging-bind-syntax-with-relationships
543 名前:デフォルトの名無しさん mailto:sage [2014/02/19(水) 19:12:47.88 ] CやC++もそうだけど、最新仕様にジワジワ対応してくのがいやだな ベンダー中立なのも善し悪しだ
544 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 00:50:48.29 ] es6のletも関数の先頭に巻き上がるの?
545 名前:デフォルトの名無しさん [2014/02/20(木) 06:13:15.91 ] let,constはブロックスコープで巻き上がらないよ 因みに関数宣言はブロックスコープで巻き上がる事になった スコープに関してはこの2点を押さえとけばいい
546 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 10:54:52.79 ] どうもどうも。 つうことはlet,constだけを使ってる限りは、C++と同じように使う直前で宣言する っていうルールでいいわけだ
547 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 18:47:18.88 ] 逆じゃね? 巻き上がるvarは先頭で宣言する意味が無いけど、 letはブロック文の先頭にやった方がいいと思う。 var a if(f) { a = 1 } else { a = 2 } は if(f) { var a = 1 } else { var a = 2 } とできるし、そのほうが分かりやすい。 letだとこれができない。 で、分岐の前で宣言するようなことをちまちますると分かりにくいから、 いっそそのブロックの先頭でまとめて宣言した方が分かりやすい。 constは定数なので当然先頭のほうが分かりやすい。
548 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 20:11:08.24 ] 'use strict'; var a = 1; function hoge() { // ↓グローバル変数にアクセスするつもり console.log(a); // => undefined (巻き上げの為) var a = 2; // aを使う処理 }; -------- let a = 1; function hoge() { // ↓グローバル変数にアクセスするつもり console.log(a); // => 1 (のはず未確認) let a = 2; // aを使う処理 }; と直感的になるから使う直前で宣言するで問題無いよ
549 名前:デフォルトの名無しさん [2014/02/21(金) 06:02:18.19 ] >>548 あくまで変数はスコープに属する つまり正確には変数の存在は巻き上がるというかスコープに浸透する 但し宣言箇所までに使おうとするとエラーになる だからletさえあれば必ずしも良く書けるというわけでもない 特にfor文ではletは一見凄くいい 最近Cと同様に毎ループスコープコンテキストを生成するようになった これでfor文中でのクロージャ生成がグッとよくなる ただしその影響でパフォーマンスに影響があるかもしれない 理論的にはループ中にスコープコンテキストを保持するものがない場合 コンテキストを生成しなくて済むが、実際最適化が進むのは時間かかる いずれにせよ、letはキチッとしたイメージで使っていくべきだと思う >>547 のような場合は、もし使う直前で宣言するのなら それはそれ以前に変数を使っていた場合にエラーにしたいからという理由に自ずとなる だがもし>>548 のように見えて、キチッとしてないと思うのならブロック文の最初で宣言すべき ただ大半のケースであろう、そのスコープだけで下位のスコープでは使わない場合 一気に宣言と代入をした方がコンパクトでいいとは思う 場合によっては先頭にする、また場合によってはvarも使うというように 個人的ポリシーのもと綺麗に使い分けるか、思い切ってvarを捨てて letのその場宣言に統一するか、どちらがいいかは分からない
550 名前:デフォルトの名無しさん mailto:sage [2014/02/21(金) 10:47:15.29 ] 変数の定義は出来る限り後にするってのはEffectiveC++にも書いてある事だし let,constを使ってる限りはその習慣のままでよくなったって事でいいよ
551 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 17:51:36.53 ] ES6ってEffectiveC++まで読まないと使いこなせないのか…
552 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 23:03:38.54 ] >>551 んなわけない C++の人がJS のヘンテコな仕様を気にしなくてよくなっただけだ
553 名前:デフォルトの名無しさん [2014/03/20(木) 20:37:22.08 ID:OnvdowAM] ES7+に関するニュースがたまってきた まずObject.observeがChrome M35でデフォルト有効になるね つまり日本時間の4/1からES7の時代なわけだ、素晴らしい それからES6に摂りこぼしたようなメソッドが入ってくる esdiscuss.org/topic/object-entries-object-values まあこういうのは仮にES7になっても、すぐ実装される可能性が高いか あと興味深かったのはASTならぬCSTについて esdiscuss.org/topic/concrete-syntax-tree これが標準APIとして入ると、最近2chでもよく耳にするJSのコード分析ツールが発達するだろうね
554 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 10:34:50.10 ID:BAtZ8TGv] Microsoft、プログラミング言語“TypeScript”を正式リリース ttp://www.forest.impress.co.jp/docs/news/20140403_642703.html
555 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 00:52:27.92 ID:FOzpDrfL] しかし、letが使えない事が最もイラつく要因だな これだけは間違いなく設計ミスと言わざるを得ない はやいとこletが当たり前のように使えるようになってほしいよ
556 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 04:17:27.66 ID:m4NkAp8y] Let it be.
557 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 06:30:34.96 ID:IOWbf8hT] なんでそんなもんが要るのか理解に苦しむ
558 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 07:34:51.39 ID:/1bv/NFj] letって糖衣構文だよね?
559 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 09:05:12.45 ID:N/wOneBP] letをラムダ式で書くのは一般に可読性がすごく悪いので、letがラムダ式の糖衣構文であることは 間違いないけど、良い糖衣構文の典型例と言っていい。 おまけにJSのラムダ式は function とか無駄にキーワードも長いし(funcで十分ですお)。
560 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 09:28:02.77 ID:dytsHLSj] そもそもムダ式の使いどころがわからないw
561 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 10:45:40.07 ID:/1bv/NFj] (function って書きかたするだけで即時無名関数だってわかるし、可読性悪いと思わないな。 とはいえletは便利だと思う。
562 名前:デフォルトの名無しさん mailto:sage [2014/04/27(日) 10:16:14.38 ID:J+hFW2BD] 架空の構文を使うが、 let (a = a に与える値, b = b に与える値) { a とか b とかを使ったプログラム片 }; ↑コレが、こうなる↓ (function (a, b) { a とか b とかを使ったプログラム片 })(a に与える値, b に与える値); 可読性は大幅に違うと思うが?
563 名前:デフォルトの名無しさん mailto:sage [2014/04/27(日) 12:50:33.35 ID:dzdj67m/] var使えばいいじゃん
564 名前:デフォルトの名無しさん [2014/04/27(日) 16:49:18.92 ID:/n7QikUK] varか
565 名前:デフォルトの名無しさん mailto:sage [2014/04/27(日) 16:58:01.12 ID:ZSKa5kXO] バーカと言ってんのか。
566 名前:デフォルトの名無しさん mailto:sage [2014/04/28(月) 07:32:48.30 ID:pTdZCSXw] perlみたいにmyにすればvarより一文字タイプする手間が減って 人類全体ではおそらくのべ何百万時間と何百テラバイト節約できたのに。
567 名前:デフォルトの名無しさん mailto:sage [2014/04/28(月) 10:37:13.73 ID:nTejnWG/] そこでさらに1文字減らそうと考えないお前はとことん子供だな
568 名前:デフォルトの名無しさん mailto:sage [2014/04/28(月) 12:21:34.72 ID:6N4YFPM8] >>556 今なら let it go だな
569 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 01:06:54.91 ID:AbmpH0cg] >>567 phpの$はすばらしいな!え、ちがう?
570 名前:デフォルトの名無しさん [2014/04/29(火) 20:33:54.13 ID:pZyrXbny] class構文書く時@@createとconstructorの役割の割り振りが難しそうだな Arrayとか標準クラスを参考にすると@@create()ではそのクラスのインスタンスたり得る未初期化のオブジェクトを構築する つまり例えばArrayならlengthや自然数がハックされた(Proxy)オブジェクトを作り、prototypeの継承もここでする この時点で、obj.isClass()はtrueになるべきだが、まだオブジェクトが使える状態であってはいけない その次にconstructor()で、this.isClass()がtrueならば実際の初期化を行い、使える状態にする this.isClassがfalseまたは、初期化済みのインスタンスが渡された場合はエラーにする 逆にconstructorでオブジェクトをそのクラスのインスタンスたらしめる処理を行ってはいけない 例えば、内部的に使用するプロパティを新しく作成してはいけない 内部プロパティは@@create()でundefinedの値を入れて作っておき、constructor()ではそこに入れるだけにする これを常に守っているクラス間では、多重継承や多重継承元オブジェクトの作成など柔軟性の高さを確保しつつ、安全なクラスシステムが定義できる 一方自由が好きな人でも、@@createを使いこなすことで自分好みのクラスシステムを再定義できる 例えば〜.prototype.〜は長いから〜.$.〜にしようとかも超容易にできる
571 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 21:23:55.12 ID:/EtEvdEl] JavaのJavaScriptが更新されたね
572 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 00:26:41.76 ID:IHaPgo2n] ES6のイテレータってJava8のStreamAPIみたいなメソッド無いの?
573 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 22:34:29.48 ID:fV0QO8N6] マイクロソフト、IEの新機能紹介サイト「status.modern.ie」を正式版に www.atmarkit.co.jp/ait/articles/1405/29/news127.html