31
EWD 3 トトトトトト トトト #21 Global トトトトトト JavaScript トトトトト (b) JavaScript トトトトトトトトト M/Gateway Developments Ltd. Rob Tweed ト : トトトトトトトトトトトトト ト トト

EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

Embed Size (px)

Citation preview

Page 1: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

EWD 3トレーニング・コース  #21

Global ストレージの JavaScript 用の抽

象化 (b) JavaScript の永続オブジェクトM/Gateway Developments Ltd.

Rob Tweed訳 : 日本ダイナシステム株式会社 嶋 芳成

Page 2: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

2

Global 節と JavaScript オブジェクトmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

2016/9/16 EWD 3 トレーニング・コース #21

Page 3: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

3

Global 節と JavaScript オブジェクトmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

では、 myDoc.d.e2.f3 を参照することができるでしょうか ?

2016/9/16 EWD 3 トレーニング・コース #21

Page 4: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

4

Global 節と JavaScript オブジェクトmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

myDoc.d.e2.f3

これは DocumentNode オブジェクト

2016/9/16 EWD 3 トレーニング・コース #21

Page 5: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

5

Global 節と JavaScript オブジェクトmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

myDoc.d.e2.f3

これも DocumentNode オブジェクトでしょうか

このことは、 'd' プロパティが正しい節 ( ノード ) かどうかを知る必要があるということです

2016/9/16 EWD 3 トレーニング・コース #21

Page 6: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

6

Global 節と JavaScript オブジェクトmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

myDoc.d.e2.f3

これも DocumentNode オブジェクトでしょうか

2016/9/16 EWD 3 トレーニング・コース #21

Page 7: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

7

Global 節と JavaScript オブジェクトmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

myDoc.d.e2.f3

これも DocumentNode オブジェクトでしょうか

2016/9/16 EWD 3 トレーニング・コース #21

Page 8: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

8

Global 節と JavaScript オブジェクトmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

myDoc.d.e2.f3

しかし、ひとつの Global の可能性のあるすべての添字を、前もって予測する、あるいは決定することは不可能です

2016/9/16 EWD 3 トレーニング・コース #21

Page 9: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

9

Global 節と JavaScript オブジェクトmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

myDoc.d.e2.f3

しかし、ひとつの Global の可能性のあるすべての添字を、前もって予測する、あるいは決定することは不可能です* それを教えてくれるスキーマはありません

2016/9/16 EWD 3 トレーニング・コース #21

Page 10: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

10

Global 節と JavaScript オブジェクトmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

myDoc.d.e2.f3

しかし、ひとつの Global の可能性のあるすべての添字を、前もって予測する、あるいは決定することは不可能です* それを教えてくれるスキーマはありません* 添字の値は何千、何百万もあり得ますし、階層構造のレベルの数も分かりません

2016/9/16 EWD 3 トレーニング・コース #21

Page 11: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

11

Global 節と JavaScript オブジェクトmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"myDoc("x","value")="hello world"

var myDoc = new this.documentStore.DocumentNode('myDoc');

myDoc.x.value

プロパティを、添字の名前を用いて自動的に生成することはできませんそのため、上記の例のような方法では DocumentNode のプロパティやメソッド名にアクセスするとクラッシュすることになります

2016/9/16 EWD 3 トレーニング・コース #21

Page 12: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

12

$() 関数myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var dNode = myDoc.$('d')

2016/9/16 EWD 3 トレーニング・コース #21

Page 13: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

13

$() 関数myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var dNode = myDoc.$('d')

2016/9/16 EWD 3 トレーニング・コース #21

Page 14: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

14

$() 関数myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var dNode = myDoc.$('d')

    $():

2016/9/16 EWD 3 トレーニング・コース #21

これが、親である DocumentNode の指定した下位節を表す DocumentNode  オブジェクトを返します

Page 15: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

15

$() 関数myDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var dNode = new this.documentStore.DocumentNode('myDoc',['d'])

これは同じことですが、とても冗長です

2016/9/16 EWD 3 トレーニング・コース #21

Page 16: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

16

$() 関数を変えるmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var dNode = myDoc.$('d')

   

2016/9/16 EWD 3 トレーニング・コース #21

