変数

「変数」の編集履歴(バックアップ)一覧はこちら

変数 - (2013/09/19 (木) 22:23:26) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

>変数とは、よく箱のようなものと例えられており、変数を利用すると数値や文字といった値を格納することができます。 でもここはアマちゃんのための場っぽくないので、詳しいことはカットカットしていきますね。&u(){[[Yahooでググれ>https://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]]|値型||ビット演算やオーバーフローを駆使する場合に用いる整数型|| |[[[](array)>#array]]|参照型|[9,1,7]int&br()"kuina"|動的配列。値が複数連なったものを表す。&br()Kuinでは、文字列はcharの配列([]char)として扱う|O(1)でアクセス出来る素敵データ構造| |[[テンプレ>#テンプレ]]|値型or参照型|○○|ここに説明が入る|特記事項があればここに| ---- *&aname(int){int型} **&aname(int説明)説明 >整数の値を扱える変数型です。&br()扱える範囲は-2^(63)~2^(63)-1です。かなり大きい数字も扱えるので、普段は上限や下限を意識する必要はありません。 **&aname(intサンプルコード)サンプルコード(Ver1.00) #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(3003) {3003は、int型オーバーフロー例外のコード番号} {オーバーフローの例外を受け取ったらログ表示(実際表示される)} do Dbg@Log("cの値が大きすぎたみたいです。") do c :: 7 {それっぽい数字に戻す} end try do Dbg@Log(a.ToStr() ~ b.ToStr() ~ c.ToStr()) {「917」と表示される} end func}} **&aname(int所有メソッド)所有メソッド ***&aname(intAbs){Abs()} >int型の値の絶対値を返します -引数 --なし -戻り値 --int ---値の絶対値が帰ります -サンプルコード(Ver1.00) #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 ---指定したフォーマットの形で、文字列に変換された数値が返されます -サンプルコード(Ver1.00) #highlight(linenumber){{func Main() var kuina : int :: 2#100100010111 {2進数で値を代入する} do Dbg@Log(kuina.ToStrF("x")) {16進数に変換された文字列として、「917」と表示される} end func}} ---- *&aname(float){float型} **&aname(float説明)説明 >浮動小数の値を扱える変数型です。&br()扱える範囲は±10^(-308)~±10^(308)です。(有効桁数は15桁)&br()かなり大きい数字も扱えるので、普段は上限や下限を意識する必要はありません。 **&aname(floatサンプルコード)サンプルコード(Ver1.00) #highlight(linenumber){{func Main() var pi : float :: 3.14 do Dbg@Log(pi.ToStr()) {3.14 と表示される} end func}} **&aname(float所有メソッド)所有メソッド ***&aname(floatAbs){Abs()} >float型の値の絶対値を返します -引数 --なし -戻り値 --float ---値の絶対値が帰ります -サンプルコード(Ver1.00) #highlight(linenumber){{func Main() var a : float :: -1.79 do Dbg@Log(a.ToStr()) {-1.79 と表示される} do Dbg@Log(a.Abs().ToStr()) {1.79 と表示される} 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 ---指定したフォーマットの形で、文字列に変換された数値が返されます -サンプルコード(Ver1.00) #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サンプルコード)サンプルコード(Ver1.00) #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サンプルコード)サンプルコード(Ver1.00) #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サンプルコード)サンプルコード(Ver1.00) #highlight(linenumber){{ {グローバル変数としてenumを定義する。} enum ErrorCode {中略} WINDOW_CLOSING :: 500 {中略} MY_EXCEPTION :: 2000 {中略} ASSERT_EXCEPTION :: 3000 ARRAY_OUT_OF_RANGE :: 3002 INT_OVERFLOW {中略} end enum {try-catch-finally構文でキャッチされなかったエラーは、全てこのErr関数に飛んでくる(闇Kuin活用テクニック)} func Err(err:Kuin@CExcpt) { Kuin@CExcept型のプロパティであるCodeには、実行時エラーのコード番号がint型で入っている。 それをErrorCode型のenumにキャストしてから、swich文で分岐させる(可読性の向上ってやつです☆) } switch(err.Code $ @ErrorCode) {ちなみにグローバル変数にアクセスするときは、変数名の先頭に「@」を付ける必要がある} case(@ErrorCode#MY_EXCEPTION) do Dbg@Log("自分で定義したエラーが発生しました") case(@ErrorCode#ASSERT_EXCEPTION) do Dbg@Log("assert文で偽となる結果が出ました") case(@ErrorCode#ARRAY_OUT_OF_RANGE) do Dbg@Log("配列の範囲外参照をしました") case(@ErrorCode#INT_OVERFLOW) do Dbg@Log("int型の値がオーバーフローしました") case(@ErrorCode#WINDOW_CLOSING) do Dbg@Log("ウィンドウを閉じます") default do Dbg@Log("原因不明のエラーが発生しました") do Dbg@Log(err.Code.ToStr()) end switch end func func Main() do Dbg@Log("キーボードでZXCVのいずれかのキーを入力してください。") do Dbg@Log("意図的に発生させたエラーによって、例外が起こります") 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 $ int {自分で定義したエラーを投げる。throw文はintを投げるものなのでキャスト必須。} end if end while end func}} ---- *&aname(array){[](array)型} **&aname(array説明)説明 >動的配列。値が複数連なったものを表す。&br()Kuinでは文字列を扱いたい場合には、char型の配列として扱います。&br()応用的な使い方として、クラス型の配列を作ることなんかも可能です。詳しくはサンプルコードで。 **&aname(arrayサンプルコード)サンプルコード(Ver1.00) #highlight(linenumber){{ func Main() {サンプル① int型配列の例} do Dbg@Log("サンプル1開始") block testIntArray do Kuin@Act() var intArr : []int :: [9,1,7]int {int型配列を宣言し、[0]番目から順に9,1,7という数字を入れる} var dummy : []int :: #[5]int {今回は使用しないが、サイズ5の空のint型配列を作成したいときはこう書く} for i(0,intArr.Len()-1,1) do Dbg@Log(intArr[i].ToStr()) {配列の[0]番目から配列の最後の要素までを列挙する} end for end block do Dbg@Log("サンプル1終了") {サンプル② char型配列(文字列)の例} do Dbg@Log("サンプル2開始") block testCharArray do Kuin@Act() var str1 : []char :: "kuina" {[]charの配列の初期化では、ダブルクオーテーションの構文糖が存在する} var str2 : []char :: ['c','h','a','n']char {こっちのほうが原理的な書き方ではある(誰得な記法ではあるが)} var str3 : []char :: []char {空っぽのChar型配列を作成することも可能} do str3 :~ "6sai" {このように、空っぽのを作ったあとで、中身を追加で結合してくという方法もある。} {因みに ~ という演算子は配列同士を結合して1つの配列にする演算子だったりする} do Dbg@Log(str1 ~ " " ~ str2 ~ " " ~ str3) {kuina chan 6sai と表示される} end block do Dbg@Log("サンプル2終了") {サンプル③ char型配列(文字列)の配列の例(いわゆる二次元配列)} do Dbg@Log("サンプル3開始") block testArrayOfCharArray do Kuin@Act() {初期化と同時に文字列を代入するには以下のようにする} var strs1 : [][]char :: ["kuina","chan","6sai"][]char {とりあえず空の2次配列を作り、後から付け足していく場合は以下のように書く} var strs2 : [][]char :: [][]char do strs2 :~ ["くいなちゃん"][]char do strs2 :~ ["朝から"][]char do strs2 :~ ["元気"][]char { {今回は使用しないが、int型などでは以下のようになる(初期化と同時に代入例)} var intArr1 : [][]int :: [[9,1,7]int,[3,1,4]int,[7,1,9]int][]int {今回は使用しないが、int型で空っぽ配列を作成後に、後から付け足し例も載せておく} var intArr2 : [][]int :: [][]int do intArr2 :~ [[9,1,7]int][]int do intArr2 :~ [[3,1,4]int][]int do intArr2 :~ [[7,1,9]int][]int {これで、例えばintArr1[1][2]とすれば、 4 という数値が得られる。} do Dbg@Log(intArr1[1][2].ToStr()) } var mes : []char :: "" for i(0,strs1.Len()-1,1) do mes :~ strs1[i] ~ " " end for do Dbg@Log(mes) {kuina chan 6sai と表示される} do mes :: "" for i(0,strs2.Len()-1,1) do mes :~ strs2[i] ~ " " end for do Dbg@Log(mes) {くいなちゃん 朝から 元気 と表示される} end block do Dbg@Log("サンプル3終了") {サンプル④ クラス型の配列} do Dbg@Log("サンプル4開始") block testCTexArray {Kuin同梱サンプルの0007_fontや、自分で用意したものなど、なんでもいいからTrueTypeFontを手に入れてくる} var fontName : []char :: "font.ttf" var fontSize : int :: 24 var fontMargin : int :: 5 var font : Draw@CFont {ファイルの存在の有無を確認してから代入する} if(File@ReadFile("Res\\" ~ fontName) <>& null) {nullは参照なので比較は <>& を使う。超注意} do font :: Draw@LoadFont(fontName) else do Dbg@Log(fontName ~ "が見つかりません。Resフォルダに" ~ fontName ~ "を入れてください") break testCTexArray end if {空っぽのDraw@CTex型配列を作成する。基本的な部分はサンプル②と同じだよね?} var texArr : []Draw@CTex :: []Draw@CTex {MakeTexの戻り値を配列化して配列結合する} do texArr :~ [font.MakeTex(fontSize,"くいなちゃん",fontMargin)]Draw@CTex do texArr :~ [font.MakeTex(fontSize,"朝から",fontMargin)]Draw@CTex do texArr :~ [font.MakeTex(fontSize,"元気",fontMargin)]Draw@CTex do Dbg@Log("文字を描画します。Zボタンを押すと終了します") while(Input@Pad(0, Input@EBtn#A) = 0) for i(0,texArr.Len()-1,1) do texArr[i].Draw(0.0,0.0,texArr[i].Width()$float,texArr[i].Height()$float,0.0,(i*(texArr[i].Height()+10))$float,1.0,1.0,1.0,1.0) end for do Kuin@Act() end while end block do Dbg@Log("サンプル4終了") end func }} **&aname(array所有メソッド)所有メソッド ***&aname(arrayLen){Len()} >配列の長さを返します -引数 --なし -戻り値 --int ---配列の長さがint型で返ってきます ---配列連結演算子「~」を用いて結合すると、結合の前後で値は当然変わります() -サンプルコード #highlight(linenumber){{func Main() {散々使ってますので↑ので許してください()} 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 ----
>変数とは、よく箱のようなものと例えられており、変数を利用すると数値や文字といった値を格納することができます。 でもここはアマちゃんのための場っぽくないので、詳しいことはカットカットしていきますね。&u(){[[Yahooでググれ>https://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]]|値型||ビット演算やオーバーフローを駆使する場合に用いる整数型|| |[[[](array)>#array]]|参照型|[9,1,7]int&br()"kuina"|動的配列。値が複数連なったものを表す。&br()Kuinでは、文字列はcharの配列([]char)として扱う|O(1)でアクセス出来る素敵データ構造| |[[テンプレ>#テンプレ]]|値型or参照型|○○|ここに説明が入る|特記事項があればここに| ---- *&aname(int){int型} **&aname(int説明)説明 >整数の値を扱える変数型です。&br()扱える範囲は-2^(63)~2^(63)-1です。かなり大きい数字も扱えるので、普段は上限や下限を意識する必要はありません。 **&aname(intサンプルコード)サンプルコード(Ver1.00) #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(3003) {3003は、int型オーバーフロー例外のコード番号} {オーバーフローの例外を受け取ったらログ表示(実際表示される)} do Dbg@Log("cの値が大きすぎたみたいです。") do c :: 7 {それっぽい数字に戻す} end try do Dbg@Log(a.ToStr() ~ b.ToStr() ~ c.ToStr()) {「917」と表示される} end func}} **&aname(int所有メソッド)所有メソッド ***&aname(intAbs){Abs()} >int型の値の絶対値を返します -引数 --なし -戻り値 --int ---値の絶対値が帰ります -サンプルコード(Ver1.00) #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 ---指定したフォーマットの形で、文字列に変換された数値が返されます -サンプルコード(Ver1.00) #highlight(linenumber){{func Main() var kuina : int :: 2#100100010111 {2進数で値を代入する} do Dbg@Log(kuina.ToStrF("x")) {16進数に変換された文字列として、「917」と表示される} end func}} ---- *&aname(float){float型} **&aname(float説明)説明 >浮動小数の値を扱える変数型です。&br()扱える範囲は±10^(-308)~±10^(308)です。(有効桁数は15桁)&br()かなり大きい数字も扱えるので、普段は上限や下限を意識する必要はありません。 **&aname(floatサンプルコード)サンプルコード(Ver1.00) #highlight(linenumber){{func Main() var pi : float :: 3.14 do Dbg@Log(pi.ToStr()) {3.14 と表示される} end func}} **&aname(float所有メソッド)所有メソッド ***&aname(floatAbs){Abs()} >float型の値の絶対値を返します -引数 --なし -戻り値 --float ---値の絶対値が帰ります -サンプルコード(Ver1.00) #highlight(linenumber){{func Main() var a : float :: -1.79 do Dbg@Log(a.ToStr()) {-1.79 と表示される} do Dbg@Log(a.Abs().ToStr()) {1.79 と表示される} 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 ---指定したフォーマットの形で、文字列に変換された数値が返されます -サンプルコード(Ver1.00) #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サンプルコード)サンプルコード(Ver1.00) #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サンプルコード)サンプルコード(Ver1.00) #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サンプルコード)サンプルコード(Ver1.00) #highlight(linenumber){{ {グローバル変数としてenumを定義する。} enum ErrorCode {中略} WINDOW_CLOSING :: 500 {中略} MY_EXCEPTION :: 2000 {中略} ASSERT_EXCEPTION :: 3000 ARRAY_OUT_OF_RANGE :: 3002 INT_OVERFLOW {中略} end enum {try-catch-finally構文でキャッチされなかったエラーは、全てこのErr関数に飛んでくる(闇Kuin活用テクニック)} func Err(err:Kuin@CExcpt) { Kuin@CExcept型のプロパティであるCodeには、実行時エラーのコード番号がint型で入っている。 それをErrorCode型のenumにキャストしてから、swich文で分岐させる(可読性の向上ってやつです☆) } switch(err.Code $ @ErrorCode) {ちなみにグローバル変数にアクセスするときは、変数名の先頭に「@」を付ける必要がある} case(@ErrorCode#MY_EXCEPTION) do Dbg@Log("自分で定義したエラーが発生しました") case(@ErrorCode#ASSERT_EXCEPTION) do Dbg@Log("assert文で偽となる結果が出ました") case(@ErrorCode#ARRAY_OUT_OF_RANGE) do Dbg@Log("配列の範囲外参照をしました") case(@ErrorCode#INT_OVERFLOW) do Dbg@Log("int型の値がオーバーフローしました") case(@ErrorCode#WINDOW_CLOSING) do Dbg@Log("ウィンドウを閉じます") default do Dbg@Log("原因不明のエラーが発生しました") do Dbg@Log(err.Code.ToStr()) end switch end func func Main() do Dbg@Log("キーボードでZXCVのいずれかのキーを入力してください。") do Dbg@Log("意図的に発生させたエラーによって、例外が起こります") 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 $ int {自分で定義したエラーを投げる。throw文はintを投げるものなのでキャスト必須。} end if end while end func}} ---- *&aname(array){[](array)型} **&aname(array説明)説明 >動的配列。値が複数連なったものを表す。&br()Kuinでは文字列を扱いたい場合には、char型の配列として扱います。&br()応用的な使い方として、クラス型の配列を作ることなんかも可能です。詳しくはサンプルコードで。 **&aname(arrayサンプルコード)サンプルコード(Ver1.00) #highlight(linenumber){{ func Main() {サンプル① int型配列の例} do Dbg@Log("サンプル1開始") block testIntArray do Kuin@Act() var intArr : []int :: [9,1,7]int {int型配列を宣言し、[0]番目から順に9,1,7という数字を入れる} var dummy : []int :: #[5]int {今回は使用しないが、サイズ5の空のint型配列を作成したいときはこう書く} for i(0,intArr.Len()-1,1) do Dbg@Log(intArr[i].ToStr()) {配列の[0]番目から配列の最後の要素までを列挙する} end for end block do Dbg@Log("サンプル1終了") {サンプル② char型配列(文字列)の例} do Dbg@Log("サンプル2開始") block testCharArray do Kuin@Act() var str1 : []char :: "kuina" {[]charの配列の初期化では、ダブルクオーテーションの構文糖が存在する} var str2 : []char :: ['c','h','a','n']char {こっちのほうが原理的な書き方ではある(誰得な記法ではあるが)} var str3 : []char :: []char {空っぽのChar型配列を作成することも可能} do str3 :~ "6sai" {このように、空っぽのを作ったあとで、中身を追加で結合してくという方法もある。} {因みに ~ という演算子は配列同士を結合して1つの配列にする演算子だったりする} do Dbg@Log(str1 ~ " " ~ str2 ~ " " ~ str3) {kuina chan 6sai と表示される} end block do Dbg@Log("サンプル2終了") {サンプル③ char型配列(文字列)の配列の例(いわゆる二次元配列)} do Dbg@Log("サンプル3開始") block testArrayOfCharArray do Kuin@Act() {初期化と同時に文字列を代入するには以下のようにする} var strs1 : [][]char :: ["kuina","chan","6sai"][]char {とりあえず空の2次配列を作り、後から付け足していく場合は以下のように書く} var strs2 : [][]char :: [][]char do strs2 :~ ["くいなちゃん"][]char do strs2 :~ ["朝から"][]char do strs2 :~ ["元気"][]char { {今回は使用しないが、int型などでは以下のようになる(初期化と同時に代入例)} var intArr1 : [][]int :: [[9,1,7]int,[3,1,4]int,[7,1,9]int][]int {今回は使用しないが、int型で空っぽ配列を作成後に、後から付け足し例も載せておく} var intArr2 : [][]int :: [][]int do intArr2 :~ [[9,1,7]int][]int do intArr2 :~ [[3,1,4]int][]int do intArr2 :~ [[7,1,9]int][]int {これで、例えばintArr1[1][2]とすれば、 4 という数値が得られる。} do Dbg@Log(intArr1[1][2].ToStr()) } var mes : []char :: "" for i(0,strs1.Len()-1,1) do mes :~ strs1[i] ~ " " end for do Dbg@Log(mes) {kuina chan 6sai と表示される} do mes :: "" for i(0,strs2.Len()-1,1) do mes :~ strs2[i] ~ " " end for do Dbg@Log(mes) {くいなちゃん 朝から 元気 と表示される} end block do Dbg@Log("サンプル3終了") {サンプル④ クラス型の配列} do Dbg@Log("サンプル4開始") block testCTexArray {Kuin同梱サンプルの0007_fontや、自分で用意したものなど、なんでもいいからTrueTypeFontを手に入れてくる} var fontName : []char :: "font.ttf" var fontSize : int :: 24 var fontMargin : int :: 5 var font : Draw@CFont {ファイルの存在の有無を確認してから代入する} if(File@ReadFile("Res\\" ~ fontName) <>& null) {nullは参照なので比較は <>& を使う。超注意} do font :: Draw@LoadFont(fontName) else do Dbg@Log(fontName ~ "が見つかりません。Resフォルダに" ~ fontName ~ "を入れてください") break testCTexArray end if {空っぽのDraw@CTex型配列を作成する。基本的な部分はサンプル②と同じだよね?} var texArr : []Draw@CTex :: []Draw@CTex {MakeTexの戻り値を配列化して配列結合する} do texArr :~ [font.MakeTex(fontSize,"くいなちゃん",fontMargin)]Draw@CTex do texArr :~ [font.MakeTex(fontSize,"朝から",fontMargin)]Draw@CTex do texArr :~ [font.MakeTex(fontSize,"元気",fontMargin)]Draw@CTex do Dbg@Log("文字を描画します。Zボタンを押すと終了します") while(Input@Pad(0, Input@EBtn#A) = 0) for i(0,texArr.Len()-1,1) do texArr[i].Draw(0.0,0.0,texArr[i].Width()$float,texArr[i].Height()$float,0.0,(i*(texArr[i].Height()+10))$float,1.0,1.0,1.0,1.0) end for do Kuin@Act() end while end block do Dbg@Log("サンプル4終了") end func}} **&aname(array所有メソッド)所有メソッド ***&aname(arrayLen){Len()} >配列の長さを返します -引数 --なし -戻り値 --int ---配列の長さがint型で返ってきます ---配列連結演算子「~」を用いて結合すると、結合の前後で値は当然変わります() -サンプルコード #highlight(linenumber){{func Main() {散々使ってますので↑ので許してください()} 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 ----

表示オプション

横に並べて表示:
変化行の前後のみ表示: