- ベストアンサー
Javaのmainの引数について
- Javaのmainメソッド定義のString[] argsの部分がjavaコマンドで実行する際の引数であることは理解できましたが、なぜStringの配列なのかがわかりません。
- 実行時の引数であれば、intやdoubleも使い道があるように感じますし、プログラマの好きに定義できた方が便利だと思います。
- なぜJavaのmainメソッドの定義ではStringの配列が使用されるのか、理由や背景について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
C言語系をやったことがあればご存じのはずですが、argvだとかargcあるいはargsというものがあります。 これらは、そのプログラムを起動するときに指定するパラメータを引数として考えるものです。 コマンドラインでcalctax.exeというようなプログラムを作ったとして calctax 200 としてリターンをすると、16と出てくるようなプログラムを考えてもらえばわかります。 このとき200は数字ですけど、intとして入れているわけではありません。"200"という文字列でいれているのです。 そして"200"という文字列を内部で数字の200に変換して計算しているのです。 当然ですが、16と出力したときも数字で出しているわけではなく、printf("%d\n",tax)のようにして出しています。文字列です。 人間のわかる形式で入出力するというのは、どうしても文字を使わざるを得ません。 アタマのなかで、100という概念を考えたとしてもひとひ伝えようと思ったら文字で100と字で書く以外の手法はないでしょう。これはコンピュータプログラム相手でも同じことです。 もしcalctax mymoneyなどと入力されたら、それは数字文字列ではないので「sorry it's not numeric」などと出力します。 この思想を引き継いだのがstring[]で引数にするという開始方法です。 当然数字をあらわす文字列を数値変換し、希望する数字形式でなければエラーリターンするのが普通です。
その他の回答 (2)
- moonfield0904
- ベストアンサー率0% (0/1)
確かなことは言えませんが、Stringにしておくことで型がintであろうとdoubleであろうとひとまず値を保持するためではないでしょうか。 整数型や実数型であれば実際にその型のが入力されればいいのですが、Stringなどの想定していない型が入力されたときにプログラムとして対応できないことになります。 そのためString型の配列として一度取得し、そのあとプログラマの裁量で型を変更するという仕様になっているのだと思います。
お礼
String型の配列として一度取得し、そのあとプログラマの裁量で型を変更するという仕様なんですね。あまり考えたことがなかったです。。。 汎用性の面ではそれが一番いいことは理解できました。教えていただき大変ありがとうございました。
- neKo_quatre
- ベストアンサー率44% (735/1636)
Stringの配列が一番汎用性があって、引数を確実に受け取れるから。 > 実行時の引数であれば、intやdoubleも使い道があるようにも感じるので、 そういう風にhogeってプログラムを作ったとして、コンパイルしたプログラムに、使い方知らない人がコマンドラインから、 hoge.exe にゃぁ って引数を与えられたら? intやdoubleに変換できない場合は0が渡るとして、 hoge.exe 0 とどうやって区別する? とか。 というか、そういう区別する処理自体、プログラムする当人が責任もってやれって話とか。 > public static void main () > としてしまったほうがわかりやすいとも感じてしまいます。 引数が違う関数は別物と判断されます。 int max(int a, int b) // a,bの最大値 int max(int a, int b, int c) // a,b,cの最大値 public static void main (String[] args) public static void main () の2つが定義されてたらメンドクサイから、機能的に上位互換の方が選ばれたのでは。
お礼
ご回答ありがとうございました。 なるほど、汎用性の面でも、使い方を知らない人が使ったときの対処を考える上でも、String[] argsと決めておくのがよさそうですね。 なんとなくイメージできました、ありがとうございました。
お礼
実はプログラミング自体初心者でC言語も使ったことがありません。。。 しかし、なんとなく以下のようなことかな、と思いました。 ユーザインタフェース(人間のわかる形式)であるコマンドラインから 引数を与える =引数を文字で与えることになる(たとえ文字が数字だったとしても) ⇒プログラム言語はコマンドライン引数は基本的にいったん 文字型として受け取るように作ってあるケースが多い。 javaも然り。 コマンドラインは数字だとしても文字扱いであるとは意識したことがありませんでした。大変ありがとうございました。