- ベストアンサー
関数ってなんですか!??
先ほど質問させていただいたのですが、そのとき気づいたことがあります。 関数って何!?いままで関数と言う言葉しか覚えていませんでした。 今検索してみたところ、ぜんぜん意味がわかりませんでした。 だれかわかりやすく説明してください。 よろしくお願いします!!
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
>アセンブラって 聞かれてしまいましたね。 言語です。 C言語以前は一般的に使っていたもので今でもデバイスドライバ等の記述には必要な知識です。 C、C++はコンパイルするとマシン語になりますが CPUが本来認識できるのは全て16進数で表現される数値の羅列でメモリに置かれるデータです。 アセンブラ言語はそれにもっとも近い言語です。 私もボーランドは20年前から使っていますがそのデバッカで86系アセンブラとともにC言語を理解しました。 現在でもC言語の動作確認にターボデバッカで挙動のチェックに使っています。 デバッカを使うことでバグや効率の良いC言語が書けるようになりますし関数の動作も理解できるようになります。 ポインタや構造体も理解するにはデバッカを使いこなすことが早道と思っています。 判らない言葉は「はてな」サイトで調べるとよいですよ。 http://www.hatena.ne.jp/
その他の回答 (9)
#7です. > この海苔とか酢飯とかは、何の言葉に置き換えれますか?プログラミング用語で? 「パラメータ」あるいは「引数」と言います。
お礼
なるほど。すっきりしました。 ありがとうございます
- gungnir7
- ベストアンサー率43% (1124/2579)
昨日のことに補足します。 これだけ回答が色々集まるとなると、結構奥の深い問題かなとも思います。 私の前日の解説ではy=axのような関数を想定に入れていました。 ところが Windows の API 関数には線を引くとか、 画像を表示するなんて命令もあります。 これではとても数学でいうところのy=axなんていうのはかやの外です。 上記に挙げたAPI関数はただ処理を行っているだけなんですね。 だから戻り値がなくてもいいのですが、関数なので戻り値があります。 Visual Basicの例を出します。 Visual Basic では戻り値がないものをサブルーチン(sub)、 戻り値のあるものを関数(Function)とよんで区別しています。 ここでも戻り値があるかどうかが1つの焦点になっています。 とここまで書いておいて、話がややこしくなりますが・・・ VB6にはメソッドというものがあります。 例えばラインメソッドは pic1.line(1,1)-(100,100)とすると この座標間で線を引きます。戻り値もないので関数でありません。 VBではこれを関数とは扱っていません。 しかし、MFCではこれを関数として扱います。 オブジェクト指向プログラミングではメンバ関数=メソッドになります。 ここが非常にややこしいところなのですが、 関数=戻り値があるものという概念は従来の構造化プログラミングのもので プログラミングスタイルが全く変われば、概念も変わるということです。
お礼
またまた回答ありがとうございます! 私はボーランドを使っていますが・・・よくわかりません。 でもなんとなくわかりました。
関数は自動料理マシンと考えてください。 「海苔巻き機」があったとします。 材料を入れる口が3つあります。「海苔」「酢飯」「具」の3つです。 これらの口に各材料を入れれば海苔巻きが出てくる仕組みです。 これが関数です。 ここで「海苔巻き機」が関数名、「海苔」「酢飯」「具」がパラメータです。 この場合、各材料の口が決まっています。 例えば「海苔」「酢飯」を逆に入れてしまうと、「具」が直接「海苔」で巻かれ、それをさらに「酢飯」で巻いたものができあがってしまいます。 また、口が決まっていない関数もあります。「酢飯機」のようなものなら、どの口に何を入れてもOKですね。 さらに、この「酢飯機」の出口を先ほどの「海苔巻き機」の「酢飯」口に接続すれば、もっと自動化、簡易化できますよね。 かえって分からなくなったかな?
お礼
回答ありがとうございます あぁ!・・・ なるほど。わかりました。 この海苔とか酢飯とかは、何の言葉に置き換えれますか?プログラミング用語で?
- caceres
- ベストアンサー率43% (61/140)
アセンブラではサブルーチンなどと言っていたかもしれません。同義ではないのですが書き方によっては同じです。 要は何らかの処理をまとめたものです。 規約に反しなければ何でもよいのです。 ただ記述するときや全体の構成を考えたとき処理の内容毎にその機能を分離した方が作るときも後に保守するときもわかりやすくなるはずです。 また逆にわかりやすく作るためです。 プログラムって完成したものを見直すと同じような記述が複数あることに気付くはずです。特に初心者ほど多くなります。 それはバグを含みやすく保守性が低いものです。 大体のものが一部の定数などを分離することにより共通の処理と捉えることができます。 記述の順番や定数を変数とすることで 戻り値=関数(引数) の形に置き換えられるようになります。 すると全体のプログラムが「ちぢれラーメン」から「ソバ」状に近づき管理しやすくなります。 当然、関数の中に別な機能の関数を記述することもあります。 一度、動作確認が済めば必要なのは機能を記憶するだけでだけで中の記述まで思える必要が無くなります。 また処理の区切りが良い関数であれば特定の機能として再利用の資源になります。 練習する手だてとしては言葉でプログラムを書いていくと慣れてきます。 機能別に何がしたいのかを箇条書きに並べていけばその機能毎が関数になります。 箇条書きに文章化が出来ないのはプログラム以前の機能設計に問題があるからです。 これはアセンブラからC,C++,JAVA,Flash殆どの言語について同じことでクラスの考え方につながるものです。
お礼
回答ありがとうございます いろんな使い方があるのですね。 アセンブラってなんですか?
- gungnir7
- ベストアンサー率43% (1124/2579)
他の人の言っている通りなんだけど、分かり易くってリクエストなので 関数の呼び出す形は普通、下のような形をしています。 Ret=AAA(X,Y) 引数のパラメータとしてXとYを与えてAAAを呼び出すと、 その結果が返ってきてRETに代入される。 ここまでは理解していることでしょう。 関数っているのは、まず答えが返ってくること。これが重要です。 答えが返ってこない処理はステートメントなんて呼び方をします。 次に大切なのは答えが1つしか返ってこないこと。 つまり、パラメータが同じなら毎回同じ答えが返ってくるという意味です。 毎回、同じ答えが返ってこないと、処理が安定しているか不安になります。 上記はあくまで基本です。 数学の関数の定義も概ねこれに準じます。 基本ということは当然例外もあります。 例えば乱数を求める関数は相手が乱数ですから、 毎回同じ答えを出しては意味がありません。 更にオブジェクト指向でいうところのメンバ関数は 処理対象は全て関数なので、上記の概念は全くあてはまりません。
お礼
なるほど。いろんなプログラムを見て経験することが大事なんですね。 いろんな関数の答えがあるから。 ありがとうございました!
- tonton5656
- ベストアンサー率13% (23/173)
考え方は数学の関数と大差ないです。 ある値を放り込むと解がでるって感じで xに数字を放り込むとそれにあうyが導き出せるという風に それとプログラミングの関数は同じよう宇名物です。 引数を入れると返値が返ってくるような ただし、引数や返値がなしの場合もあります。
お礼
あ~そんな感じなんですね。 ありがとうございます プログラムによって変わるのですね
- elmclose
- ベストアンサー率31% (353/1104)
関数は元々は数学用語で、入力値に対して出力値を写像することを言います。 プログラミング言語における関数は、数学の関数と同様に、入力値(パラメタと呼んだり、引数と呼んだりすることもあります)を受け取って、入力値に基づく計算を行なって、計算結果を出力するものです。 ところで、プログラム言語ですから、関数は、計算を行なうついでに、いろいろな他の作用を生じさせることができます(副作用と呼んだりします)。例えば、メモリを書き換えたり、入出力を行なったりできます。関数の、純粋な関数的側面の他に、このような副作用的側面を目的として関数を書く場合もあります。 こんな感じでわかりますか?
お礼
なるほど・・・ 命令を形にすることなんですね。
- beatman
- ベストアンサー率43% (16/37)
自分も素人なのでそれを前提に読んでください^^; プログラムを組む上で、いろいろな「命令」が存在します。「画面に表示する」とか、「ファイルから読み込む」とか。 そのような「命令」を「関数」と考えていいと思います(多分) 自分的には、「細かい命令の集りをひとつの命令としたのが関数」なのかなと思ってます。 自分は、C言語を学びましたが、関数なんて最初はまったくわかりませんでした。 こんな風に入力したら、こんな動作をするよ!っていう知識の組み合わせで、プログラムしてました。 スキルアップするうちに、関数という概念を知り、納得できた次第です。 dfkshさんも、どんな言語でプログラムするのかを決めた後、参考書やインターネットで、プログラムをある程度できるようになってから考えればいいと思いますよ。実際、やってみないとわからんと思います。
お礼
回答ありがとうございます う~ん・・・なんとなくわかりました。 要するに命令なんですね。
- ikepan
- ベストアンサー率27% (13/47)
数学でいう関数というのはパラメタに対して値が一意に決まるものです。 Cプログラムの関数というのは、一連の処理をまとめて名前をつけたものです。
お礼
う~ん・・・ 回答ありがとうございます
お礼
回答ありがとうございます よく理解しました!このサイトは利用させてもらいます! >>私もボーランドは20年前から使っていますが ということは20年以上もキャリアがあるのですか。すごいですね! 私はまだ始めてから3ヶ月しか経っていません。 これからもがんばっていきます。