1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

関数は数値じゃないですよって話

Last updated at Posted at 2023-03-13

経緯

Rubyを学習していて、関数定義の部分でこんな記述に出会いました。

def hello
  'Hello'
end

こんなふうに書かれると、「これって関数自体が'Hello'って値を持ってるのか?だったらreturnとかつけずに、関数内でやることやってbreakして関数を引数にしちゃってもいいんじゃないか?」と思ったわけです。

どう違うのか

天下のChatGPT様に聞いてみたところ、このような返答が来ました。

関数自体が値を持っているというよりは、関数が呼び出された時に'Hello'という文字列を返すように定義されています。つまり、greeting関数が呼び出された結果として、'Hello'が返されるということです。

なので関数というのは、渡す値でも、返される値でもなく、その二つをつなぐ「橋」の部分なんですね。

大学で数学概論を受講したとき、集合の分野で 「写像」 という概念がありました。たしか写像の別名は 「関数」 じゃなかったか...
写像というのは、ある集合A, Bがあったときに、Aの要素にBの要素が対応するような関係のことをいいます。下図でいう矢印の部分に相当します。

詳しくはこちら(写像 - Wikipedia)
map.png

先ほどのコードに戻りましょう。

def hello
  'Hello'
end

この関数には、一見なんの引数も戻り値も無いように見えます。それは逆に言えば、「どんな値を渡されてもたった一つの値を返す」ということになります。全射っすね。

なのでこの関数は、写像的に言うと 「どんな値であっても"Hello"に対応させるような対応関係」 といえるわけです。

あっそうだ。Rubyの関数においては、returnがなくても、自動的に戻り値が返されるようになっているようです。Rubyくんさぁ...

まとめ

関数というのは、一見値を持つように見えても、それ自体は値を持ちません(持ってるものもあるかもしれないけど...)。
ある値を渡されて、それを別の値に対応づける(戻り値を返す)のが関数です。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?