Page 17: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

17

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var dNode = myDoc.$('d');

var e2Node = dNode.$('e2');

2016/9/16 EWD 3 トレーニング・コース #21

Page 18: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

18

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var dNode = myDoc.$('d');

var e2Node = myDoc.$('d').$('e2');

   連鎖することで同じことができます

2016/9/16 EWD 3 トレーニング・コース #21

Page 19: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

19

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var f3Node = myDoc.$('d').$('e2').$('f3');

2016/9/16 EWD 3 トレーニング・コース #21

Page 20: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

20

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var f3Node = myDoc.$('d').$('e2').$('f3');

$d が表現する DocumentNode は、 DocumentNode である myDoc のプロパティとしてインスタンス化されます

2016/9/16 EWD 3 トレーニング・コース #21

Page 21: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

21

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var f3Node = myDoc.$('d').$('e2').$('f3');

$d が表現する DocumentNode は、 DocumentNode である myDoc のプロパティとしてインスタンス化されます

従って、 myDoc.$d としてアクセスできます

2016/9/16 EWD 3 トレーニング・コース #21

Page 22: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

22

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var f3Node = myDoc.$('d').$('e2').$('f3');

$e2 が表現する DocumentNode は、 myDoc.$d のプロパティとしてインスタンス化されます

2016/9/16 EWD 3 トレーニング・コース #21

Page 23: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

23

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var f3Node = myDoc.$('d').$('e2').$('f3');

$e2 が表現する DocumentNode は、 myDoc.$d のプロパティとしてインスタンス化されます

これで、 myDoc.$d.$e2 としてアクセス可能です

2016/9/16 EWD 3 トレーニング・コース #21

Page 24: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

24

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var f3Node = myDoc.$('d').$('e2').$('f3');

$() は どの特定の添字についても1回だけ使う必要があります、

2016/9/16 EWD 3 トレーニング・コース #21

Page 25: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

25

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var f3Node = myDoc.$('d').$('e2').$('f3');

var f2Node = myDoc.$('d').$('e2').$('f2');

従って、こうする必要はありません

2016/9/16 EWD 3 トレーニング・コース #21

Page 26: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

26

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var f3Node = myDoc.$('d').$('e2').$('f3');

var f2Node = myDoc.$d.$e2.$('f2');

指定された添字については、 $() はすでに先に使われているので、このようにすることができます

2016/9/16 EWD 3 トレーニング・コース #21

Page 27: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

27

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var f3Node = myDoc.$('d').$('e2').$('f3');

var f3Value = f3Node.value; // bar3

2016/9/16 EWD 3 トレーニング・コース #21

Page 28: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

28

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var f3Node = myDoc.$('d').$('e2').$('f3');

var f3Value = myDoc.$d.$e2.$f3.value; // bar3

2016/9/16 EWD 3 トレーニング・コース #21

Page 29: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

29

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="bar3"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var f3Node = myDoc.$('d').$('e2').$('f3');

myDoc.$d.$e2.$f3.value = 'New value'

2016/9/16 EWD 3 トレーニング・コース #21

Page 30: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

30

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="New value"

var myDoc = new this.documentStore.DocumentNode('myDoc');

var f3Node = myDoc.$('d').$('e2').$('f3');

myDoc.$d.$e2.$f3.value = 'New value'

2016/9/16 EWD 3 トレーニング・コース #21

メモリ内ではなくディスク上の値を更新します

『永続的な JavaScript オブジェクト』 です

Page 31: EWD 3トレーニングコース#21 GlobalストレージのJavaScript用抽象化-(b) JavaScriptの永続オブジェクト

31

$() 関数を連鎖するmyDoc("a")=123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1")="bar1"myDoc("d","e1","f2")="bar2"myDoc("d","e2","f1")="bar1"myDoc("d","e2","f2")="bar2"myDoc("d","e2","f3")="New value"

myDoc.d.e2.f3 ではなく

myDoc.$d.$e2.$f3 です

2016/9/16 EWD 3 トレーニング・コース #21

$ を先頭に付けることで  DocumentNode のプロパティやメ

ソッドにアクセスして 添字ベースのプロパティでクラッシュす

ることはありません