4. 計算や処理を行わせる: 7) 高度なスクリプト記述 (7) 修飾子 this.
← [4. 計算や処理を行わせる: 7) 高度なスクリプト記述 (6)スクリプトでノードの複製を接続するuse()関数]へ戻る | ↑ [目次]へ戻る | [5. 情報を一覧する・探す・出力と入力: 1) 検索]へ進む →
■このページで説明している内容
i) 自ノードのエレメントを指定する "this."修飾子
j) 集計関数 sum() / average() で「使う」エレメントだけを集計する:this.+エレメント
i) 自ノードのエレメントを指定する "this."修飾子
この修飾子は、親ノードと自ノードに同じ名前のエレメントがある場合、自ノードのエレメントを明示的に指定します。
"this."修飾子は、"super."修飾子と対になる修飾子です。(super.は親ノードを、this.は自ノードを指定します)
ここで、エレメントについておさらいしてみましょう。
修飾子が付けられていない通常のエレメントが何を指すかいうと、
・自分がそのエレメントを持っていた場合は、自分のエレメント (「使う」エレメントとして表示されているエレメント)
・持っていいない場合は、親のエレメント (「見る」エレメントとして表示されているエレメント)
このように、状況によって親ノードか自ノードのどちらのエレメントを参照しているか変わってしまいます。
これを明示的に指定するための修飾子が、"super."と"this."なのです。
このため、this修飾子には2種類の使い方があります。
1) 親ノードと同じ名前を持つエレメント名がある場合に自ノードのエレメントを指定する
親ノードと自ノードに同じエレメント名が存在する場合、
親ノードのエレメントを指定する場合には"super."修飾子を用いることを
説明しましたが、"this."修飾子は、この"super."修飾子と対になる
修飾子です。
2) 集計関数での利用
sum()関数およびaverage()関数の引数として、指定するエレメント名に前置することで、
「使う」エレメントとして定義されているエレメントだけを集計計算の対象とする。
"this."修飾子が無い場合には、「見る」エレメントに含まれるエレメントの値も
集計されてしまうが、この修飾子によって集計時に「見る」エレメントに含まれる
該当エレメントの値を除くことができます。
j) 集計関数 sum() / average() で「使う」エレメントだけを集計する:this.+エレメント名
PASSCELL Personal では、Version 1.2.*以降で集計関数を使うことが出来るようになりました。しかしこの集計関数のうち、 sum () [指定エレメントの総計を求める] と average() [指定エレメントの平均値を求める] では、総計あるいは平均値の対象として指定したエレメント名で集計処理を行うのですが、この際に、そのノードで定義したエレメント(= 「使う」エレメント)だけではなく、親ノードから引き継いでいるエレメント(= 「見る」エレメント)も対象としてしまいます。
具体的な例を見てみましょう。以下の図を見てください。
(図4.7.i-1) 集計関数 sum() で合計を求める例
この例では、エレメント"a"の合計数が意図しているように"6"になっていません。これは、通常の集計関数 sum() および average() では、引数として指定したエレメント"a"を持つ全ての下位ノードを集計対象としてしまうためです。
この例では、次の図のように、一番右にあるノードの子ノード「エレメント無し」が、親ノード「a=3」のエレメントを引き継いでいるために、「見る」エレメントとして"a"が含まれているために上記のような結果となっています。
(図4.7.i-2) 集計関数 sum() で合計が正しくない原因
意図してこのように値を集計したい場合には構いませんが、『値を「使う」エレメントとして定義したノードだけを集計対象としたい』場合には困ります。
集計対象とするノードをツリーの末端にすれば、やはり正しく集計されますが、必ずしも集計対象となるノードを末端にできるとは限りません。
このような場合には、sum()関数・average()関数の引数に与えるエレメント名の前に、"this."修飾子を追加します。
具体的には、このように記述します。
label=sum("a");
↓ このように修正する
label=sum("this.a");
(図4.7.i-3) 修飾子 "this."を使って、「使う」エレメントだけを集計対象とする。
このように集計対象エレメント名の前に修飾子"this."をつけると、「使う」エレメントとしてノードに定義されたエレメントだけを使って、総計・平均値を計算します。
← [4. 計算や処理を行わせる: 7) 高度なスクリプト記述 (6)スクリプトでノードの複製を接続するuse()関数]へ戻る | ↑ [目次]へ戻る | [5. 情報を一覧する・探す・出力と入力: 1) 検索]へ進む →


