文字か数字にして比較する ~ プログラムが魔法でないとわかればプログラマになれる 16

色々な比較方法

大小を比較する場合は > (大なり)もしくは < (小なり)を使いました。似たもので (大なりイコール) と  (小なりイコール)があります。使い方は同じですが「≧」と「≦」は英文字として簡単に使えませんのでプログラミング言語では >= と書きます。>= の2文字をスペースを入れずに続けて書きます。反対は <= です。大小を比較する記号の意味をおさらいしましょう。

a > b      a は b より大きい
a < b      a は b より小さい
a >= b     a は b 以上
a <= b     a は b 以下

ここまでは大きいか小さいかを比べていましたが「等しいかどうか」という比較をしたいときもあります。

if (age == 60) {
    alert("還暦です");
}

これは age の内容が 60 の場合のみ「還暦です」と表示するプログラムです。60より大きくても60より小さくても還暦とは表示されません。イコールを2つ、スペースを入れずに入力した == に注目してください。

a == b

この式を計算すると、a と b が等しければ true 、等しくなければ false になります。 等しい という意味であれば単に = を使いたくなりますが、 = は次のような名前をつける命令で既に使われています。

let age = 50;

等しいかどうかを確認するためには == を使って計算しなければならないとプログラミング言語の決まりとして受け入れるしかありません。

複雑な条件は文字か数字に置き換える

例として「もし今日が誕生日だったら」という条件を前回書きました。確かにイエスかノーかで答えられますのでプログラムとして扱える条件です。ですが、この条件は本当にプログラムに書くことができるのでしょうか。月日の比較はいくつか方法がありますが、基本的には数字か文字で比較できるように工夫します。順番に考えてみましょう。

「誕生日」は「ある人が生まれた年月日」という意味になるでしょう。そして「今日が誕生日だったら」という文脈から「年月日」の「年」が不要であることがわかります。「年」を比較対象に入れてしまったら永遠に誕生日はきません。月日(何月何日)を比較すれば良いということがわかります。

次に「誕生日」の表現方法を考えます。「12月31日」「12/31」「1231」などいくつか思いつきます。どの表現方法でも問題ありませんが「誕生日」と「今日」とで同じ表現方法にする必要があります。人間の場合「12月31日 と 12/31 は等しいですか?」と聞かれたら多くの人は「等しい」と答えるでしょう。ですが「12月31日」と「12/31」は違う文字です。そのためプログラミング言語の条件で「等しい」と判断させることはできません。「12月31日」と「12月31日」であれば等しいと判断できます。

月日の表し方を「XX/YY」とする、と決めたとしましょう。最後に残っているのは「誕生日」と「今日」をどうやって「XX/YY」に置き換えるかです。「誕生日」は最初から「12/31」のように文字としておけば良いでしょう。「今日」はコンピューターの現在時刻から文字を作る命令を使って実現します。

「もし今日が誕生日だったら」のプログラムは次のようになります。まだ説明していないこともありますので細部は理解できなくて問題ありません。

let birthday = "12/31";
let date = new Date();
let today = (date.getMonth() + 1) + "/" + date.getDate();

if (birthday == today) {
    alert("お誕生日おめでとう");
}

birthday12/31 であること。 today には今日の月日、例えば  1/1 、 5/13 、 12/31 などが入ることとイメージできれば問題ありません。

birthday == today で等しいかどうかの計算がされます。今日が誕生日であれば「お誕生日おめでとう」と表示されます。

>>続きを読む
>>全記事を見る

<最新話にご興味があればフォローお願いします>

この記事が気に入ったらサポートをしてみませんか?