Help us understand the problem. What is going on with this article?

OOP と FP の比較・対応 ニャ!!

More than 3 years have passed since last update.

tl;dr

OOP(ObjectOrientedPrograming),FP(FunctoinalPrograming) の解釈と対応付けをつらつらと書いていくヤーツです。

※ いまいま思うことで、正しいとかそういう話では無いです。

取り上げること

  • 再利用
  • 多相性
  • モジュラリティー

作者の視点だとWeb周りが読者がいた場合のカバレッジが効くと思うのでそれを採用します。

説明用の構成

  【面倒なのでViewとか省略してます】
  +---------------+
  | Browser       |
  +---------------+
    |          A
    V          |
  +--- WebFrameWork -------------+
  |[Router]    |                 |
  |  +-> [Controller] <--> [ORM] |
  +------------------------------+

pseudo-code(疑似コード)で書いてみる

疑似コードベースに三つの事を見ていきます。

OOP で書いてみる

@path('/hoge')
HogeController {
  @GET
  hoge(@param("name") name): hoge[] {
     hoge_orm.list(name)
  }
}

@path, @GET <- Routingのつもり
@param <-
hoge_orm <- ORM の操作をおこなる何か

FP で書いてみる

route(r Request) : Response
case /hoge hoge GET

hoge(r Request) : Response
 = to_response . select . to_query(r)
// 関数合成したつもり

再利用

基本的に再利用可能なものは、OOP/FPともに下記の事かなと思います。
どちらのプログラミング手法でもおおよそ一緒かと思っています。

  • 再利用可能なもの
    • WebFrameWork -> Aサイト,BWebサービスのAPI として再利用されている
      • Router, Controller, ORM の抽象化部品で構成した枠はいろんなサイトで利用されている
    • データそのものとして扱うもの(ORMのオブジェクト)
      • user など共通的なものは、そのサイト内で再利用されているはず
  • 再利用できないもの
    • Router で定義された url
      • 同じURLで意味レベルで内容が違うものを返すことってあるんでしょうね・・・わかりかねますが・・・
    • Controller で記述された処理内容
      • url と 1対1で大体結びついて、他で再利用とかないっすよね hoge() メソッド、関数 再利用はない

多相性

プログラミング手法に依存せずに、A,B,Cのサイトを表現できますね

モジュラリティ

  • OOPの粒度はカプセル化の範囲でモジュラリティが保たれます
  • FPの粒度は関数の範囲でモジュラリティが保たれます

まとめ

表に起こすと、下表のようになります。
私の視点ではどちらの手法でも構わないと思いますが、
開発チームいろいろだと思うので、

  • ある程度スキルあるなら FP
  • スキルが無く、動くものを出さないといけないのなら OOP
  • リテラシーがまったく無い 手法とか気にせずに書いてください

と思う今日この頃だニャ

項目 OOP FP 備考
再利用 互角 互角 WebFrameWorkがしてくるので考える必要は無いはず
多相性 互角 互角 再利用と同じ
モジュラリティ OOPではカプセル化と言う謎の範囲を選択可能のため自由度が高いのです。コードを汚くすることは簡単なので注意が必要です
YooWaan
ゲームのハンドルネームです (最近やってないけど) オジサンとはキモい(哲学)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした