変数がたくさんに増えると変数の管理が大変になります。
普段の書類整理を例にとってみても、書類がたくさん溜まってしまうと、管理が大変になるので、普通は分類をして分かりやすくグループに分けます。
なでしこの『グループ』の機能もちょうどこの分類に当たります。
『グループ』は以下の機能を持ちます。
『(グループ名)の(変数名)』という感じで、変数名の前に修飾語のようにグループ名をつけて変数に対して読み書きをすることができます。
『(グループ名)とは(グループ名)』とグループ名を宣言式として書くと、グループ内の変数を全部コピーすることができます。
『(グループ名)で(関数名)する』と書くと、グループ内で定義した関数を実行することができます。
グループを宣言するとき、他のグループをミックスすることができます。オブジェクト指向で言えば継承に当たりますが、それほど高度な機能ではなく、ただ単に、グループ内の項目をコピーしているだけです。グループ内に変数名の衝突があれば上書きしてしまいます。
グループ内の関数をあたかも変数かのように扱うことができます。グループの利用
グループを生成(宣言)したときに、コンストラクターを実行させることができます。
(グループ名)の(変数名)
と、格助詞の「の」を使って指定する。
りんごの値段 // 「りんご」グループの変数「値段」を表す
携帯の着信音 // 「携帯」グループの変数「着信音」を表す
「の」を使ったメンバ変数へのアクセスではグループにメンバが属しているか厳しいチェックを行うが、以下の「→」を使ったアクセスでは、実際変数の値取得時にだけメンバをチェックする。
# [書式] (グループ名)→(変数名)
りんご→値段を表示
ボタン→テキストを表示
【1】(引数)(助詞)(引数)(助詞)...(オブジェクト名)(助詞)(関数名)
【2】(グループ名)について(引数)(助詞)(引数)(助詞)...(関数名)
のように記述します。
ファイルAからファイルBへファイルをコピーする。
配列Aについて3番目を削除する。
イベントは関数への参照として呼び出される。『(グループ名)の(イベント名)は〜』と書くことで変数内部に直接イベントを記述することができます。
※-----------------------
OKボタンとはボタン。
OKボタンのイベントは〜
「OK」と言う
コード補完機能から変数や関数を選べるようになります。コードのメンテナンス性を高めることができます。
■グループ名とは +ミックス・グループ名+ミックス・グループ名...
・変数名
・変数名
・{変数|文字列|数値|整数}変数名
・関数名(引数)〜定義内容...
#定義
■人間とは
・名前
・趣味
・挨拶する〜「こんにちは」と言う。
・自己紹介する〜「{名前}です。趣味は{趣味}です。」と表示。
■音楽家とは +人間
・担当楽器
・挨拶する〜「どもども」と言う
・演奏する〜「ドミソー♪」と言う。
・自己紹介する〜
「{名前}です。担当は{担当楽器}です。」と表示。
#利用
トモコとは人間
トモコの名前は「友子」
トモコの趣味は「読書」
トモコが自己紹介する
アイコとは音楽家だ
アイコの名前は「aiko」
アイコが自己紹介する
変数への代入により関数を呼び出す仕組み。JavaScript?, Delphi などの言語に実装されています。
例えば、ボタンのXという値を変更したら、ボタンのX座標を変更したい場合:
■ボタン
・{非公開}FX
・X ←X設定、→X取得
・X設定(V)〜FX=V。座標変更処理。
・X取得〜それはFX
ボタンのXは、30
Xを変更すると、X設定という関数が呼び出され、ボタンの座標が変更されるという仕組みを提供する。
コンストラクターは「作る」というメソッドを定義します。
グループを作成すると必ず、名前というメンバが自動的に生成されます。この名前にはグループにつけた名前が代入されています。
各グループのメンバを省略したときに、グループの初期メンバを登録しておくことで、グループの扱いが楽になります。
たとえば「母艦のテキストを表示」から「テキスト」を省略して「母艦を表示」と書いても、問題なく母艦のテキストが表示されます。
■人間
・F身長
・身長取得〜それはF身長
・身長設定(V)〜F身長=V
・身長 ←身長設定 →身長取得 デフォルト
人間=160
人間を言う。
グループメンバと同名のシステム命令を呼ぶには、ネームスペースに「システム」を指定して呼ぶとシステム命令を呼ぶことができます。
■日付処理
・今日〜システム:今日
・今月〜システム:今月
日付処理の今日を表示
グループのメンバは、『グループのメンバ』と指定しますが、この方法だとプログラムの実行時に、静的な指定しかできません。グループのメンバを動的に決定するには、『グループ@(変数名)』のように、@を使うとメンバを変数や文字列で指定することができます。
■書籍
・著者
・ジャンル
ナデシコ入門とは書籍。
ナデシコ入門の著者は「クジラ飛行机」
メンバ名は「著者」
ナデシコ入門@メンバ名を表示。
待機
基本的にグループはグローバル変数として静的に利用します。
もし、関数内で動的に生成したい場合などは、『作成』命令を使います。そして、動的に生成したメンバにアクセスするには、『(変数名)→(メンバ名)』あるいは『(変数名)@「(メンバ名)」』のように、変数にメンバが属することを明示する必要があります。
●ボタン動的生成処理
Iを0から3まで繰り返す
A[I]をボタンとして作成。
A[I]→テキストは「={I+1}=」
A[I]→クリックした時は〜
自身→テキストを言う
ボタン動的生成処理。
グループ内で自分自身を指定したい場合があります。そのときは、『自身』変数を使います。『自身』は常にグループ内で自分自身のインスタンスへのエイリアス変数です。『自身』は動的に設定されていますので、自身のメンバへアクセスするときは、『自身→メンバ名』または『自身@「メンバ名」』の形式で指定します。
■テスト
・担当
・担当表示〜
自身→担当を表示
テストの担当は「大林」
テストの担当表示。
待機。
グループ内にグループのメンバを持つ場合は、グループ定義するときに、グループであることを明示しておきます。
■口グループ
・歯{="とがってる"}
・舌
■魚グループ
・{口グループ}口
・ヒレ
魚とは魚グループ
魚の口の歯を表示
魚@"口"@"歯"を表示。
待機。
ただし、@を使ったメンバの動的決定を使う場合は、明示する必要はありません。
!変数宣言が必要
■口グループ
・歯{="とがってる"}
・舌
■魚グループ
・口
・ヒレ
魚とは魚グループ
口とは口グループ
魚の口は、口。
魚の口@"歯"を表示。
# 魚の口の歯を表示。# @で動的決定しないと未定義のエラーになる。
待機。