tc39のproposals throw expression richer-keys class-access-expression
tc39_study(throw_expressions)(Richer_Keys)(Class_Access_Expressions)
View Slide
Name!CSO 5BLFUPTIJ"POP੨݈རOccupation'SPOUFOE%FWFMPQFS1SPEVDU0XOFSCompany$ZCFSBHFOU"EUFDI4UVEJP"*.FTTFOHFSOSS$POUSJCVUPSPG7AboutIUUQJOGPCODI
5ISPXFYQSFTTJPO
8IBUJTUISPXFYQSFTTJPO5ISPXΛFYQSFTTJPO͔͠ॻ͚ͳ͍ॴͰॻ͚ΔΑ͏ʹͨ͠
function save(filename = throw new TypeError("Argument required")) {}
function getEncoder(encoding) {const encoder = encoding === "utf8" ? new UTF8Encoder(): encoding === "utf16le" ? new UTF16Encoder(false): encoding === "utf16be" ? new UTF16Encoder(true): throw new Error("Unsupported encoding");}
*NQMFNFOUBUJPO࣮ੲ7ʹ࣮͠·ͨ͠ɻ݁ہ$-"CBOEPO͠·͕ͨ͠ɻ
1SPCMFN࣮લఏͱͯ͠1SPQPTBMUP&YQMPSF&$."4DSJQU4UBUFNFOUTBT&YQSFTTJPOTIUUQTHJUIVCDPNSCVDLUPOQSPQPTBMTUBUFNFOUTBTFYQSFTTJPOTSFBENFͱ͍͏ఏҊ͕TUBHFʹ͋ͬͨɻTUBUFNFOUΛFYQSFTTJPOͱͯ͠औѻ͏͜ͱ͕Ͱ͖ΔΑ͏ʹ͢Δͱ͍͏ఏҊ
1SPCMFNͨͩ͠ɺ&DNBTDSJQUʹ͓͚ΔTUBUFNFOUͱFYQSFTTJPOͷࠞಉ͕ݴޠΛΑΓෳࡶʹͯ͠͠·͏ͷͰਐలͳ͘UISPXFYQSFTTJPOʹؔͯ͠จ๏ͷՃʹରͯ͠ωΨςΟϒͳ͕݁ग़͍ͯͯTUBHFʹਐΉ͜ͱͳͦ͞͏
%PFYQSFTTJPOͦͯ͠ߋʹEPFYQSFTTJPOͱ͍͏QSPQPTBM͕ࠓճఏҊ͞Ε͍ͯΔશͯͷTUBUFNFOUͱFYQSFTTJPOΛղܾͯ͠͠·͏ͷͰଟTUBHF͕ਐΉ͜ͱͳ͍͔͠Εͳ͍ɻ
function save(filename = do { throw new TypeError("Argument required”) }) {}// σϑΥϧτύϥϝʔλͰͷdoࣜ·ͩະఆ
function getEncoder(encoding) {const encoder = encoding === "utf8" ? new UTF8Encoder(): encoding === "utf16le" ? new UTF16Encoder(false): encoding === "utf16be" ? new UTF16Encoder(true): do{ throw new Error("Unsupported encoding”); }}
1SPQPTBMSJDIFSLFZT
$PNQPTFEQSPQPTBM$PMMFDUJPO\UP,FZ UP7BMVF^ͱDPNQPTJUF,FZ DPNQPTJUF4ZNCPMͷ̎ͭͷQSPQPTBMͷΈ߹ΘͤͲͪΒΦϒδΣΫτͷࣝผʹ͍ͭͯ
$PMMFDUJPO\UP,FZ UP7BMVF^$PMMFDUJPOʹUP,FZͱUP7BMVFΛՃ͢Δ
new Map([], {toKey(key) {return normalizedKey;},toValue(value) {return normalizedValue;},});new WeakMap([], {toKey(key) {return normalizedKey;},toValue(value) {return normalizedValue;},});new Set([], {toValue(value) {return normalizedValue;},});new WeakSet([], {toValue(value) {return normalizedValue;},});
DPNQPTJUF,FZ DPNQPTJUF4ZNCPMෳͷΦϒδΣΫτ͔ΒΩʔΛੜ͢ΔDPNQPTJUF,FZͱDPNQPTJUF4ZNCPM"1*ΛՃ͢ΔҾͷॱং͕ҧ͚Εҧ͏ΩʔͱͳΔΩʔʹར༻͞ΕͨΦϒδΣΫτ8FBL.BQͰཧ͞ΕΔͷͰΦϒδΣΫτ͕ফ͑ΕϝϞϦ͔Βফ͑Δ
compositeKey(...parts: [...any]) : Object.freeze({__proto__:null})compositeSymbol(...parts: [...any]) : Symbol()
const myValues = new Map();const components = [a, b];const myKey = compositeKey(...components);myValues.set(myKey, components);// ...let [a, b] = myValues.get(myKey);
4UBUVTUP,FZ͚ͩTUBHFʹͳΓ·ͨ͠ɻUP7BMVF͕ඞཁ͔Ͳ͏͔͕TUBHFͰͷٞʹͳΓͦ͏
$MBTTBDDFTTFYQSFTTJPO
8IBUJTUIJTΫϥεΦϒδΣΫτΞΫηε͢ΔҰ؏ͨ͠ํ๏Λఆٛ͢Δ
class C {static f() { ... }g() {class.f();}}
1SPCMFNTTPGBSTUBUJDͳΫϥεؔͷதͰUIJTΛͬͨ߹ɺؔͷݺͼग़͞ΕํʹΑͬͯUIJT͕มΘΔΫϥε໊Λͬͯ'PPCBSͱͨ͠߹ɺ'PPΛԿॻ͘ͷ%3:ʹ͍ͯ͠ΔUIJTDPOTUSVDUPS͔ΒࢀরͰ͖Δ͕ɺಉ͘͡UIJT͕TBGFͰͳ͍
%JTDVTTࢀরํ๏͕૿͑Δͷ·͘͠ͳ͍'PPCBSͷΑ͏ʹΫϥε໊ͰΞΫηε͢Δͷ͕γϯϓϧͰΑ͍%3:Λߟ͑ΔͱUIJTDPOTUSVDUPS͕ͩɺ҆શͰͳ͍DMBTTCBSͰ͍͍͔͠Εͳ͍
4UBUVT4UBHFʹͳΓ·ͨ͠