はじめに
ラムダ式を勉強するにあたって関数だのStreamだの色々な用語が出てきてよくわからずに
若干パニックを起こしたので一旦整理するために記事を投稿しました。(自分を戒める意味を持つ(笑))
この記事では概念を書いていきます。ソースコードについては別記事にまとめます。
関数(function)の概念について
そもそも関数とは?
色々調べた結果、自分の中でこういう結果を導きました。
「何らかの入力(Input)を受け取り、処理(Process)をおこない、何らかの出力(Output)を返すこと。」
入力(Input)、処理(Process)、出力(Output)を持つものはざっくり言えば関数となる。
ではプログラミングの世界の関数とはどのようなものか?
Javaにおける関数とは。。。
何らかの情報を引数として受け取り(Input)、何らかの処理を行い(Process)、
何らかの結果を戻り値として返す(Output)、ひとかたまりの処理のロジック
※引数がないものや戻り値を返さないものも広義の意味では関数と呼びます。
これってメソッドを指すのでは?
最初そう思いましたが、厳密にいうと違うようです。
メソッドと関数の違いは?
関数とメソッドはどう違うのかまとめてみました。
① メソッドはクラスに属する一種の関数
関数には「I(入力)・P(処理)・O(出力)構造を伴う処理ロジック」程度の意味合いしかないようです。
一方でメソッドはもともとオブジェクト指向のための用語として登場したものです。
メソッドとは。。。
「外部からの呼び出しに応えるためにクラスのメンバとして記述された、I(入力)・P(処理)・O(入力)構造を伴う処理ロジック」
メソッドと関数は横並びの関係ではなく、「メソッドは関数の一種である。」といったis-aの関係になります。
② 関数にとって名前は重要ではなく、必須ではない。
メソッドは必ず名前を持ち、呼び出す際には名前を記述しますが、関数では名前はさほど重要でないようです。
関数にとって重要なことはつまり。。。
「何を入力として受け取り(Input)、どんな処理をし(Process)、どんな出力をするか(Output)」
実際に名前を持たない関数も存在するようで。。。(無知で申し訳ありません。)
まとめ
・関数は「何らかの入力(Input)を受け取り、処理(Process)をして出力(Output)を返す」こと。
・関数とJavaにおけるメソッドは似た存在である。(メソッド is a 関数(メソッドは関数の一種である))
さいごに
調べていると関数型プログラミングは「コード自体が簡潔に収まる」や「コードの可読性が上がる」など
メリットがたくさんあることがわかりました。そんなにメリットあるならその技術、キャッチアップしたいと思いました。
しっかり勉強して自分の頭の中の引き出しとしてラムダ式を入れておきたいです!
追記:これからまとめていく中で間違えていることがあったり、追記すべき点がございましたらコメントをよろしくお願いいたします。