足し算の計算「1+2=12」!?

足し算の計算「1+2=12」!?

2022年8月27日




足し算の計算「1+2=12」!?

前回はコマンドラインからデータを受け取る仕組みについて紹介しました。今回は、コマンドラインから受け取ったデータを使って足し算をするプログラムに発展させて行きます!

コマンドラインから受取ったデータで足し算

では、前回のコードを基に足し算をするプログラムを考えてみます。

const data = process.argv;
const a = data[2];
const b = data[3];
// Display input data A and B
console.log(a, b);
const result = a + b;
// Display the result
console.log(result);

このプログラムは、コマンドラインから二つのデータを受取って、それぞれ「a」と「b」と言う定数にセットして、その足し算をして、その結果を表示するプログラムです。

これで、プログラムにコマンドラインからデータを渡して、足し算をする処理が可能になります。意外にシンプルですよね!

コンピュータも間違える!?

では、実行してみます。 プログラムは、「add.js」と言う名前で保存しています。

PS C:\Users\TH\Documents> node add.js 1 2
1 2
12
PS C:\Users\TH\Documents>

コマンドラインで入力したデータは、「1」と「2」です。 それを、足し算した結果は「3」になるはずです。

ところが、実行結果の二行目に表示されているのは「12」です。

明らかに間違いですよね?

実際にプログラムを入力して実行された方の結果はいかがでしたか? おそらく同じになったかと思います。

コンピュータも間違える事があるように見えます!

計算結果は正しい!

この計算結果ですが、実は間違っていません!

入力したデータは確かに「1」と「2」ですが、実はこの二つのデータは数字ではありません。このデータは実は、「文字」と呼ばれる型のデータです。文字型のデータは、ある特定の数字と文字を対応させて、コンピュータ上に文字として表示できる仕組みになっています。

入力されたデータは「1」と「2」と言う二つの文字なので、二つの文字を合わせると「12」と言う二つの文字を合わせて表示すると言うのが上のプログラムが行っている処理になります。

従って、この処理結果は正しい結果を表示している事になります。

入力したデータを数字として扱うには?

では、この入力された二つの文字を数字として扱うにはどうしたら良いでしょうか?

それには「parseInt() 」と言う予め Javascript で用意されている関数を呼び出します。

const data = process.argv;
const a = parseInt(data[2]);
const b = parseInt(data[3]);
// Display input data A and B
console.log(a, b);
const result = a + b;
// Display the result
console.log(result);

これで、入力された「1」と「2」は数字に変換されました!

これを実行すると

PS C:\Users\TH\Documents> node add.js 1 2
1 2
3
PS C:\Users\TH\Documents>

今度は、正しく「3」と表示されました。

これで、プログラムを変更せずに、与えられたデータで足し算をするプログラムの完成です!

まとめ

プログラムを作成する際に大切なポイントの一つにどんなデータがプログラムに渡されるのかを正しく理解しておく必要があります。

今回の例では、コマンドラインからプログラムに渡されるデータは全て「文字」であることを正しく理解している必要があります。このデータの「型」によって、同じ計算をしても出てくる結果は違ってきます。

文字のデータの場合は足し算は、二つの文字を一緒に表示するように動作します。しかし、データが数字の場合は、二つの数字の値の足し算として処理されます。そして、その結果は違うものになります。

今回のプログラムの目的は「二つの数字の足し算をする」事なので、入力された文字を数字(数値)に変換して処理する必要があります。

今回は、Javascript で同じように見える「1」や「2」は、文字の場合もあるし、数字の場合もあるという事の例でした!

まずは、文字と数値という見かけは似ていても別のデータが Javascript にはある事を認識してください!

Copyright(c) 2017-2021 by Silicon Valley Super Ware, all rights reserved.

コメント

このブログの人気の投稿

ユーザーインターフェースの設計

足し算以外もできるようにする

改良版足し算プログラム