フリーランスエンジニア プログラマー ホーム 技術ネタ

馬鹿がオブジェクト指向、関数プログラミングを理解した方法

2020年7月29日

どうも、りょすけです。

 

私はこれまで5年ほどプログラミングをしてきたのですが、

 

オブジェクト指向や関数プログラミングを全然理解できませんでした。

 

理解できないっていうとアレだけど、使いこなせないっていうのかな。

 

で、最近やっと、オブジェクト指向や関数プログラミングを理解できたので、今日はそのお話しを書きます。

 

 

ちなみに、今回の記事は、非常に抽象的な内容になっていますので、

 

技術的な解説の曖昧さはお許しください。

 

では行ってみよう٩( 'ω' )و

 

オブジェクト指向や関数プログラミングってなに

 

そもそも、

 

オブジェクト指向や関数プログラミングが何か?と聞かれれば、

 

What !!!!

デザインパターン、

パラダイム、

プログラミングの書き方、

プログラミングの考え方、

思想、

設計、

 

色々あると思うのだが、

 

まずは、

 

クソわかりにくいWikiを一通り並べてみようと思います。

 

オブジェクト指向プログラミング

 

オブジェクト指向プログラミング(オブジェクトしこうプログラミング、object-oriented programming、略語:OOP)とは、互いに密接な関連性を持つデータメソッドをひとつにまとめてオブジェクトとし、それぞれ異なる性質と役割を持たせたオブジェクトの様々な定義と、それらオブジェクトを相互に作用させる様々なプロセスの設定を通して、プログラム全体を構築するソフトウェア開発手法である。

 

わかりにくい

 

デザインパターン (ソフトウェア)

 

ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターンdesign pattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。

 

よくわかんないよ!

 

関数型言語

 

関数型言語functional language)は、関数型プログラミングのスタイルまたはパラダイムを扱うプログラミング言語の総称である。関数型プログラミングは関数の適用合成から組み立てられる宣言型プログラミングの一形態であり、関数は引数の適用から先行式の評価を後続式の適用に繋げて終端評価に到るツリーとして定義される。関数は引数ないし返値として渡せる第一級関数として扱われる。

 

...

 

へ?

 

プログラミングパラダイム

 

プログラミングパラダイムは、プログラマにプログラムの見方を与えるものと言える。たとえば、オブジェクト指向プログラミングにおいて、プログラムとはオブジェクトをつくりそれを管理するものである。関数型プログラミングにおいては、状態を持たない関数評価の連続である。

 

ちょっとおおおおおおおおおお!!!

 

マルチパラダイムプログラミング言語

 

マルチパラダイムプログラミング言語 (マルチパラダイムプログラミングげんご、multiparadigm programming language)は、複数のプログラミングパラダイムに対応するプログラミング言語の総称である。「1つのプログラムは複数のプログラミングパラダイムを使う」とビャーネ・ストロヴストルップは述べている。マルチパラダイムプログラミング言語の設計目標は、問題解決に当たって最良の道具になることである。たとえばOzでは、論理型、関数型、オブジェクト指向、データフローコンカレントなど、多数のパラダイムを内包している。Ozは10年かけて従来のプログラミングパラダイムが調和するよう設計されたのである。

 

もうやめてほしい ...

 

餓死しそう ....

 

天使現る!!

 

 

これがめちゃくちゃ分かりやすかった。

 

(日本語字幕の後、英語字幕で見るのがおすすめ)

 

これはJSの関数プログラミングについて、

 

初心者向けに話されてるカンファなんだけど、

 

単純な関数を用いて、

 

関数プログラミングの基礎を先ほど僕が一番最初にあげた、

 

What !!!!

デザインパターン、

パラダイム、

プログラミングの書き方、

プログラミングの考え方、

思想、

設計、

 

ここら辺の理屈から解説されていて素晴らしい。

 

マジでこの女の子と結婚したい

 

さて。

 

