[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 06/01 04:20 / Filesize : 154 KB / Number-of Response : 574
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ECMAScript デス 4



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






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<154KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef