日本語プログラミング言語「なでしこ」 > 戻る

グループ分け(オブジェクト指向ライク)

 クラスを定義して、そのクラスのインスタンスを生成するという従来のオブジェクト指向は、概念を覚えるまでに時間もかかり、なでしこの簡単、手軽と言う思想に反します。そこで、構造体をちょっとだけ拡張したものを『グループ』と呼ぶことにして、このグループをなでしこのオブジェクト指向としました。
■グループとは?
■グループが提供する機能
  ┣分類分け
  ┣グループ項目のコピー
  ┣グループ内関数
  ┣グループ・ミックス
  ┣セッター・ゲッター
  ┣コンストラクター
■グループの利用
  ┣オブジェクト.メンバ変数
  ┣グループ内関数
  ┣グループイベント
■グループの定義
  ┣グループを利用する意義
  ┣定義方法
  ┣定義例
■ゲッターとセッター
■コンストラクター
  ┣初期メンバ
■デフォルトの設定
■グループメンバと同名のシステム命令を呼ぶ方法
■グループメンバーの動的決定
  ┣関数内で動的に生成したグループについて
■その他
  ┣グループ内で自分自身を表す
  ┣グループメンバにグループを指定する

グループとは?

変数がたくさんに増えると変数の管理が大変になります。

普段の書類整理を例にとってみても、書類がたくさん溜まってしまうと、管理が大変になるので、普通は分類をして分かりやすくグループに分けます。

なでしこの『グループ』の機能もちょうどこの分類に当たります。

グループが提供する機能

『グループ』は以下の機能を持ちます。

分類分け

『(グループ名)の(変数名)』という感じで、変数名の前に修飾語のようにグループ名をつけて変数に対して読み書きをすることができます。 

グループ項目のコピー

『(グループ名)とは(グループ名)』とグループ名を宣言式として書くと、グループ内の変数を全部コピーすることができます。

グループ内関数

『(グループ名)で(関数名)する』と書くと、グループ内で定義した関数を実行することができます。

グループ・ミックス

グループを宣言するとき、他のグループをミックスすることができます。オブジェクト指向で言えば継承に当たりますが、それほど高度な機能ではなく、ただ単に、グループ内の項目をコピーしているだけです。グループ内に変数名の衝突があれば上書きしてしまいます。

セッター・ゲッター

グループ内の関数をあたかも変数かのように扱うことができます。グループの利用

コンストラクター

グループを生成(宣言)したときに、コンストラクターを実行させることができます。

グループの利用

オブジェクト.メンバ変数

(グループ名)の(変数名)

と、格助詞の「の」を使って指定する。 

りんごの値段 // 「りんご」グループの変数「値段」を表す
携帯の着信音 // 「携帯」グループの変数「着信音」を表す

「の」を使ったメンバ変数へのアクセスではグループにメンバが属しているか厳しいチェックを行うが、以下の「→」を使ったアクセスでは、実際変数の値取得時にだけメンバをチェックする。

# [書式] (グループ名)→(変数名)
りんご→値段を表示
ボタン→テキストを表示

グループ内関数

【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]→クリックした時は〜
          自身→テキストを言う

ボタン動的生成処理。

その他

グループ内で自分自身を表す

グループ内で自分自身を指定したい場合があります。そのときは、『自身』変数を使います。『自身』は常にグループ内で自分自身のインスタンスへのエイリアス変数です。『自身』は動的に設定されていますので、自身のメンバへアクセスするときは、『自身→メンバ名』または『自身@「メンバ名」』の形式で指定します。

■テスト
 ・担当
  ・担当表示〜
    自身→担当を表示

テストの担当は「大林」
テストの担当表示。
待機。

グループメンバにグループを指定する

 グループ内にグループのメンバを持つ場合は、グループ定義するときに、グループであることを明示しておきます。

■口グループ
 ・歯{="とがってる"}
 ・舌

■魚グループ
 ・{口グループ}口
 ・ヒレ

魚とは魚グループ

魚の口の歯を表示
魚@"口"@"歯"を表示。

待機。

 ただし、@を使ったメンバの動的決定を使う場合は、明示する必要はありません。

!変数宣言が必要
■口グループ
 ・歯{="とがってる"}
 ・舌

■魚グループ
 ・口
 ・ヒレ

魚とは魚グループ
口とは口グループ

魚の口は、口。

魚の口@"歯"を表示。
# 魚の口の歯を表示。# @で動的決定しないと未定義のエラーになる。

待機。


→トップへ →目次へ