この動画が完全初心者の方の心に届くかどうかは分からないけど、

 

僕は、非常に勉強になった。

 

そして、この動画を見た直後に、

 

自分がたった今、開発してるMeee!(みぃ)というスキルシェアサービスのコードを読んでる時に

 

頭の中で何かが明瞭に閃いた。

 

要は、『バグってほしくない』と心の底から思えなければ、プログラミングの手法など、どうでもよくなる。

 

これや。

 

そもそもだが、今この記事を読んでいる人で、

 

考える人
オブジェクト指向や関数プログラミングを理解したいのによく出来ない、書けない

 

と悩んでいる人に聞きたいのだが、

 

あなたは、たった今、自分が書いてるプロダクトを成功させたいと思っているか??

 

私は、普段の仕事でコードを書いてる時は、申し訳ないがそのように強く思ったことがなかった。

 

僕は、とにかく動くコードを書いて、上司や同僚に褒められたいといつも思っていた。

 

プログラミングの書き方は良いけどさ、そもそも動くコード書けなきゃ何も意味ないじゃん?

 

要は、まだまだヒヨッコでした。

 

そして、今も ....

 

(参考)

 

それで、話しを戻すと、

 

私は、今Meee!(みぃ)というスキルシェア・サービスを一人で書いてるんだけど、

 

C2Cの個人間取引のサービスだから、

 

勿論ユーザー間通しの決済が発生する部分があります。

 

つまり、お客様は自分のクレジットカード情報を、

 

うちのサービスに入力するわけです。

 

考えるだけで恐ろしい。クレカ決済の時に、予想外のバグが発生したらどうなる??

 

例えば、

 

決済のAPIはStripeを使っているが、

 

何かの間違いで 、

 

const productPrice = 10000

 

 

const productPrice = 100000

 

これで決済されたら、大変なことになる。

 

ちなみに、Stripeのカスタムアカウントは、

 

 

プラットフォームの損失を補填しません。

 

それで、俺は「クレカ決済や送金処理だけは予想外の動きをしてほしくない」と強烈に思いました。そして、その瞬間、俺は初めて、オブジェクト指向や関数プログラミングなどの、デザインパターンや、パラダイムを、まともに理解することができた。

 

 

どんな愚か者も、コンピュータが理解できるコードを書くことができる。 しかし優れたプログラマーは、人間が理解できるコードを書く

関係ないけどぶち込んでみた

 

人間、私のように痛みを知らないと本質を全然理解できないこともある。

 

バグってほしくないと願えば願うほど、デザインパターンやプログラミングパラダイムにしたがってコードを書こうと思うし、

 

自分が書いたコードが、そのような原則に従っているかがわかるようになる。

 

関数プログラミングであれば、

 

ポイント

この処理は本当にピュア(純粋)な関数になっているのか? 正しい引数を入力すれば、正しいアウトプットが必ず帰ってくるのか?おかしな引数が渡ってきた時、正しいエラーがリターンされるのか?をよく考えられるようになる。

 

 

言いたいことは以上です。

 

本質的に、オブジェクト指向、関数プログラミングが何かと問われれば、予想外の動きをしないようにプログラムを書くことです。

 

と今は言える。

 

でも、それが届く人と届かない人がいて、届かない人は絶対に正論、解説しても届かないかもなので、成長するまで待つしかない。

 

嗚呼、これからは僕も、正しく、GitHubのPRをレビューできるように仕事でも頑張っていきたい。

 

今までは、全部PR、LGTM(脳死)だったんで。

 

最後まで読んでくれて有り難うございました〜〜〜m(_ _)m

Pocket
LinkedIn にシェア



新規webサービスの開発の依頼ならoffテク⭐️

低コストで、Reactなどモダン言語での新規webサービス開発を承ります

-フリーランスエンジニア, プログラマー, ホーム, 技術ネタ

Copyright© off , 2020 All Rights Reserved Powered by AFFINGER5.