Garmin Connect IQ SDK プログラミング(第3回):変数 自転車けんちゃん

大学サークルで自転車に魅せられて30年以上たちました。 いまだにロングライドと言えば日の出から日の入りまで 走っています。

ホーム > Garmin Connect IQ プログラミング > Garmin Connect IQ SDK プログラミング(第3回):変数

Garmin Connect IQ SDK プログラミング(第3回):変数

変数を定義してみましょう

Monke Cの変数定義はJava Scriptと同様に定義はvarのみです。
変数の型は以下の種類があります。
型は代入または演算のときに自動的に判定されます。

変数の型(自動判定の為、全てvarで定義)
Number 32ビット符号付整数
Long 64ビット符号付整数
Floats 32ビット浮動小数点
Double 64ビット浮動小数点
Booleans 論理型 true/false
Strings 文字列
Objects インスタンスオブジェクト (classで定義される)
Arrays "new [X]"で定義される配列。'X'は配列の大きさ。
Dictionaries{}で定義される辞書配列。
配列要素に別名を付けて呼び出せる。


型を明示的に示す場合は以下のようにします。

変数型の指定方法
var x = 5; 数値で32ビット符号付整数
var y = 6.0; 小数点があると浮動小数点型
var l = 5l; 小文字の"l"エルで64ビット符号付整数
var d = 4.0d; 小文字の"d"で64ビット浮動小数点
var bool = true; true/falseで論理型
var arr = new [20 + 30];配列:要素数50
var chr = 'H'; 文字
var str = "Hello"; 文字列
var dict = { x=>y }; 辞書型:キーは5、値は6.0


型を変換する場合は以下のようにします。
  • <値または変数>.toXXXX()
たとえば文字列"11"を数値に変換する場合は
  • "11".toInteger
のように記述します。

変数型の変換
toNumber() 32ビット符号付整数
toLong() 64ビット符号付整数
toFloat() 32ビット浮動小数点に変換
toDouble() 64ビット浮動小数点に変換


これらのクラスはそれぞれの変数に定義されているクラスで、
newでのインスタンス化無し(Arrayを除く)に使用できる。
たとえばDoubleには
toDouble、toFloat、toLong、toNumber
のクラスが定義されている。

詳細は
"API Docs"のDouble、Float、Long、String、Number、Array、Dictionaryに記載されている。
  • <Install Directory>\connectiq\connectiq-sdk-win-2.1.0\doc\_index.html


第2回目で作成したコードを元に修正を加えてテストします。

2.ソースの修正

sourceフォルダの.mcのMonkey Cソースコードを修正します。
  • DataFieldView.mc:データ表示クラス

コードの指定部分にテストコードを埋め込みます。

DataFieldView.mcの修正箇所
//DataFieldView.mcにテストコードを埋め込む
    :
    :
    function compute(info) {
        Sys.println("View : compute");
        // infoから経過時間(msec)を取り出して秒に変換
        // varは変数の定義。変数の型は自動で認識される。
        var value_elapsedTime =
            info.elapsedTime * MILLISECONDS_TO_SECONDS;
※
※ここ(returnの前、最後から4行目)にテストコードを埋め込む
※
        // 経過時間をリターンして表示させる
        return value_elapsedTime;
    }
}

以下のコードをコピーペーストしてください。
テストコードの結果はConsoleにプリントされます。
テストコードの最後まで実行すると以下の行でエラーで停止します。
  • Sys.println(1,1);

DataFieldView.mcに埋め込むコード
//"※"箇所に埋め込むテストコード

//変数定義
//型未定
var a;
a=null;
Sys.println("Integer a = "+a);

//Integer型代入
a = 1;
Sys.println("Integer a = "+a);

//符号付整数に1を加算
a=a + 1;
Sys.println("Integer a + 1 = "+a);

//整数に浮動小数点を加算
a=a + 1.5;
Sys.println("Integer a + Float 1.5 = "+a);


//符号付整数に変換
//小数点以下は切り捨てられる
a=a.toNumber();
Sys.println("Float a is casted to Number a = "+a);


//同じ変数に文字が代入できる
a=a.toString();
Sys.println("Numbera is casted to String a = "+a);

//文字に数字の1を加算
//数字が文字に変換されて文字連結
a=a + 1;
Sys.println("String a + Ingeger 1 ="+a);

//***エラーを発生させて強制的に停止***
Sys.println(1,1);


自動変換の規則がだいたいわかったでしょうか。
文字+数字は文字に変換して文字結合。
数字同士の場合はビット数の大きい方、精度の高い方に合わせます。
精度の低い方に型変換すると端数は切り捨て。

中学でリンゴとみかんは足せません。
グラムとメートルも足してはいけませんと習ったのに
Monkey CやJava Scriptは文字と数字が足せるのですね。汗)
コメントの投稿













管理者にだけ表示を許可する
プロフィール

けんちゃん

Author:けんちゃん
東京在住、和歌山生まれ
自称、和田峠ニスト
中華カーボンと手組みホイールでシクロクロス参戦中