このページで学べること
1 ドロップダウン
2 引数と返り値のある関数
3 「かつ」と「または」
4 関数の返り値を使った計算
アプリの設計
- 曜日、年齢、性別によってチケットの価格と割引率を自動で計算し、割引後の価格を表示する。
- 通常価格は¥2000。12歳以下は子ども価格で半額。65歳以上はシニア価格で2割引き。
- 木曜日はレディースデイ(女性は3割引き)。月曜日は全員1割引き。
- 割引は通常価格、子ども価格、シニア価格それぞれに適用される。
- 招待コードを入力すると特別な価格(¥500)を表示する。(割引は適用されない)
UIデザイン
今回のアプリでは、ユーザーに入力値を選択させる「ドロップダウン」を使ってみます。テキストインプットを使うと、自由に入力値を決めることができる一方で、予期せぬ値を入力する可能性があります。ですから、決まった内容を入力させたいときには、選択肢を用意するのが安全です。
年齢もドロップダウンにして選ばせるほうがエラーがなくて良いのですが、今回は(面倒くさいので)テキストインプットで実装していきます。
上の図を参考に必要な要素を追加し、idを書き換えてUIを作りましょう。
コーディング
年齢による価格 if-else if-elseブロック
まずは年齢によって価格を変えるように設定しましょう。これにはif-else if-elseブロックを使います。
今回設定した価格は「通常」「子ども」「シニア」の3種類です。1つの条件で処理を3つに分岐させる場合に使うのがif-else if-elseブロックです。Controlにあるif-elseブロックを一度置いてから、右下にある「+」ボタンを押して分岐を増やすと、自動でif-else if-elseブロックに変わります。
価格を記録する変数priceを宣言し、年齢が12歳以下(「 <= 12 」と書きます)なら半額の1000、65歳以上(「 >= 65 」と書きます)なら2割引の1600を変数priceに代入します。このいずれでもないとき、つまり年齢が12歳より大きく65歳未満の場合は、変数priceに2000を代入します。
引数と返り値のある関数
次に割引率について記述していきます。今回は引数として「曜日」と「性別」を与えると、それに応じて割引率を返す関数を作ってみます。関数はonEventブロックの外に作りましょう。
引数とは関数に与える値のことで、関数はこの値をもとに計算します。計算結果はreturnを使って返す(出力する)ことができます。上の図では与えられた値に「day」「sei」と名付けて、dayが文字列MON(ダブルクオーテーションで囲むことを忘れずに!)と等しい場合に割引率0.9を返すようにしています。関数が返した割引率を価格に掛け算すれば、割引後の価格を計算できるという寸法です。
return 値
…関数の中で、返り値を設定する。returnを実行すると、それ以降に記述された処理は実行しない。
return
…返り値がない状態で関数の処理を終了させる。
もう一つの割引は「木曜日かつ女性」の場合についてです。2つの条件を同時に満たしている場合を記述する際、2つの条件を「&&」で結びます。この場合は「dayが文字列THUと等しい」かつ「seiが文字列女性と等しい」という2つの条件を&&で結びつけています。
条件1 && 条件2
…条件1かつ条件2の場合(両方を満たす場合)にtrueとなる
条件1 || 条件2
…条件1または条件2の場合(片方を満たす場合)にtrueとなる
最後に、どの条件にも当てはまらないときに割引率1を返すようにすれば、関数の完成です。
入力値を関数に代入して計算
それでは関数waribikiを呼び出して、価格を計算してみましょう。
引数のある関数を呼び出すためには、関数名(引数1、引数2…)と記述しなければなりません。今回作った関数waribikiは「day」「sei」という引数を設定しましたので、その順番で関数に引数を与えてあげます。
10行目の緑色のブロックが関数waribikiを呼び出しているブロックです。→ボタンを押して引数を増やし、1つ目に曜日、2つ目に性別を代入しています。
このように呼び出すと関数waribikiは与えられた曜日と性別をもとに処理を実行し、適切な割引率を返してくれます。この返ってきた値を変数priceに掛け算し、ラベルに表示させます。実際に動かしてみて確認しましょう。
招待コードによる割引
最後に招待コードによる割引を実装しましょう。招待コードに「Welcome」を入力すると、曜日、性別、年齢に関係なく¥500になるということですから、最初に招待コードが正しいかどうかを判断して、正しいコードの場合はラベルに¥500を表示して処理を終了してしまえば良いのです。
onEventの処理の最初に、図のような処理を書き加えてください。ただし、return;の部分はテキスト表示にして手書きしています。(code.orgには返り値のないreturnブロックが用意されていない)
完成
これでアプリが完成しました。別な割引を独自に設定して、いろいろな条件の元でアプリが正しく動くかを確認してみましょう。
コメント