変数

「変数」の編集履歴(バックアップ)一覧に戻る

変数 - (2013/07/27 (土) 00:22:49) のソース

>変数とは、よく箱のようなものと例えられており、変数を利用すると数値や文字といった値を格納することができます。

でもここはアマちゃんのための場っぽくないので、詳しいことはカットカットしていきいますね。&u(){[[Yahooでググれ>http://www.google.co.jp/search?q=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%20%E5%A4%89%E6%95%B0%E3%81%A8%E3%81%AF]]}

----
#contents(fromhere=true)
----

*変数一覧表
|BGCOLOR(#ccccff):CENTER:変数型名|BGCOLOR(#ccccff):CENTER:値/参照|BGCOLOR(#ccccff):CENTER:具体例|BGCOLOR(#ccccff):CENTER:説明|BGCOLOR(#ccccff):CENTER:備考|
|[[int>#int]]|値型|5|-2^(63)~2^(63)-1の範囲の整数が扱える|オーバーフローすると例外が発生する|
|[[float>#float]]|値型|3.14|浮動小数点型。±10^(-308)~±10^(308)で有効桁数15桁の巨大な小数が扱える|Kuinに&color(blue){double}は存在しない|
|[[char>#char]]|値型|'K'|文字型。1文字が格納できる。|文字&color(red){列}を扱いたいときは、charの配列「[]char」を用いる|
|[[bool>#bool]]|値型|true|論理型。falseかtrueのどちらかの値をとる。|真偽値を意味し、&color(red){false}は&color(red){偽}、&color(blue){true}は&color(blue){真}を表す|
|[[enum>#enum]]|値型||列挙型。いくつか定義された中からいずれかの値をとる。|詳しくは[[enum>#enum]]を参照|
|[[byte>#byte]]|値型||ビット演算やオーバーフローを駆使する場合に用いる整数型||
|[[テンプレ>#テンプレ]]|値型or参照型|○○|ここに説明が入る|特記事項があればここに|

----

*&aname(int){int型}
**&aname(int説明)説明
>整数の値を扱える変数型です。&br()扱える範囲は-2^(63)~2^(63)-1です。かなり大きい数字も扱えるので、普段は上限や下限を意識する必要はありません。
**&aname(intサンプルコード)サンプルコード(Ver0.031)
#highlight(linenumber){{func Main()
	var a : int      {int型変数aを宣言}
	var b : int :: 1 {宣言と同時に代入も可能}
	var c : int
 
	do a :: 9 {aに9を代入する(do忘れに注意)}
 
	try
		do c :: 2^62 {2の62乗を代入して}
		do c :* 2    {それを2倍すると、c>=(2^63)になるので、例外が発生する!}
	catch(16#00018003) {16#00018003は、オーバーフロー例外のコード番号}
		{オーバーフローの例外を受け取ったらログ表示(実際表示される)}
		do Dbg@Log("cの値が大きすぎたみたいです。")
	finally
		do c :: 7
	end try
	
	do Dbg@Log(a.ToStr() ~ b.ToStr() ~ c.ToStr()) {「917」と表示される}
end func}}
**&aname(int所有メソッド)所有メソッド
***&aname(intAbs){Abs()}
>int型の値の絶対値を返します
-引数
--なし
-戻り値
--int
---値の絶対値が帰ります
-サンプルコード(Ver0.031)
#highlight(linenumber){{func Main()
	var a : int :: -1
	do Dbg@Log(a.ToStr())       {-1 と表示される}
	do Dbg@Log(a.Abs().ToStr()) {1  と表示される}
end func}}

***&aname(intToStr){ToStr()}
>int型変数を文字列に変換します
-引数
--なし
-戻り値
--[]char
---文字列に変換された数値が返されます
---文字のフォーマットまで指定する場合には、後述のToStrF()を利用する
***&aname(intToStrF){ToStrF()}
>フォーマットを指定してint型変数を文字に変換します&br()フォーマットの形式は、ほとんどC言語のprintfと一緒なので、C言語のprintfの仕様を確認してほしい(&u(){[[Wikipedia様はこちらから>http://ja.wikipedia.org/wiki/Printf#.E6.9B.B8.E5.BC.8F.E5.8C.96.E6.96.87.E5.AD.97.E5.88.97]]})
-引数
--[]char
---フォーマット文字列
-戻り値
--[]char
---指定したフォーマットの形で、文字列に変換された数値が返されます
-サンプルコード(Ver0.031)
#highlight(linenumber){{func Main()
	var kuina : int :: 2#100100010111
	do Dbg@Log(kuina.ToStrF("x")) {16進数に変換され、「917」と表示される}
end func}}

----

*&aname(float){float型}
**&aname(float説明)説明
>浮動小数の値を扱える変数型です。&br()扱える範囲は±10^(-308)~±10^(308)です。(有効桁数は15桁)&br()かなり大きい数字も扱えるので、普段は上限や下限を意識する必要はありません。
***&aname(floatサンプルコード)サンプルコード(Ver0.031)
#highlight(linenumber){{func Main()
	var pi : float :: 3.14
	do Dbg@Log(pi.ToStr()) {3.14 と表示される}
end func}}
***&aname(float所有メソッド)所有メソッド
***&aname(floatAbs){Abs()}
>float型の値の絶対値を返します(が、&color(red){Ver0.031では未実装です})
-引数
--なし
-戻り値
--float
---値の絶対値が帰ります
-サンプルコード(Ver0.031)
#highlight(linenumber){{func Main()
	var a : float :: -1.0
	do Dbg@Log(a.ToStr())       {-1.0 と表示される}
	do Dbg@Log(a.Abs().ToStr()) {1.0  と表示される}
	{↑の行で、E9999が発生します。注意されたし。}
end func}}
***&aname(floatToStr){ToStr()}
>float型変数を文字列に変換します
-引数
--なし
-戻り値
--[]char
---文字列に変換された数値が返されます
---文字のフォーマットまで指定する場合には、後述のToStrF()を利用する
***&aname(floatToStrF){ToStrF()}
>フォーマットを指定してfloat型変数を文字に変換します&br()フォーマットの形式は、ほとんどC言語のprintfと一緒なので、C言語のprintfの仕様を確認してほしい(&u(){[[Wikipedia様はこちらから>http://ja.wikipedia.org/wiki/Printf#.E6.9B.B8.E5.BC.8F.E5.8C.96.E6.96.87.E5.AD.97.E5.88.97]]})
-引数
--[]char
---フォーマット文字列
-戻り値
--[]char
---指定したフォーマットの形で、文字列に変換された数値が返されます
-サンプルコード(Ver0.031)
#highlight(linenumber){{func Main()
	var pi : float :: 3.14
	do Dbg@Log(pi.ToStrF("08.4f")) {003.1400 と表示される}
end func}}

----

*&aname(char){char型}
**&aname(char説明)説明
>文字型。1文字が格納できる変数です。&br()この項ではあくまで1文字の変数として紹介します。文字列は[[[]>#array]]へ。&br()なお、int型にキャストすることで、文字コードを得ることが出来る。[要出典]だが、どうせUTF-16LEでしょう(
**&aname(charサンプルコード)サンプルコード(Ver0.031)
#highlight(linenumber){{func Main()
	var a : char :: 'k'  {ダブルクォーテーションマークではないので注意}
	var b : char :: 'く' {全角文字も気にせず入れられる。}
	
	do Dbg@Log(a.ToStr())       {k   と表示される}
	do Dbg@Log((a$int).ToStr()) {107 と表示される([一応]ASCII)}
	
	do Dbg@Log(b.ToStr())       {く    と表示される}
	do Dbg@Log((b$int).ToStr()) {12367 と表示される(UTF-16)}
end func}}
**&aname(char所有メソッド)所有メソッド
***&aname(charToStr){ToStr()}
>char型変数を文字列に変換します
-引数
--なし
-戻り値
--[]char
---文字列に変換された文字が返されます
---Dbg@Logの引数は、charではなく[]charなので、このメソッドを挟まないと&color(red){型が違います}とエラーを吐く

----

*&aname(bool){bool型}
**&aname(bool説明)説明
>論理型。falseかtrueのどちらかの値をとる。&br()C言語などでは0は偽、0以外は真となりますが、Kuinで同様のことをするには、bool型に明示的にキャストする必要があります。&br()文字や文字列は、それ自体をboolにキャストすることは出来ないっぽいです。
**&aname(boolサンプルコード)サンプルコード(Ver0.031)
#highlight(linenumber){{func Main()
	var one : int :: 1 / 3 {1を3で割って}
	var two : int :: 2 / 3 {2も3で割る}
	
	do one :* 3{それぞれを3倍して、}
	do two :* 3{元の値に戻す。}
	
	var res : bool :: (one = two) {同じ値かを比較。true or falseがresに入る}
	
	if(res)
		do Dbg@Log("1  = 2 [Q.E.D]") {こっちを表示}
	else
		do Dbg@Log("1 <> 2 [Q.E.D]")
	end if
	
	do Dbg@Log("res : " ~ res.ToStr() ~ ",one : " ~ one.ToStr() ~ ",two : " ~ two.ToStr())
	{res : true,one : 0,two : 0 と表示される。何故なのかは、考えてみてください。}
	
	if(1 $ bool)
		do Dbg@Log("1 is true") {こっちを表示}
	else
		do Dbg@Log("1 is false")
	end if
	
	if(0 $ bool)
		do Dbg@Log("0 is true")
	else
		do Dbg@Log("0 is false") {こっちを表示}
	end if
end func}}
**&aname(bool所有メソッド)所有メソッド
***&aname(boolToStr){ToStr()}
>bool型変数を文字列に変換します
-引数
--なし
-戻り値
--[]char
---文字列に変換された真偽値が返されます
---文字列としての「true」もしくは「false」が帰ります。

----

*&aname(enum){enum型}
**&aname(enum説明)説明
>列挙型。いくつか定義された中からいずれかの値をとる。&br()bool型がtrueもしくはfalseの2択のいずれかの値をとるならば、enum型は自分で定義した複数の選択肢の中からいずれかの値を取ります。&br()使い道は様々で、enumにリストアップしたものに対して、ユニークなIDを割り振って、それを使って分岐したりするなどの用途があります。
**&aname(enumサンプルコード)サンプルコード(Ver0.031)
#highlight(linenumber){{
{グローバル変数としてenumを定義する。}
enum ErrorCode
	MY_EXCEPTION_1 :: 16#00010000
	MY_EXCEPTION_2
	ASSERT_EXCEPTION :: 16#00018000
	CLASS_CAST_EXCEPTION
	ARRAY_OUT_OF_RANGE
	INT_OVERFLOW
end enum

func Err(err:Kuin@CExcpt)
	switch(err.Code $ @ErrorCode) {ちなみにグローバル変数にアクセスするときは、変数名の先頭に「@」を付ける必要がある}
		case(@ErrorCode#MY_EXCEPTION_1)
			do Dbg@Log("自分で定義したエラーその1が発生しました")
		case(@ErrorCode#MY_EXCEPTION_2)
			do Dbg@Log("自分で定義したエラーその2が発生しました")
		case(@ErrorCode#ASSERT_EXCEPTION)
			do Dbg@Log("assert文で偽となる結果が出ました")
		case(@ErrorCode#CLASS_CAST_EXCEPTION)
			do Dbg@Log("クラスの動的なキャストに失敗しました")
		case(@ErrorCode#ARRAY_OUT_OF_RANGE)
			do Dbg@Log("配列の範囲外参照をしました")
		case(@ErrorCode#INT_OVERFLOW)
			do Dbg@Log("int型の値がオーバーフローしました")
		default
			do Dbg@Log("原因不明のエラーが発生しました")
	end switch
end func

func Main()
	while(true)
		do Kuin@Act()
		if(Input@Pad(0, Input@EBtn#A) > 0) {Aボタンが押されたら}
			var a : int :: 2^62
			do a :* 2 {int型オーバーフローを発生させる}
		end if
		if(Input@Pad(0, Input@EBtn#B) > 0) {Bボタンが押されたら}
			var a : []int :: #[5]int
			do a[999] :: 917 {配列の範囲外参照を発生させる}
		end if
		if(Input@Pad(0, Input@EBtn#C) > 0) {Cボタンが押されたら}
			var a : int :: 10
			assert (a<5) {アサート文で偽を発生させる}
		end if
		if(Input@Pad(0, Input@EBtn#D) > 0) {Dボタンが押されたら}
			throw @ErrorCode#MY_EXCEPTION_1 $ int {自分で定義したエラーを投げる。throw文はintを投げるものなのでキャスト必須。}
		end if
	end while
end func}}

----

*&aname(テンプレ){テンプレ型}
**説明
>ここに変数型の説明が入ります&br()改行するときは&br()で。
**サンプルコード(Ver○○)
#highlight(linenumber){{func Main()
	{ここにサンプルコードをキメろ!}
end func}}
**所有メソッド
***メソッド1(引数1:引数型1,引数2:引数型2,...) : 戻り型
>メソッド1の説明をここに
-引数
--引数1:引数型1
---引数1の説明をここに
--引数2:引数型2
---引数2の説明をここに
--引数3(ry
---ひk(ry
-戻り値
--戻り値型
---戻り値の説明
***メソッド2(引数1:引数型1,引数2:引数型2,...) : 戻り型
>メソッド2の説明をここに
-引数
--ひ(ry
---h(ry
-戻り値
--戻り値(ry
---戻r(ry

----