• ベストアンサー

引数が全く分かりません。

JavaScriptを勉強しているのですが「引数」という概念が理解出来ず心が折れそうです。分かりやすい言われている参考書やサイトの解説でも、全く意味が分かりません(値を渡すとかそのレベルで既に分かりませんが、returnで関数の結果が出ることまでは分かります)。 子供でも分かるくらい易しく教えていただけると嬉しいです。どうぞ宜しくお願いします。

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

  • ベストアンサー
  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.6

引数は値に対してその関数内で使える名前を付けるためのものです。 関数が(a, b, c)と引数を受け取ることになっているところに、(1, 2, 3)と渡せば その関数内では(1, 2, 3)が(a, b, c)という名前で使えるようになるというだけのことです。 よく値を渡すとか、複製するとか言われますが、より仕様に忠実に言うと、 そのような仕組みはなくただの名付けの連鎖でしかありません。 家で「タロウ」と呼ばれているものが、学校内では「タッチャン」だったりする それがJSにおける値と変数の概念であり、引数もまた同じです。

arbre1026
質問者

お礼

回答ありがとうございます。身近な例で分かりやすいです。

その他の回答 (5)

  • t_ohta
  • ベストアンサー率38% (5076/13258)
回答No.5

> ご指摘の通り数学は大の苦手です。ですので数式が出てきた瞬間、条件反射で無理だと諦めてしまいました。申し訳ありません。 プログラムは数学です。 コンピュータは演算する機械です。 まずは数学への苦手意識を克服しましょう。

  • Kaneyan-R
  • ベストアンサー率42% (1245/2902)
回答No.4

引数は、簡単に言えば受け渡すデータのことです。 〉値を渡すとかそのレベルで既に分かりません では、あなたと別の人二人で、何か作業をしているとしましょう。あなたが作業したものを別の人に渡して、その人がそれを検査するとしましょう。 この「渡したもの」が引数です。 function FUNC2(hikisu){ return hikisu - 3; } function FUNC1(){ var m; var a = 3 + 4; m = FUNC2(a); alert(m & 'です'); } 簡単な例ですが、関数FUNC1のなかで、別の関数FUNC2に、変数aの値を引数として渡しています。 関数FUNC2では、変数hikisuにFUNC1から渡された変数aの値(この場合7)が格納され、それを元に計算(hikisu - 3)を行った結果(4)をFUNC1に戻しています。 FUNC1に返されたFUNC2の計算結果(4)は、FUNC1の変数mに代入されて、FUNC1の実行結果は「4です」となります。

arbre1026
質問者

お礼

回答いただきありがとうございます。分かりそうで分からないもどかしさがありますが、糸口は掴めそうです。

  • tetsumyi
  • ベストアンサー率26% (1856/7085)
回答No.3

数学は苦手ですか? まず関数について 例えばY(X)=SIN(X)という関数があるとすると、この関数にXを30として渡すと0.5と言う答えが返ってきます。30が引数 ではF(X1、X2)=X1+SIN(X2)と言う関数にX1=1、X2=30を渡すと1.5という答えが返ってきます。1と30が引数 こんな感じでScriptやプログラミングでは関数が内蔵されていたり、度々使う手順を自分で関数として作って必要な時にこの関数に引数を渡して結果を出せるようにしています。 それで決めた引数に間違いなく順番で、全ての引数に数値を入れて渡さないと処理できないよーとしかられます。 計算だけでなく画面表示や音を出す等もWindwsが内部に持っている関数として呼び出すことができます。

arbre1026
質問者

お礼

回答いただきありがとうございます。ご指摘の通り数学は大の苦手です。ですので数式が出てきた瞬間、条件反射で無理だと諦めてしまいました。申し訳ありません。

