データエンジニアリングでどちらを選ぶ?関数型プログラミング vs オブジェクト指向プログラミング
「ハンマーしか持っていないと全てが釘に見える」
アプリ開発では従来オブジェクト指向プログラミング (OOP) が隆盛を誇ってきました。
だからデータエンジニアリングに注目され始めた今でもとりあえずOOPでデータ処理を実装しようとする流れが強いです。
しかし本当にそれでよいのでしょうか?
関数型プログラミング (FP) とOOPを比較しながらデータエンジニアリングではどちらを選ぶべきか考えてみましょう。
それぞれのコンセプトは?
FP
数学の関数よろしく、状態を持たずデータも変更しないプログラミングスタイルです。
関数が何を返すかは引数だけに依存するため、モジュール性や予測可能性が高いです。
OOP
属性と操作を持って現実のモノをモデル化するオブジェクトを中心としたプログラミングスタイルです。
現実をうまく表すよう設計されるので比較的分かりやすいです。
主な違いは?
不変性
FPで扱うデータは不変で、変更したい場合は代わりにデータを作り直します。
OOPのオブジェクトは可変で、適宜状態を変化させていきます。
状態と副作用
FPはソフトウェアのふるまいを予測しやすくするため、状態を変化させず副作用(引数以外の要因で戻り値が変わること)も起こしません。
OOPは分かりやすさ重視でオブジェクトの状態を変化させます。
モジュール性
FPは互いに依存しない関数を使うのでモジュール性が高いです。
OOPはクラスでモジュール性を高めることができます。(が、実装者の能力に強く依存します)
並行性
FPの不変性とモジュール性の高さから並行処理を簡単に行えます。
OOPは副作用があるので注意しないとバグの元です。
具体的にどんな実装になる?
Pythonとpandasライブラリを用いた場合の実装例を見比べてみましょう。
よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただきます!