# 基本的な記述ルール artisoc4とartisoc Cloudの基本的な記述ルールの違いについて説明します。 なお、artisoc Cloudの基本的な記述ルールはPythonのものと共通ですので、詳細な点は[Python公式ドキュメント](https://docs.python.org/ja/3/)などを参照してください。 ## 大文字と小文字 artisoc4では大文字と小文字を区別しません。一方、artisoc Cloudでは大文字と小文字を区別しますので注意してください。 **artisoc4** ``` PrintLn(My.X) //エラーにならない PrintLn(my.x) //小文字でもエラーにならない ``` **artisoc Cloud** ``` print(self.x) # エラーにならない print(self.X) # エージェント座標xは小文字で定義されているので、大文字だとエラー ``` ## コメントアウト **artisoc4** ```//```で定義します。 ``` //これはコメントです ``` **artisoc Cloud** ```#```で定義します。 ``` #これはコメントです ``` ## ## 改行とインデント **artisoc4** artisoc4では、改行とインデントについてのルールはありません。つまり、改行とインデントはコードを見やすくするために挿入するものであって、改行とインデントがなくともコードは問題なく動作します。 ``` //改行とインデントを入れた見やすいコード Agt_Init{ My.X = 3 My.Y = 3 } ``` ``` //改行やインデントがないコードでも問題なく動く Agt_Init{ MY.X = 3 My.Y = 3 } ``` **artisoc Cloud** artisoc Cloudでは、改行とインデントを正しく用いないとエラーになります。 ``` # 正しいコード def agt_init(self): self.x = 3 self.y = 3 ``` ``` # エラーになるコード def agt_init(self): self.x = 3 self.y = 3 # インデントが揃っていないためエラー ``` ## 演算子 四則演算の```+, -, *, /```、代入の```=```など、おおよそ演算子は共通です。 主な違いとしては、「値が等しくない」ことを表す演算子```<>```がartisoc Cloudでは使えません。代わりに```!=```を用います。 **artisoc4** ``` If My.X <> 3 Then [処理] End If ``` **artisoc Cloud** ``` if self.x != 3: [処理] ``` また、artisoc Cloudでは変数に値を加える演算子```+=```を用いることができます。同様に、```-=, *=, /=```を用いることもできます。 **artisoc4** ``` Universe.hensuu = Universe.hensuu + 1 //hensuuに1を加える ``` **artisoc Cloud** ``` Universe.hensuu = Universe.hensuu + 1 # hensuuに1を加える Universe.hensuu += 1 # このように書いてもOK ``` ## 変数の型 **artisoc4** artisoc4では、変数の型はツリーで指定するか、ルールエディタ内で```Dim```を用いて定義します。定義した型に合わない値を代入しようとするとエラーになります。 ``` //整数型変数iを定義し、値を代入 Dim i as integer i = 3 i = "hoge" //整数型変数に文字列型の値を代入しようとするとエラー ``` **artisoc Cloud** artisoc Cloudでは変数の型定義は必要ありません。変数の型は値が代入されたときに決定され、その変数に別の型の値を上書きすることもできます。 ``` i = 3 # 変数iを定義し、整数型の値3を代入 i = "hoge" # 変数iに文字列型の値"hoge"を上書きすることができる ``` ## 変数の初期化 **artisoc4** 変数の値は変数の型に応じて決定されます。例えば、数値型の変数であれば初期値は0、エージェント集合型の変数であれば空の集合となります。 ツリー上で作成した変数であれば、「初期値設定」機能を用いて変数の初期値を変更することも可能です。 ``` Univ_Init{ one = CreateAgt(Universe.hiroba.hito) AddAgt(Universe.people, one) //ツリー上で作成したUniverse変数people(初期値は空)にエージェントを追加 } ``` **artisoc Cloud** ツリー上で作成する変数の場合、初期値は整数の0となります。別の初期値を与えたい場合は、univ_initやagt_initで値を代入する必要があります。 たとえば、エージェント集合型の変数をUniverse変数として作成する場合は、必ずuniv_initで初期化します。 ``` def univ_init(self): Universe.people = set() # Universe変数peopleを空の集合型変数として初期化 one = create_agt(Universe.hiroba.hito) Universe.people.add(one) # 空の集合型変数であるpeopleにエージェントoneを追加 ``` ## エージェントの初期生成 **artisoc4** artisoc4では、ツリーからエージェントのプロパティを操作することでエージェントの初期生成を行うことができます。下図では、シミュレーション開始時にエージェントを10体生成しています。 ```eval_rst .. image:: images/artisoc4_artisocCloud_1.png :align: center :scale: 80% ``` **artisoc Cloud** artisoc Cloudでは、ツリー上からエージェントを生成することはできません。エージェントを生成するときは必ずルールエディタ内でcreate_agt関数を用います。シミュレーション開始時に生成したい場合は、univ_init内に記述します。 ``` def univ_init(self): create_agt(Universe.hiroba.hito, num=10) # シミュレーション開始時にhitoエージェントを10体生成 ```