- ベストアンサー
引数が全く分かりません。
JavaScriptを勉強しているのですが「引数」という概念が理解出来ず心が折れそうです。分かりやすい言われている参考書やサイトの解説でも、全く意味が分かりません(値を渡すとかそのレベルで既に分かりませんが、returnで関数の結果が出ることまでは分かります)。 子供でも分かるくらい易しく教えていただけると嬉しいです。どうぞ宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
引数は値に対してその関数内で使える名前を付けるためのものです。 関数が(a, b, c)と引数を受け取ることになっているところに、(1, 2, 3)と渡せば その関数内では(1, 2, 3)が(a, b, c)という名前で使えるようになるというだけのことです。 よく値を渡すとか、複製するとか言われますが、より仕様に忠実に言うと、 そのような仕組みはなくただの名付けの連鎖でしかありません。 家で「タロウ」と呼ばれているものが、学校内では「タッチャン」だったりする それがJSにおける値と変数の概念であり、引数もまた同じです。
その他の回答 (5)
- t_ohta
- ベストアンサー率38% (5238/13705)
> ご指摘の通り数学は大の苦手です。ですので数式が出てきた瞬間、条件反射で無理だと諦めてしまいました。申し訳ありません。 プログラムは数学です。 コンピュータは演算する機械です。 まずは数学への苦手意識を克服しましょう。
- Kaneyan-R
- ベストアンサー率42% (1340/3127)
引数は、簡単に言えば受け渡すデータのことです。 〉値を渡すとかそのレベルで既に分かりません では、あなたと別の人二人で、何か作業をしているとしましょう。あなたが作業したものを別の人に渡して、その人がそれを検査するとしましょう。 この「渡したもの」が引数です。 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です」となります。
お礼
回答いただきありがとうございます。分かりそうで分からないもどかしさがありますが、糸口は掴めそうです。
- tetsumyi
- ベストアンサー率25% (1946/7535)
数学は苦手ですか? まず関数について 例えば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が内部に持っている関数として呼び出すことができます。
お礼
回答いただきありがとうございます。ご指摘の通り数学は大の苦手です。ですので数式が出てきた瞬間、条件反射で無理だと諦めてしまいました。申し訳ありません。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
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頁)
お礼
回答いただきありがとうございます。ただ、子供でも分かるくらいの平易な内容ではないため、全く分かりませんでした。折角の詳細な回答ですが申し訳ありません。
子供に、買い物を頼む時、買ってくるもののリストや、財布を渡して、買ってきたものを受け取りますよね。 その依頼する買ってくるものの内容(パラメーター)や財布(資源)が、引数であって、買ってきてもらったもの(結果)が、リターン値です。
お礼
有難うございます。今のところ一番イメージがしやすい回答です。この例文をすごく簡単なコードで書いて下さると更に分かるかもしれません。どうぞ宜しくお願いします。
お礼
回答ありがとうございます。身近な例で分かりやすいです。