回答No.2

 JavaScript ですか・・・。懐かしいなー。以下に紹介するのは、19年前に我がブログにアップした《JavaScript 入門》の一節です。その中で、《引数》に対するカーニハン&リッチーの説明を引用しています。《引数》については、それで十分だと思いますよ。なお、紹介している一節から推測されるように、JavaScript を覚えるために、私は「プログラミング言語C第2版」の例題をJavaScriptで書くことに挑戦しました。 【JavaScript入門 2.5 関数】  「Cの関数は、Fortran のサブルーチンあるいは関数、Pascal の手続きあるいは関数に対応する。関数は、その中身に関して、何も心配しないで使えるようにある処理をブラックボックスの中につめ込むのに便利な方法である。関数は実際、大きなプログラムに潜在する複雑さに対処するただ一つの方法となる。うまく設計された関数に関しては、いかに処理されるのかということを無視して、何ができるのかを知っていれば十分である。Cは関数の使用が、やさしく、便利で、かつ能率的であるように設計されている。たった2~3行しかなくて、1回しか呼ばれない関数を見かけることがよくあるが、それは断片的なプログラムをわかりやすく、はっきりとさせるために使われているのである。・・・今度は自作の関数を二、三書いてみることにしよう。Cには Fortarn にある ** のような指数演算子がないから、整数 m を正整数 n でベキ乗する power(m,n) という関数を書いて、関数定義の機構を示すことにする。・・・以下に、関数 power とそれをテストする主プログラムを示す。全体の構造は一度に見ることができるだろう。    #include <stdio.h>    int power(int m, int n);    /* ベキ乗関数をテストする */    main()    {     int i;     for (i=0; i<10; +;i)      printf("%d %d &d\n", i, power(2, i), power(-3, i));     return 0;    }    /* power: base を n のベキ乗する ; n>=0 */    int power(int base, int n)    {     int i, p;     p=i;     for (i=1; i<=n; ++i)      p=p * base;     returen p;    }  ・・・われわれは関数定義の中のカッコ内にリストされた変数を一般にパラメータと呼び、関数呼び出しに使われる値を引数(argument)という。同じ区別を行うのに、仮引数および実引数ということばが使われることもある。  power で計算した値は、return文によって main に返される。returen の後にはどんな式を置いてもよい。    returen 式;  関数からは必ずしも値を返す必要はない。」(「プログラミング言語C」31~32頁)  JavaScript 版の「ベキ乗関数をテストする」は、次のようです。    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">    <html>    <title>ベキ乗関数をテストする </title>    <meta http-equiv="Content-script-Type" content="type">    <script type="text/javascript">     function power(base, n) {      var i, p;      p=1;      for (i=1; i<=n; ++i)       p=p * base;      return p;     }    </script>    <body>    <script>     <!--      var i;      for (i=0; i<10; ++i)       document.write (power(2, i), "<br/>");     //-->    </script>    </body>    </html> =======================  引数―値による呼び出し(call by value) =======================  「他の言語、特に Fortran を使ったことのあるプログラマにとっては、Cの関数に見慣れない面があるかもしれない。Cでは、すべての関数の引数が"値"で受渡しされるからである。これは呼び出された関数には、元の値ではなく一時変数の中の引数の値が与えられることを意味する。このため、呼ばれたルーチンが局所的なコピーではなく、元の引数にアクセスできる Fortran のような"call by reference (参照による呼び出し)"の言語や Pascal の varパラメータとは、Cの性質は違ったものになっている。」(「プログラミング言語C」34頁)  JavaScript が、C系の言語であることは、power関数を次のように変更してテストすることで確認できます。    function power(base, n) {     var p;       for (p=1; n>0; --n)      p=p * base;     return p;    }  「パラメータ n は仮の変数として使われ、0 になるまで(逆向きに走る forループで)カウント・ダウンされる。変数 i はもはや必要ではない。power 内部での n に対する処理は、power に受け渡された引数には影響しない。」(「プログラミング言語C」34頁)

arbre1026
質問者

お礼

回答いただきありがとうございます。ただ、子供でも分かるくらいの平易な内容ではないため、全く分かりませんでした。折角の詳細な回答ですが申し訳ありません。

noname#252929
noname#252929
回答No.1

子供に、買い物を頼む時、買ってくるもののリストや、財布を渡して、買ってきたものを受け取りますよね。 その依頼する買ってくるものの内容(パラメーター)や財布(資源)が、引数であって、買ってきてもらったもの(結果)が、リターン値です。

arbre1026
質問者

お礼

有難うございます。今のところ一番イメージがしやすい回答です。この例文をすごく簡単なコードで書いて下さると更に分かるかもしれません。どうぞ宜しくお願いします。

