2 single: 宣言型プログラミング; はじめに
4 ================================
6 ================================
8 オブジェクト指向による入れ子構造の宣言型プログラミング環境の構築方法を学びます。
11 * コンポジションと参照によりオブジェクトとリストを返すには
12 * オブジェクトのアクセス完了後にコードを実行するには
13 * オブジェクト指向による宣言型プログラミング
16 pair: 宣言型プログラミング; リストへオブジェクトを作成するには
19 ====================================
21 リストの定義時にリストへオブジェクトを作成できます。
23 Add() 関数、または + 演算子により、必要なときにオブジェクトをリストへ追加できます。
29 alist = [new point, new point, new point] # # オブジェクトが三つあるリストを作成します。
31 alist + [1,2,3] # 別の項目をリストへ追加します。
33 see "Item 4 is a list contains 3 items" + nl
36 add(alist , new point)
39 alist[5] { x = 100 y = 200 z = 300 }
40 alist[6] { x = 50 y = 150 z = 250 }
42 see "Object inside item 5" + nl
44 see "Object inside item 6" + nl
53 Item 4 is a list contains 3 items
67 pair: 宣言型プログラミング; 参照によりオブジェクトを返すには
69 コンポジションと参照によりオブジェクトとリストを返すには
70 ========================================================
72 コンポジションの使用とクラス属性のオブジェクトがある場合、オブジェクトの返値は参照で返します。
74 呼び出し元で代入演算子を使う場合は、オブジェクトのコピーを作成します。
76 呼び出し元で代入演算子を使わない場合は、参照で返されたオブジェクトへ直接アクセスできます。
78 また、属性がリスト (オブジェクトではありません) でも同じ処理が適用されます。
80 .. note:: オブジェクト、およびリストは同じ規則で処理します。
82 関数から返すときは、参照で返されたオブジェクト属性を除き値返しになります。
89 myobj = o1.addobj() # 別のコピーを代入で作成します。
93 see o1.aobjs[1] # コンテナにあるオブジェクトを表示します。
100 return aobjs[len(aobjs)] # オブジェクトを参照で返します。
166 point() { # 参照でオブジェクトへアクセスします。
171 point() { # 参照でオブジェクトへアクセスします。
184 return content[len(content)] # オブジェクトを参照で返します。
186 Class point x=10 y=20 z=30
201 pair: 宣言型プログラミング; オブジェクトのアクセス完了後にコードを実行するには
203 オブジェクトのアクセス完了後にコードを実行するには
204 ==================================================
206 オブジェクト属性とメソッドを使うには { } でオブジェクトへアクセスします。
208 オブジェクトに BraceEnd() メソッドがある場合は、オブジェクトのアクセス完了直前に実行します。
214 New Point { See "How are you?" + nl }
218 see "I'm fine, Thank you!" + nl
229 pair: 宣言型プログラミング; オブジェクト指向による宣言型プログラミング
231 オブジェクト指向による宣言型プログラミング
232 ==========================================
234 この機能でオブジェクト指向による入れ子構造の宣言型プログラミング環境の構築と使用を可能にします。
236 * { } によるオブジェクト属性、およびメソッドへのアクセス
239 * Setter (セッター) / Getter (ゲッター) メソッド (オプション扱い)
267 Func screen return new screen
275 return content[len(content)]
278 see "I have " + len(content) + " points!"
300 pair: 宣言型プログラミング; コード品質の向上
305 メソッドで仮引数を使わないときは、メソッド名末尾の () を省略できます。これにより、コード品質の向上になります。
306 この機能はオブジェクトメソッドとオブジェクト属性との機能に違いがあるため Ring では使えません。
307 オブジェクト属性へ Getter メソッドを定義するとき、同様の効果をコードの構文で実現できます。
308 例えば point() メソッドの定義ではなく point 属性値の取得で実行される
309 getpoint() メソッドを point 属性として定義します。変数名は () を省略できるため、
310 point() ではなく point と記述します。
311 getpoint() メソッドはオブジェクトの作成、およびオブジェクトの参照を返します。
332 return aObjs[len(aObjs)]
336 see "3D Point" + nl + x + nl + y + nl + z + nl