変数のきほん。~
----
#contents
----
~
*変数とは [#a23d1aac]
データを入れておく箱の事。~
例えばユーザー名をユーザー別に変えたい場合、変えたユーザ名を記憶しておく場所が必要になります。~
それ以外にも性別とか年齢とか高感度とか変化する値を保存しておく場所、それが変数です。~

*変数を使う [#g94616d8]

**変数に値を入れる [#bcc4afbb]
次の三通りの方法があります。~
 $好感度【タブ】100

 $好感度=100

 (set,好感度,100)

詳しく→[[変数への代入には…>変数#z979c961]]~
-プログラムでよくある、変数を使う前の変数宣言はいりません。文字型や整数型などの型もありません。
-変数は[[()>特殊記号一覧#na7d3d63]]で呼び出すので、同じく()で使う[[特殊変数]]や[[情報取得変数]]、[[関数>関数一覧]]、[[イベント]]にある名前は付けないようにしましょう。

**変数を削除する [#j17b42bf]
入れる値を空白にする(何も書かない)と、その変数を削除できます。下記は一例。~

 $好感度【タブ】

 (set,好感度,)


**変数を使う(呼び出す) [#m5541d72]
変数名を[[()>特殊記号一覧#na7d3d63]]で囲むと、処理時に変数の中身に置き換わります。
 :(ユーザ名)さん、おはようございます。


**初回起動時に変数に値を入れておく [#s7cbb76c]
[[satori_conf.txt>ファイル構成#j3e3ee70]]で変数の初期値を設定する事ができます。~
あらかじめ一括で設定しておくといいでしょう。~


**ゴースト終了時の変数の値の保存 [#b7c7538c]
変数は、ゴースト終了時に自動的に[[satori_savedata.txt>ファイル構成#b55914fc]]に保存され、次回起動時に自動的に読み込まれます。~
一時的な変数も明示的に削除しない限り保存されます。

前述した変数の削除を行うと、その変数はsatori_savedata.txtにも保存されません。~
※変数を削除してもsatori_conf.txtにエントリがある場合は、次回起動時にsatori_conf.txtから値を読み込みします。



*変数への代入には… [#z979c961]
以下の3つの方法があります。 

**基本 [#ba3e089e]
 $変数名【タブ】値
右辺を特にいじらず、そのまま変数に代入します。 
計算式であっても文字列として扱われます。 

 $変数テスト【タブ】1+1
 :(変数テスト)っ♪
 ↓
 :1+1っ♪

**計算してから代入 [#xda6d29c]
 $変数名=値
右辺の値を「計算式」として扱い、計算結果を代入します。~
里々で使える演算記号は[[演算子一覧]]を参照のこと。

 $変数テスト=1+1
 :(変数テスト)っ♪
 ↓  
 :2っ♪ 

**set関数を使った代入 [#s10ba504]
 (set,変数名,値)
里々の関数の[[set関数>関数一覧#set]]を使用した代入方法です。 ~
値を「計算式」として扱い、計算結果を代入します。 

 :(set,変数テスト,1+1)(変数テスト)っ♪
 ↓
 :2っ♪

先の二つの方法は変数代入で1行を使用しなければなりませんが、set関数は文中に使用出来る為、次の様な記述が可能になります。
 (when,(条件変数)==1,(set、変数テスト、100),(set、変数テスト、200))


*計算式について [#d3a48973]

一つの式の中で加算、減算より乗算、除算、剰余が優先的に計算されるので 

 $変数=3+6×2
だと結果は「18」ではなく「15」になります。注意。
「3+6」を先に計算したい場合はこう書きます。 

 $変数=(3+6)×2
カッコは必ず半角で。 



*変数が数字かどうか確認する [#bdfe09f2]
is_digitで数字か否かの判断が出来ます。数字なら1、そうでないなら0が返ります。
例えば、こんな。 

 *
 :ユーザさんの歳って、いくつ?
 \![open,inputbox,ユーザ年齢]
 
 *ユーザ年齢を教えてもらった
 >おかしい【タブ】(is_digit,(ユーザ年齢))==0
 :(ユーザ年齢)歳ね。(6)ふ~~~ん。
 :なんだよ。
 
 *おかしい
 :(7)数字を入れろっ!
 :落ち着けっ!

てな具合。
他にも年齢とか誕生日とかは、あり得ない数字とかと合わせてチェックした方がいいと思います。


*変数の存在を確認する [#wcf5291d]
 (変数「ユーザ名」の存在)
とすれば、$ユーザ名という変数が存在すれば1,そうでなければ0が返ります。
変数の中に何が入っているか解らないときは便利。


 *
 >名前を聞いている【タブ】(変数「ユーザ名」の存在)==1
 :そういえばさ、まだユーザさんの名前聞いてないんだけど。
 :メニューの「名前を教える」から教えてや。
 
 *名前を聞いている
 :(5)よっ、(ユーザ名)。
 :(ユーザ名)に名前を教えてもらったのがそんなに嬉しいか?
 :(8)うるさいなぁ。

てな具合に。


ただし、satori_conf.txtの中で予め何かが設定されている場合は、その変数が存在することになります。
里々の場合、デフォルトで


 $ユーザ名【タブ】ユーザ
と書いてある場合がほとんどなので、その場合はこのトークが発生すると、
「ユーザ」という名前をすでに教えてもらっている状態となるので注意。







*中身のないからっぽ変数の扱い [#i4e87261]
里々では中身のない変数は特殊で、いくつかの種類があります。~
エラーを避けるために、できる限り[[satori_conf.txt>ファイル構成#j3e3ee70]]にて初期値の設定をしておくことを推奨します。


**トーク中で呼び出した時 [#q5335ee6]
中身のない、何も設定していない変数を呼び出すと、消えるのではなくそのまま表示されます。
 :(ほげほげ)わー。
 
 #「(ほげほげ)わー。」と表示される
 #「わー。」にはならない

当然、関数やSAORIに使う場合も同じです。~
''数字しか受け付けない関数の場合、エラーや誤動作が発生します。''~


**演算に使った時 [#n014cafd]
主に2つの挙動に分かれます。~
まず、以下の例では中身のない変数は''文字列ではなく「0」として扱われます。''(((変数)==0 で比較すると真(1)が返ります。))~
-[[$と=で変数に計算してから代入>#xda6d29c]]($と【タブ】を使った直接入力では×)
-[[*@での採用条件>特殊記号一覧#q1c400bd]]
->によるジャンプでの条件式

 $新規変数=(新規変数)+1

 *トーク【タブ】(新規変数)>0

 @単語群【タブ】(新規変数)>0

 >ジャンプ【タブ】(新規変数)>0

この場合に限り、空っぽの変数を用いてもエラーが起こりません。~
新しい変数を初期値の設定することなく使えるので便利。~

#br

上記以外で使った場合はトーク中の場合と同じく文字列として扱われます。

 (calc,(新規変数)>0)

この場合は中身がないのに真(1)が返ります。~
これは「(新規変数)」という文字列を1以上の数字として認識するためです。~
おそらく無限大?で、(変数)>1000 でも (変数)>100000 でも真です。




*配列変数 [#pf37f67b]
記事:[[配列変数]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS