Name
@brn (ꫬꅿ⨳ⵃ)
Occupation
ؿٗٝزؒٝسؒٝآص،٥ط؎ذ؍ـؒٝآص،
Company
Cyberagent ،سذؙأةآؔ AI Messenger
OSS
Contributor of V8
About
http://info.b6n.ch
Slide 3
Slide 3 text
What is
Immutability?
Slide 4
Slide 4 text
Immutablityהכ㢌刿♶〳腉䚍ךֿה
TypeScript(javascript)דכ㛇劤涸חכׅץג㢌刿〳腉(Mutable)
㹋植ׅחכ㢩鿇ךٓ؎ـٓٔך⸂⦵ַծأفٖحس
怴皾㶨⢪ְתֻ׃ַזְ
What is Immutability?
Slide 5
Slide 5 text
Why Immutability is
so important?
Slide 6
Slide 6 text
ؔـآؙؑزך㢌刿ָ♶〳腉דֿ֮הכفؚٗٓي⟃♴ך銲
挿ד知患חׅ
• 撑鷲麓䚍(ꟼ侧ָ⦼㢌刿׃זְ)
• ⶰ⡲欽ָ饯ֹזְ
ؙٓ؎،ٝز؟؎سךفؚٗٓىؚٝדכ⟃♴ךⵃ挿֮
ֲ
• ReactךPureComponentד知⽃ח嫰鯰דֹ
What is Immutability is so important?
Slide 7
Slide 7 text
Immutability in
REAL LIFE
Slide 8
Slide 8 text
׃ַ׃TypeScript(js)ד㹋植׃״ֲהׅה⟃♴ך㉏겗ָ֮
• ٓ؎ـٓٔ⢪ֲ
• IOכוֲׅ(DOMծhttpծStorage)
• 㘗דⴻⴽדֹ
Immutability in REAL LIFE
Slide 9
Slide 9 text
Immtauble.js
Immutable.jsכTypeScriptה湱䚍ָ䝤ְ
הֻחⰅ㶨ךRecord㘗ד邌植׃״ֲהׅה
immutableז㘗הֲדכזְ㘗㹀纏2ꅾד㹀纏ׅ䗳銲ָ֮
Immutability in REAL LIFE
Slide 10
Slide 10 text
immer
immerכPlainObjectImmutableח׃גֻךד⢪ְװְׅ
ָծclassָ⢪ִזְךד䮶莸ְׇ㜥さכ
Objectחًاحس㹀纏ׅ䕎חז
ָծֿכ䧮䢧׃גimmer⢪ֲֿהח׃
Immutability in REAL LIFE
Slide 11
Slide 11 text
How to treat IO
姻湫10ⴓד鑧׃ֹזְךד㸣穠ח
• MVI(Cyclejs괏)ⵃ欽׃גծIO㢩ך⚅歲חꟗׄ鴥
(Driver)
• 穠卓ֽActionהⰟח「ֽ《
• reduxד֮לmiddlewareחIOע䫎־
Immutability in REAL LIFE
Slide 12
Slide 12 text
Model View Intent
ًٔحز
• ٌشسקו搀椚זֻIOꟗׄ鴥
• asyncחאְג罋ִ䗳銲ָזֻז
رًٔحز
• Actionךװהָꬊ䌢ח㟓ִ
Immutability in REAL LIFE
Slide 13
Slide 13 text
How to express immutable type.
TypeScriptדImmutability邌植ׅחכ⟃♴ך倯岀ָ֮կ
• readonly⢪ֲ
• ConstArray٥ConstMap⢪ֲ
Immutability in REAL LIFE
Slide 14
Slide 14 text
Readonly
فٗػذ؍ָ铣《ךד剣ֿה㹑鎉ׅ
׃ؔـآؙؑزך⚥魦כ㢌刿〳腉
Immutability in REAL LIFE
Slide 15
Slide 15 text
ReadonlyArray٥ReadonlyMap
灶㠨涸ז㢌刿遤ֲꟼ侧ָꤐׁغ٦آّٝך㘗㹀纏
TypeScriptח穈鴥תגְ
sort٥reverse٥spliceהַדֹזְ(㘗㹀纏♳)
Immutability in REAL LIFE
Slide 16
Slide 16 text
ֿ穈さׇג邌植ׅ
C++ח֮װַגConst㘗הㄏせ׃
ׁחׅץגך㾩䚍《ꤐֻMutable㘗㹀纏ׅ
(׃ծConstMapכ⢪זְךד♧傉㹀纏׃זְ)
Immutability in REAL LIFE
Slide 17
Slide 17 text
type Primitive = undefined | null | boolean | string |
number | Function;!
!
interface ConstArray extends ReadonlyArray> {}!
type ConstObject = {!
readonly [P in keyof T]: Const!
};!
!
type Const = T extends Primitive!
? T!
: T extends ConstArray!
? T!
: T extends (infer R)[]!
? ConstArray!
: T extends object ? ConstObject : T;!
ֿדطأز׃ⰋגךؔـآؙؑزImmutableחדֹ
ծOptionalהַPromiseהַָ窃ה⦜זֿהחז
(ConditionalTypeך勴⟝ָוו㟓ִ)
Immutability in REAL LIFE
Slide 20
Slide 20 text
Writable/Writer
荈⡲ךؒٝذ؍ذ؍דReadOnlyXXXְזךװְ
ؒٝذ؍ذ؍㹀纏ׅהֹחفٗػذ؍ךךؔـآؙؑزה
刿倜ך遤ֲWriterחⴓꨄ׃ג㹀纏ׅ
Writableכ朐䡾ך㝄
Writerכ朐䡾䭯׆ծ刿倜ׅך乼⡲ךָ㹀纏ׁגְ
Immutability in REAL LIFE