SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

UWPアプリ開発の最前線

Windows電卓の中はどうなっているのだろう?(後編)
~オープンソースのコードを改造してみよう

UWPアプリ開発の最前線 第14回

「坪」の換算率を追加する

 上のGetConversionDataメソッドを見ると、Area_SquareMeter(平方メートル)に1をセットしていることから、平方メートルを基準にした換算率を設定すればよいと分かります。また、Area_SquareCentimeter(平方センチメートル)に0.0001がセットされていますから、「1平方センチメートルは0.0001平方メートル」というように指定すればよいことも分かります。

 1坪は、121分の400平方メートル(=約3.3平方メートル)です。その定義を次のコードのように追加します。

「坪」の換算率を追加(UnitConverterDataLoader.cpp
void UnitConverterDataLoader::GetConversionData(_In_ unordered_map<ViewMode, unordered_map<int, double>>& categoryToUnitConversionMap)
{
    /*categoryId, UnitId, factor*/
    static const vector<UnitData> unitDataList = {
        { ViewMode::Area, UnitConverterUnits::Area_Acre, 4046.8564224 },
        { ViewMode::Area, UnitConverterUnits::Area_SquareMeter, 1 },
        { ViewMode::Area, UnitConverterUnits::Area_SquareFoot, 0.09290304 },
        { ViewMode::Area, UnitConverterUnits::Area_SquareYard, 0.83612736 },
        { ViewMode::Area, UnitConverterUnits::Area_SquareMillimeter, 0.000001 },
        { ViewMode::Area, UnitConverterUnits::Area_SquareCentimeter, 0.0001 },

        // 「坪」を追加
        { ViewMode::Area, UnitConverterUnits::Area_Tsubo, 400.0 / 121.0 },

        { ViewMode::Area, UnitConverterUnits::Area_SquareInch, 0.00064516 },
        ……省略……

 上でUnitConverterUnits::Area_Tsuboというのは、「『坪』の定義を追加する」のところで追加した定数です。また、定義を追加する場所は、unitDataListの初期化コードの中ならどこでもよいです。

完成

 これでようやくビルドが通るようになります。デバッグ実行してみてください。するとどうでしょう、選択肢に[坪]が表示されただけでなく、他の単位との換算もできています(次の画像)。

「坪」の換算ができるようになっていた
左:選択肢に[坪]が表示された
中:[坪]を選択すると換算される
右:逆方向の換算もできる

 「坪」の換算率の定義を追加しただけですが、ロジックは指定された単位に対応した換算率を自動的に取り出して計算してくれるようですね。ロジックに「坪」のための分岐を追加したりする必要はありませんでした。

実際に換算するロジックは?

 ちなみに、実際に換算を実行するロジックはCalcManager/UnitConverter.cppにあります(次の画像)。

実際に換算するロジック
実際に換算するロジック(UnitConverter.cpp

 画面でボタンが押されると、ビューモデルのUnitConverterViewModelクラスにあるOnButtonPressedメソッドが呼び出され、そこからモデルのUnitConverterクラス(上の画像)のSendCommandメソッド(上の画像の上段)が呼び出されます。そのSendCommandメソッドから呼び出されるCalculateメソッド(上の画像の中段)が変換ロジックの中核です。このCalculateメソッドでどのような変換をするか決定し、必要なだけConvertメソッド(上の画像の下段)を呼び出します。Convertメソッドでは、値にオフセットを加算するか、値に換算率を掛け合わせます。今回の「坪」では値に換算率を掛けるだけですが、例えば摂氏と華氏の変換ではオフセットの加減算もあります。

次のページ
「電卓」アプリの構造

関連リンク

この記事は参考になりましたか?

UWPアプリ開発の最前線連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11706 2019/09/24 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー