見出し画像

(第14回)「プログラミングやりたくない!」〜下から目線のコーディング武者修行〜

“function”こぼれ話 〜その2〜

そういえば前回、functionの詰まるポイントばかりフォローして、「functionとは何なのか」に触れなかったことを思い出しました。

というわけで今回は、functionの由来を解説しながら、前回の続きである「returnが出てくると急に混乱する」について、順を追ってフォローしたいと思います。

[functionの由来]

(1) functionという用語は、ライプニッツがその由来

(画像出典: https://ja.m.wikipedia.org/wiki/ゴットフリート・ライプニッツ)

三十年戦争で荒廃しきったヨーロッパに誕生した万能型の哲学者ライプニッツ(Gottfried Wilhelm Leibniz, 1646 ~ 1716)。

functionの歴史を紐解いていくと、このライプニッツさんにたどり着く様子。

functionと英語を使いましたが、ライプニッツさんは17世紀の哲学者(*単に学者の意、scientistという言葉ができるのは19世紀以降だそう)らしく、当時の共通語であるラテン語で執筆。

なもんで、functionそのものの綴りはなく、ラテン語のfunctio(フンクティオー)が見えるそうです。

仕方がないので手持ちの羅英辞書でfunctioを引いた記録が、自分の『Tech用語由来辞典』にありました。その記述はこんな感じ。

・function
函数(function)はライプニッツ由来
ライプニッツはラテン語で執筆してたため、原文では「functio」として出てくる
ラテン語の「functio」:
functio, onis. f. [fungor], a discharging, performance, execution : quaedam vel animi vel corporis: muneris illius.
functioの語源fungorは「FVG」語幹→fugitive, refugeeなど、逃げ去るの意味か
「キー」ワード(key value)を与えると「ハコ」が開いて(functio)、中に納められていたモノ(機能)が使えるようになるという含意か

コレを見ると、functionには「箱(ハコ)」の意味合いがあると分かります。

昔は日本でも、元々の意味を取り入れて「函数(かんすう)」と表記してたそう。「函館」のハコで、ちゃんと字面にハコが残っていた。

それが戦後の常用漢字に統一する過程で、「函」も「関」になっちゃった由。「関数」に「関係する数」という意味合いがぜんぜんないのは、この辺りが理由みたい。

*ちなみにライプニッツさんは、「2進法」を数学に取り入れた最初の人。プログラミングの祖先みたいな人かも

(2) 数学的には「1つのインプットに対して、1つのアウトプットがあるもの」をfunctionと呼ぶ

コンピュータのfunctionはいくらやっても手掛かりが見つかりそうにないので、一時期、Kahn Academyで「数学で使うfunction」を学びました。

それで分かったことは、functionは「1個のインプット」につき「1個のアウトプット」に限定されてるものを指すそうです。

Kahn先生もfunctionをハコに例えており、functionというハコに入れて、OperateしたものがOutputされるのだ、なんて。

Input → function(Operation)→ Output

*それを踏まえて、「複数のアウトプット(答え)」が出ちゃうものはAlgebraであると解説されてました。functionとalgebraは似ているようで、そこが違うのね、と

数学方面のfunctionを追っかけたことで、「なんか操作するためのハコ」というイメージが出来ました。

その後にチェックしたJavaScriptのサイの本では、functionを「ミキサー」に例えてたっけ。果物(Input)をミキサー(function)に入れてボタンを押すとスムージー(Output)ができると。

(3) “Return”は、それまでのAddressに戻る(return)という意味(らしい)

「functionは箱」
「functionという箱に入れると、必要な手を加えたのち、別な形になって出てくる」

functionとは基本、こんなもののようです。

さっきのミキサーの例えで言うと、果物をナイフや包丁でスムージーにするのは手間がかかってやり切れないから、「ミキサー」というそれ用の機械を用意しようーー

functionはそれでいいとして、なんでreturnが出てくると急にややこしいかというと、これ、コンピュータのハードウェアHardwareに理由があるそうな。

前にチラッと言いましたが、コンピュータを動かす仕組みは

命令文(Programs)をメモリー(Main Memory)に順番に並べておき、それをCPU(Central Processing Unit)がその順番通りに実行する

のが基本。カンタンに書けば

Program → Main Memory → CPU

という順番。

で、Main Memoryでは、保存された命令を順番に実行するため、アドレスAddressという形で、ズラーっと順に数字が並んでる。

ズラーっと数字が並んでる形なので、Arrayで扱うデータも、Addressに沿ってズラーっと並べるしかない。

で、Addressとfunctionの関係で言うと、functionはよく使う機能をまとめておくものなので、特定のAddressにドーンと鎮座してる形。「ミキサーはいつもキッチンの戸棚に入ってる」みたいな。

ところがAddressは順番に並んでるものなので、「1, 2, 3, 4, 5, “functionお願い!”」とプログラムを並べた場合、functionが終わった後で、「6, 7, 8, ...」と、もとの流れに戻してやんなきゃいけないそう。で、

この「もとの流れに戻る」命令が”return”

みたいです

(functionはぜんぜん違うところにあるので、終わったら戻るところをイラスト化)

functionはぜんぜん別の場所にあるので、functionを使ったら別の場所に行ったっきりになってしまう。なので「戻る」必要があると。

functionで使うargumentsが本筋のvariableさんと違ってOKな理由も、結局、「functionはぜんぜん別のところに置いてある」から。

今回のnoteで一生分の”function”を使った気が( ´ ▽ ` )ノ こんだけの内容が分かるまで、エライ時間がかかったナー。

実際、上のサイの本でも「functionがつながる様子は初心者からするとesoteric(秘術)に見える」と書いてあったので、functionに詰まるのは自分だけじゃないんだと一安心(^∇^)

#プログラミング
#学習法
#数学史

この記事が気に入ったらサポートをしてみませんか?