関連するQ&A

  • 戻り値と引数

    戻り値と引数の概念がよくわかりません。 質問内容は2つ (1)「戻り値は値を関数元に返す」 とありますが 返すとどうなるのですか? また返さないとどうなるのかを教えて下さい。 (2)引数に関しては眺めていればこの引数が値を渡してるというのは なんとなくわかるのですが、実際のプログラムを組んで関数を作成するときに何を引数にすればいいのかさっぱりです。それを教えて下さい。

  • return 引数 がよくわからないです。

    JAVAを勉強しているのですが、returnと引数がよく意味が分かりません。 returnをどういう場合につけて、どう付けると、どこに影響があって、どういう結果になるのか、がよくわかりません。 returnが付く場合と付かない場合の違いもよくわかりません。 引数については、()内に何も書かれなかったり、書かれたりの違いがわからないのと、()内に書かれている文字がどこに影響を与えるのか、とか、さっぱりわかりません。 詳しい方いらっしゃいましたら、わかりやすく教えてください。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • 引数なしの関数で疑問です

    とほほのjavascriptで勉強しています。 http://www.tohoho-web.com/js/function.htm#objFunction ここの function goukei() { var ans = 0; for (i = 0; i < goukei.arguments.length; i++) { ans += goukei.arguments[i]; } return(ans); } sum = goukei(1, 2, 3, 4, 5); goukei関数を定義したときの引数は、なしなのに goukei関数を呼び出すとき、goukei(1, 2, 3, 4, 5)と、このように5つも引数を指定しています。 Javaでは、こんな呼び出し方をすれば、コンパイルエラーになりますよね。 javascriptでは、引数なしで関数を宣言しても、呼び出すときに、好きな個数の引数を渡せるのですか? 「javascript 引数 省略」とか、「javascript 引数なし」とかいろいろググッてみたのですが 肝心の、javascriptでは引数なしにして宣言しても、呼び出すとき、好きな個数の引数つけて呼び出しても大丈夫。みたいな、確認したい記述はみつかりませんでした。 javascriptでは、このような書き方もできるということでしょうか。

  • 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は仮引数とよぶのでしょうか? 質問の内容が意味不明かもしれませんが よろしくお願いします。

  • カリー化について教えてください。

    初心者です。現在、カリー化について勉強中で、以下のサンプルコードを解読中なのですが、いまいち理解できません。以下を中心に、どなたか解説していただけるとうれしいのですが。 1.curry(f,x)の第一引数fは、関数で、第二引数xは変数と理解してよいのでしょうか? 2.カリー化により、最終的に返される値f(x,y)というのは、curry関数が呼び出された際の第一引数の関数f()に、curr関数の第二引数と、function式を用いて直接宣言されたyを渡した結果が返されるということでしょうか? 3.仮に、curry(add,1)と呼び出した場合には、yにはどのような値が入るのでしょうか? 4.その他、カリー化を学ぶ上で重要なことがありましたら教えてください。 function curry(f, x) { return function(y) { return f(x, y); } }

  • 引数について質問

    私プログラミング初心者ですので、できるだけ優しい解説をしていただければ幸いです! 引数について、以下のような解説がありました。 「引数には仮引数と実引数の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
  • javascriptの関数に引数を一個以上(不特定)渡したい

    javascriptの関数に引数を渡したいのですが、普通は値を渡す時、 function quotation(a,b) { alert(a+b); } <a href="#" onMouseover="quotation(12,13)">12+13</a> のようにすると思いますが、関数に値を渡す所の引数に「2個の値を渡す」とは決まっておらず例えば、4個値を渡すこともあれば、1個だけ値を渡すこともあるというプログラムを作りたいと考えています(必ず、1個以上の値を渡したいと思っております)。 このように、何個値を渡すか確定できていないときに柔軟に処理できるようにすることは、javascriptでは可能ですか?可能であれば、どのようにするのかやり方を教えてください。

  • phpで関数に引数を渡すという  わたす  という

    phpで関数に引数を渡すという  わたす  というのは、引数に値を 入力する という意味ですか?

  • 【PHP】usort()関数内の引数について

    【PHP】usort()関数内に出てくる関数の引数の意味を教えてください。 usort(ユーザー定義関数) 以下のような配列があります。ここで'score'を小さな順番(昇順)で並べ替えるためにusort()関数を使いたいと思います。 $data= [ ['name' => 'yamada', 'score'=> 80], ['name' => 'suzuki', 'score'=> 60], ['name' => 'tanaka', 'score'=> 70], ['name' => 'okada', 'score'=> 60], ]; usort( $data, function($a, $b){ if ($a['score']=== $b['score']){ return 0; } return $a['score'] > $b['score'] ? 1: -1; } ); echo "<pre>"; print_r($data); echo "</pre>"; ----------------------------------------------------------------- サンプルでは上記のように$a,$bが使用されています。 スコアの数値を比較して、あるスコアの値と別のスコアの値が同じであれば「0」を返す。$aの値が$bより大きければ「1」を返す、そうでなければ「-1」を返す。 返ってきた値、「-1」,「 0」,「 1」と小さな順に並べる… こういうことかと思います。添付画像のように表示された値も合っています。 が、functionの引数($a, $b)の意味がよくわかりません。 foreachなどでループさせ値を一つづつ比較するというよう作業を行うのであればまだ理解できるかもしれませんが、ただ単に引数に function($a, $b)…としただけでscoreの値が$a、$bにどうやって代入されていくのでしょうか?? $a, $bと記述しただけで全てのscoreの値をなぜ比較してくれるのかわかりません。 また、現在$dataの中には4つしか配列がありません。-1,0,1だけで順番をつけられるでしょうが、これが50, 100個と配列データが増えた場合でもこのやり方でできるのでしょうか? 初学者です。分かる方いらっしゃいましたら教えて下さい。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • jQueryのイベントに引数を渡したい

    例えば以下のような既存のJavaScriptのコードをjQueryのイベントで書き直したい場合、関数の引数で渡していた値は、どうやって渡すのでしょうか? 【html】 <a href="" onclick="func_a('abc'); return false;"></a> 【JavaScript】 faunction func_a(param_a){ alert(param_a); } 以下のようにすれば渡せないことはありませんが、かなり強引な感じがします。 【html】 <a href="" class="abc"></a> 【jQuery】 $(function() { $("a").click( function(){ var param = $(this).attr("class"); alert(param); return false; } ); }); こういう場合はjQeuryであっても、onclick属性で関数を呼び出すのが普通なのでしょうか? ご存知の方がいらっしゃいましたら教えてください。 よろしくお願い申し上げます。

専門家に質問してみよう