引数について質問

このQ&Aのポイント
  • 引数について解説します。関数を定義する際に変数で指定する引数を仮引数といい、実行時に値が代入される引数を実引数といいます。
  • 関数を定義する際に変数で指定する引数について、具体的なソースコードを交えて解説します。
  • プログラミングにおける「定義」という言葉の意味や、「関数の実行時には実引数の値が仮引数に代入される」ということについて解説します。また、Mathクラスについても触れます。
回答を見る
  • ベストアンサー

引数について質問

私プログラミング初心者ですので、できるだけ優しい解説をしていただければ幸いです! 引数について、以下のような解説がありました。 「引数には仮引数と実引数の2種類が存在する。仮引数は、関数を定義する際に変数で指定する引数である。また、実引数は、プログラムの実行時に関数に引き渡される値となる引数である。つまり、関数の実行時には、実引数の値が仮引数に代入されることになる。」 質問:1「関数を定義する際に変数で指定する引数である。」という記述の中で「関数を定義」とありますが、実際のソースコードにおいて何に対応するかわかりません。簡潔なソースコードを交えて解説していただければ幸いです。 質問2:「関数を定義」に限らず、プログラミングにおいて「定義」という言葉をよく見ますが、これは本質的にどういう意味をもっているのでしょうか?具体的なソースコースコードを交えて解説してくださると幸いです。 もしかして、その定義とは例えば「public static void main(String arg[]){」のような「メソッド宣言」のことですか? 質問3:「関数の実行時には、実引数の値が仮引数に代入されることになる。」と書いてありますが、 これはどういうことですか、僕が実際にソースコードで記述してみるので、その考えが正しいか判定してください package 第4章; public class A { public static void main(String arg[]){ double x; x=Math.sqrt(2.0); System.out.println("2.0の平方根は"+x); } } 僕の考え:String arg[]が仮引数で、実引数2.0がString arg[]に代入されるってことでしょうか? 「定義」といえば、上記のソースコードでは、public static void main(String arg[]){ 以外見当たらないので、、 僕の考え2:Mathクラスは、標準クラス(javaが最初から備えているクラス)だから、プログラマが「関数を定義」しなくても予め関数が定義されているから、関数を定義する必要がない、ということでしょうか?

  • Java
  • 回答数4
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

ANo.3の者です。 >「numberという変数に1を代入するという機能を実行するメソッドと定義」しているということでしょうか? その通りです。ほかに質問があれば遠慮なくどうぞ。

wantanton
質問者

補足

ありがとうございます! 定義の意味がだんだん分かってきました。 さらに質問があります。 以下のHPに以下のソースコードがありました。 http://sjc-p.obx21.com/word/jk/formalparameter1.html class Dentaku{ public int plus( int i, int j ){ return i + j; } } これは、定義という観点から考えると、「pulusメソッドはi+jという加法の計算をする機能を持ったメソッドであることを定義している。」といえますか? 質問2:returnについて調べたのですか、抽象的すぎてようわかりませんでした。。どういう意味ですか? 質問3:iとjは仮引数で、int型ならどんな値でも代入できますよね?

その他の回答 (3)

回答No.3

定義とは、こういうものですよと内容を記述することです。たとえば、下記のようなものです。 // これ全体がクラスの定義 class Sample { int number = 0; // これが関数(メソッド)の定義 void sample_a() { number = 1; } } 関数の定義とは、当然、関数の内容を記述することです。

wantanton
質問者

補足

丁重なご回答誠にありがとうございます! >>// これ全体がクラスの定義 class Sample { int number = 0; // これが関数(メソッド)の定義 void sample_a() { number = 1; } } このソースコードはつまり、aというメソッドは、「numberという変数に1を代入するという機能を実行するメソッドと定義」しているということでしょうか?

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

定義 とは、つまりそのクラスの構造であり仕様です。 車というクラスに走るというメソッドがあり、引数に燃料があります。 class 車 { public void 走る(燃料) { } } これが車というクラスの走るメソッドの定義です。 で、「燃料」が仮引数。 実引数には「燃料」のインスタンスが入ります。 購入したレギュラーガソリンだったり、充電した電気だったり。

wantanton
質問者

お礼

ありがとうございます!だいたいのことは理解できました!

回答No.1

仮引数と実引数 http://www.cc.kyoto-su.ac.jp/~yamada/ap/parameter_argument.html >僕の考え:違います。String arg[]はたしかに仮引数ですが、プログラム実行時にmainメソッドに対して与えられた実引数が入ります。2.0はMath.sqrt()に与えられた実引数です。 >僕の考え2:そうです。ちなみに、Javaでは関数のことをメソッドと呼んでいます。C、C++なら関数でOK。

wantanton
質問者

お礼

ありがとうございます! 引用先のHPわかりやすかったです! すっきりしました!

関連するQ&A

  • String typeの引数をつかって 変数はつくれますか?

    いつもお世話になっております。 以下のように、引数を使って、変数をていぎしたいのですが。。。 public static void main(Stirng[] arg){ String hikisuu = "サンプル"; method(hikusuu); } public static void method(String hikisuu){ int hikisuu = 5; } java でこのようなことは可能でしょうか? (実際やったらエラーが出ました...) ほかの方法で、これと同じようなことを実現でくる方法はありますでしょうか? よろしくおねがいします。

    • ベストアンサー
    • Java
  • javaのmainの引数はなぜstring[]?

    Java初心者です。 基礎的なことなのですが、質問させてください。 javaのmainメソッド定義の public static void main (String[] args) について、String[] argsの部分がjavaコマンドで実行する際に与える引数であることは 理解できました。しかし、なぜStringの配列なのかが理解できません。 実行時の引数であれば、intやdoubleも使い道があるようにも感じるので、 プログラマの好きに定義できた方が便利な気がしますし、実行時に引数を与えないなら public static void main () としてしまったほうがわかりやすいとも感じてしまいます。 実はコンパイル時や実行時に裏の見えない部分でStringの配列を使っているとか、 何か理由があるのでしょうか? mainの定義は main (String[] args)と暗記でもいいのですが、 気になったので知りたく、質問させてください。

    • ベストアンサー
    • Java
  • コマンドライン引数はどこからやって来たのですか?

    こんにちは Javaで、 public static void main(String args[]) という引数は、どこからやって来たのでしょうか? これがコマンドラインに初めて書かれる文だとしたら、どこから引数を貰うのでしょうか? また、2番目に書いたクラスだったとしても、他のクラスのなかのものをそんな簡単に貰うことはできるのでしょうか? もし宜しければ回答お願い致します。

    • ベストアンサー
    • Java
  • 実引数リストと仮引数リストの長さが異なります

    実引数と仮引数はあっているはずですが、次のエラーが出ます。どうしてでしょうか? ------エラー----------------------- java: クラス Itemのコンストラクタ Itemは指定された型に適用できません。 期待値: 引数がありません 検出値: java.lang.String,int,java.util.Date 理由: 実引数リストと仮引数リストの長さが異なります -------------------------------------------------- public class Main { public static void main(String[] args) { String name= "test"; int price = 0; Date date = new Date(); Item item = new Item(name,price,date);//コンストラクタ実引数 } } class Item{ String name; int price; Date date; void Item(String name, int price, Date date)//コンストラクタ仮引数 { this.name = name; this.price = price; this.date = date; } }

    • ベストアンサー
    • Java
  • C言語(引数)

    はじめまして。 C言語を習い始めたものです。 関数を定義するとき、よく耳にする、仮引数や実引数があると思います。 仮引数は関数の定義内で値をうけとる変数のことであり 実引数は関数を呼び出す際に渡す値を実引数というらしいのですが どこからどこまでを仮引数と呼ぶのかわかりません。 例えば、 fの関数の定義内で ↓があるとします。 (関数にする意味はないのですが、確認のためあしからず・・・) double f(double x) {     x=5;     return(x); } この場合、仮引数とよばれるものは double f(double x)の xが仮引数であって x=5;のxは仮引数と呼ばないのでしょうか?? もしそうならば void f(double x) { printf("%f",x); } のprintf("%f",x);内のxは仮引数とよぶのでしょうか? 質問の内容が意味不明かもしれませんが よろしくお願いします。

  • C言語での関数の引数の受け渡しについて

    C言語での関数の引数の受け渡しについて教えてもらいたいのです。 char *p=Goo;  というポインタpがmain関数で定義され、このポインタpをある関数 void func(・・・) に渡すことは出来ますか? つまりポインタを実引数として扱うことはできるのかという事ですが・・・ int p=10; とかだったら、 void func(int test) の関数には、main関数で func(p) で仮引数testにわたせると思うんですが・・・ もし出来るようでしたら、関数の渡し方と定義の記述を教えてください。 どうか宜しくお願いします。

  • doGetの引数に「入るモノ」について

    サーブレットにおけるクラスのdoGetメソッドについて 質問です(Tomcat3.2.1 + JDK1.3)。 public void doGet(HttpServletRequest request, HttpServletResponse response) 理屈で考えると、このdoGetメソッドの2つの仮引数 (request, response)には、 「インターフェースHttpServletRequestをimplements したクラス」のインスタンス ‥‥と、 「インターフェースHttpServletRequestをimplements したクラス」のインスタンス の2つのインスタンスが入れられるハズですよね。 そこで疑問なのが、 1. それら2つのクラスの名前はなんというのでしょう? (というのはインターフェースHttpServletRequestや インターフェースHttpServletResponseを 実装したクラスのメソッドの処理内容の定義を 見たいのです‥) 2. 誰がそのクラスをインスタンス化しているのでしょう? (サーブレットコンテナのTomcat? JRE? JVM?‥ いったい誰が?‥‥用語の区別も曖昧なのですが) 補足すると、 Javaアプリケーションのmainメソッドでは、 public static void main(String[] args) として、コマンドラインの引数がそのまま仮引数argsに 入る。じゃあ、サーブレットの場合はどうなのか? といった感じです。 2.のほうはトンチンカンな質問かもしれませんが、 1.の質問は切実です。 ご存知の方、教えてください。

    • ベストアンサー
    • Java
  • 初歩的な メソッドの引数について

    参考書のサンプルなんですが、 Carクラスのメソッドの引数のところで num = n と代入しているのですが、 これを直接void setNum(int num)としたほうがらくだと思うのですがなにか意味があるのでしょうか? class Sample4{ public static void main(String args[]){ Car car1 = new Car(); car1.setNum(33); } } class Car{ int num; void setNum(int n){ num = n; System.out.println("台数" + num); } }

    • ベストアンサー
    • Java
  • 仮引数について。

    こんにちは。 現在Javaを勉強中の者です。 ある程度簡単なプログラムは組めるようになったのですが、 ふと仮引数について疑問に思ったことがあったので 質問させて下さい。 まず、自己紹介をするクラスがあるとします。 そこで、入力された名前を表示する、というメソッドを作りたいのですが (1) class Introduction {     /* メンバ変数 */    String strName;     /* 名前を言う */     public void sayName(String strName) {     System.out.println("私の名前は " + strName + " です。");   } } と書くのと (2) class Introduction {   /* メンバ変数 */   String strName;   /* 名前を言う */   public void sayName(String n) {     strName = n     ~~~~~~~~~~~~     System.out.println("私の名前は " + strName + " です。");   } } と書くのでは何がどう違うのでしょうか? 特に波線部分の役割の理解に苦しんでいます。 参考書のサンプルソースを見ると、 たいていこのような記述があるのですが わざわざ代入しなくても(1)のように記述すれば 正常に出力されますよね? 実引数から値を渡されたときは 必ず(2)のような書き方をしなければならない決まりが あるのでしょうか? 長くなりましたが、ご教授いただければ幸いです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • メソッドの引数にクラス配列を指定した場合…?

    問題のソースの構造を簡略化して書きます。 class superA { } class subB extends superA { } class mainC { public static void main(String[] abc) { /* superAとsubBをインスタンス化して 利用。int変数に値を入れている。 */ } } class questionD { public static int EEE(superA[] FFF) { } } クラスmainCまではなんの問題もなく理解もできますし、ちゃんと動くのですが、問題はクラスquestionDで 指定されている上のメソッド(int EEE(superA[] FFF))でmainCで代入されたsuperAやsubBの変数の値を使って、その和を返せ というものなんですが まず引数にクラス配列を指定してる場合、どのようにしてmainCで呼び出せばいいのでしょうか? また、どのようにしてquestionDでsuperAやsubBのint変数を利用すればいいのでしょうか? 教えてください。よろしくお願いします。 まだjavaをはじめて間もないので間違った言葉の使い方や意味の不明な点がありましたら補足要求でお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう