2012年12月6日木曜日

[Titanium奮闘記7日目シングルコンテキストと連想配列 #TitaniumJP


○つまづく人が多いと聞いてたものの


tableViewはかなりつまづく人が多いと聞いていたんですが、ここら辺に関してはほとんどつまづくことなく実装できました。ギターでいうところの「Fコードが押さえられない」的なことだと思ってたんだけどなぁ。
それ以前に、プログラミングって開発環境を整えるだけで挫折する人多いですよね…実際すっごい難しいと思います…。



○前回の画面遷移で言えば良かった話

シングルコンテキストとマルチコンテキストの話です。

Titaniumで切り分けた別のクラスでグローバル変数を用意したいとき、どうしますか?
window間でどうやって変数を共有するか、ですね。
Titanium2.0からはシングルコンテキストが推奨され、それを利用すると変数受け渡しが随分ときれいになりそうなので、まとめてみます。
http://yuriponx.com/2012/06/01/titanium-mobile2-0%E3%81%A7%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0%E3%82%92%E8%80%83%E3%81%88%E3%82%8B/
シングルコンテキスト?マルチコンテキスト?なんですかそれ。
っていうか女子大生でこのくらい情報量のあることが書けるのかぁ…すげーなぁ…

自分なりの解釈ですが、シングルコンテキストは一つのウィンドウで済むことはそれだけで完結させなさいってこと。
つまり昨日していた、新しいウィンドウを作ってオープンさせる方法はあまり良くないってことですよね。ガーン…orz

一方で欠点としては

* コードを書くのが若干難しくなる
というものがあると思う。
特に非プログラマにとっては敷居が高い気がする。
まあ変化の速いTitanium界隈で現状そんな話がありますよということで。
マルチコンテキスト、ダメ絶対。とかそういう話ではない。
http://higelog.brassworks.jp/?p=1724



まぁそれにTi.Appでうまく行けてるみたいだし…強行突破するか…?



○連想配列を並び替える

これはTitaniumというよりJSのお話ですね。

JSでは配列のソートをさせる関数としてsort()というものがあります。

hogeArr =[1, 5, 8, 3];
alert(hogeArr); // 1, 5, 8, 3
hogeArr.sort();
alert(hogeArr); // 1, 3, 5, 8

カッコの中に関数を入れると並び方の条件を加えることが出来ます。

hogeArr =[1, 5, 4, 3, 9];
alert(hogeArr); // 1, 5, 4, 3, 9
hogeArr.sort(revSort);
alert(hogeArr); // 9, 5, 4, 3, 1

function revSort(a,b){
    if (b > a){ return 1} else { return -1};
}

ただ、連想配列の場合はなんかうまく行きません。
僕はこんな感じで回避しました。

var dataArr = [
{nearDist:586,nearId:0},
{nearDist:1067,nearId:1},
{nearDist:381,nearId:3},
{nearDist:3950,nearId:4},
{nearDist:2886,nearId:5}
];

dataArr.sort(renSortFunc);
alert(dataArr);

function renSortFunc(a,b) {return (a.nearDist > b.nearDist) ? 1 : -1;}

そういえば「?」を使った条件分岐初めて使ったなぁ。
条件が短いとこっちのほうが書きやすいし分かりやすいかも。



○明日の予定

・スポット情報の部分の実装
・答え合わせボタンの実装と閾値設定

今週はTitanium以外にしないといけないことがいくつかあるのでなかなか進まないですね…。
とは言いつつ、アプリ自体は少しずつですが確実に出来てきているのでこの調子で行きたいと思います。

0 件のコメント:

コメントを投稿