LogoMark.png

Function の変更点


#author("2025-05-08T16:34:17+09:00;2025-05-08T10:39:07+09:00","default:inoue.ko","inoue.ko")
#author("2025-05-14T14:47:39+09:00;2025-05-08T10:39:07+09:00","default:inoue.ko","inoue.ko")
*Function
入力と出力の関係・・
~

数学やプログラミングの分野で登場する関数(Function)という語は、元々は「函数(ファンスウ)」で、入力と出力の間にある「函(はこ)」、つまり入力と出力の関係を記述したものと言えます。数学における関数も、プログラミングにおける関数も、基本的な考え方は共通しています。

#mathjax(y=f(x)、y=f(x_1, x_2, ・・・x_n))
CENTER:入力:x  →  処理:f ( )   →  出力:y

例えば、&mathjax(y=2x+1); というのは「入力データを2倍して1加えたものを出力する」、&mathjax(z=x+2y); というのは「入力データx に 入力データyの2倍を加えたものを出力する」という意味です。

私たちの身の回りには様々な現象がありますが、入力(原因)と出力(結果)の間にある仕組みの多くは ブラックボックスになっているので、その仕組みを解き明かしましょう・・というのが「関数」の関心ごとです。数学の場合は、それを数式モデルとして記述する、プログラミングの場合は、処理プロセスを効率よく記述する・・というのが「関数の記述」です。
~

***数学における関数
関数は「ある入力に対して、一つの出力を定める対応関係」と定義されます。

-入力(引数、変数): 関数に与える値です。x や t などの変数で表されます
-出力(値): 関数から得られる値です。y や f(x) などと表されます

-関数名: 対応関係を表す名前です。通常、f, g, h などで表されます。


入力 x、出力 y の関係は、2次元の xy座標上のグラフで曲線(直線を含む)として視覚的に表現することが可能で、同様に 入力 x, y 、出力 z の関係は、3次元の座標上に曲面(平面を含む)として視覚的に表現することが可能ですが、変数がそれ以上の数になると、視覚的表現はできなくなります。現実の世界で生じる現象には、複数の要因(入力 x1, x2, x3, ・・)があるので、視覚的には表せないものが多いのですが、関数式の記述に関しては、いくらでも拡張可能です。

受験勉強で扱う、一次関数、二次関数、三角関数、指数関数、対数関数などは、いずれもグラフとして可視化可能な範囲のものに限られている・・、つまり、現象の一部を扱っているにすぎません。「交わる点を求めよ」のような特殊な話は後回しにして、まずは関数というものを俯瞰で捉えることをおすすめします。
受験勉強で扱う、一次関数、二次関数、三角関数、指数関数、対数関数などは、いずれも x-y 2次元のグラフとして可視化可能な範囲のものに限られている・・、つまり、現象の一部を扱っているにすぎません。「交わる点を求めよ」のような特殊な話は後回しにして、まずは関数というものを俯瞰で捉えることをおすすめします。
~

***プログラミングにおける関数
ソフトウエア開発の世界では ''プログラム ≒ 関数'' です。あらゆるプログラムは「何らかの入力に対して、一定の処理を行なって、結果を出力する」という形で、記述されます。プログラミング言語には、あらかじめ用意されている組み込み関数(例:文字列の長さを返す関数、数値を丸める関数など)と、プログラマーが自分で定義するユーザー定義関数があります。

-引数(パラメータ): 関数に渡す入力値
-戻り値: 関数の処理結果として返す値(戻り値がない関数も想定されます)

-関数名: 関数を呼び出す際に使用する名前


例えば、Pythonで2つの数を足し算する関数は以下のように定義できます。
 def add(a, b):
    result = a + b
    return result
 
 # 関数の呼び出し
 sum_result = add(5, 3)
 print(sum_result)  # 出力: 8

この例では、add という名前の関数が定義されていて、a と b という2つの引数を受け取り、それらを足した結果を return 文で返しています。
~

***プログラミングで関数を使う主なメリットは・・

-コードの再利用性
同じ処理を何度も書く必要がなくなり、コード量を減らすことができます。
-可読性の向上
処理が機能ごとにまとまるため、コードが理解しやすくなります。
-保守性の向上
処理を変更する必要がある場合、該当の関数だけを修正すれば済みます。
-モジュール化
プログラムを小さな部品に分割し、開発を効率的に進めることができます。
~
~