放浪軍師のXamarin.Formsアプリ開発局

Xamarin.Forms+Prism+ReactivePropertyで素人がAndroidやUWPのアプリを右往左往しながら開発している様を発信していきます。性質上間違いも多いのでご注意ください。

ReactivePropertyを学ぶ

放浪軍師のXamarin.Formsによるアプリ開発
今回はReactivePropertyを学んでみるよ!
まず、初めて訪問された方は以下をお読みください。

www.gunshi.info

ReactivePropertyを学ぶ理由

前回、とりあえずルーレット部分は完成したのですが、そこにたどり着くまでにtwitterで以下のようなアドバイスを受けました。



…いやぁ、すげぇわ。色んな人が助けてくれます。しかも俺なんか足元にも及ばないような方々ですよほんと。
カホントウニイインデスカネ…カネナンテネェゾ…
まぁ結局はReactivePropertyを使わずに動きはしたのですが、どうやらこのReactivePropertyというのは強力な機能であるようで、折角だし学んでみようと思います。
というか、このやり取りの直後にかずきさんがこんな記事を上げています。
blog.okazuki.jp

いやいや、マジで!?

俺の為なの!?この記事!!本気でビビったんだが?
いやまぁ俺の為ってのは言い過ぎかもしれんが…
ここまでしてもらって習得しないわけにはいかねーですわ。

…で、早速YSRさんやかずきさんの記事を拝見させていただきました。
初心者向けで非常にわかりやs…わか…わ…わからん!!!

いやね、絶対に初心者向けに書いてあるはずなのですよ。それは重々伝わってくるのですよ。ただ残念なことに俺が初心者以下なのですよ。=>とか<型>とかの時点でわからんのですよ。

…って事で、この一週間程度。参考書や色んなブログを漁りつつえっちらおっちら習得に励んでみました。

ラムダ式

色んなブログを漁って、=>というのがどうやらラムダ式という奴に関係しているという事を理解しました。このラムダ式ってのは簡単に言うとメソッドの簡略化ですかね。わざわざメソッドを作るまでもない程に小さいが、微妙に汎用性のあるメソッドを名称も付けずに簡単に書いちまう方法。
ボタンを押したときなんかのイベントハンドラやメソッドへの引数とかに用いられる模様です。

いやぁこれを理解するだけでかなり大変でしたね。ほんっと意味わかんねーだったのさ。
だってメソッドをメソッド内で作るなんてVB6では考えられんよ!?メソッドにメソッドを丸ごと引き渡すって何それ!すげー!
(※俺は業務ではVB6という古代の技術にしか携わっていません)

LINQ

こっちは知ってます。我が福岡のご当地アイドルLinQの事でしょ?毎朝アサデス。見てるからね!
loveinq.com

…って事ではないらしいです。
「from」「where」「orderby」「select」なんかを使って絞り込み検索を行うような事が出来るんだそうです。なんだかSQL文みたいですね!実際SQLへのアクセスにも使えるみたいです。…ってか、VB6なんかじゃ足元にも及ばないレベルで便利ですねこれ…。
だってあっちはSQL文を文字列型で記述して一気に渡すんですよ?
ちょっと長くなるだけで絶対ミスりますよそんなん。しかも何をミスったのか一切教えてくれないという…あーまたVB6辞めたくなってきた…辞めさせろやごるぁああああ!!!

…失礼。取り乱しました。

ま、一応SQL文自体は扱ったことある為ラムダ式よりはとっつきやすかったです。ただ、SQL以外での使い道については今のところ思いつかないですね。しかし、このLINQの表記方法自体はSQL文に限った話ではなく、ReactivePropertyにもかかわってくるようです。

ReactiveProperty

他にもいくつかの基礎勉強を経て、ReactivePropertyの件に戻ってきました。
まず前述の記事がよくわからなかったのは、ラムダ式LinQの件もありますが、Prismを使用していたからですね。INotifyPropertyChangedとかそもそも使ってねー!と思ったらViewModelBaseが継承していたという…この件は前々回の記事でkohzy99 さんがコメントで指摘してくれていました。
で、Prismの書き方とReactivePropertyの書き方。どっちがやりやすいか?って事になります。
これに関しては実際にやってみたいと思います。

[ViewModelBase.csの一部 Prism]

//進言コマンドラベル
private string singenLabel;
public string SingenLabel
{
    get { return singenLabel; }
    set { SetProperty(ref singenLabel, value); }
}

[ViewModelBase.csの一部 ReactiveProperty]

//進言コマンドラベル
public ReactiveProperty<string> SingenLabel { get; } = new ReactiveProperty<string>();

うん、圧倒的にReactivePropertyの方が楽でしょう。
Binding文や代入文に.Valueをつけなければいけないというデメリットもありますが、それを差し引いても1行で済むメリットは大きく、これだけの為にReactivePropertyを使っても良いと思いました。
もちろんReactivePropertyにはもっとたくさんの便利機能があるらしいので、使えそうな場面ではバンバン使っていこうと思います。
今後はXamarin+Prism+ReactivePropertyという事になるのかな?

…では、いろいろとアドバイスをくれた方々に感謝しつつ、今日はここまで!