回答:
私は仕事に適したツールを使用することを信じています。命令型言語と関数型言語の両方があり、一方をもう一方よりも強く使用する必要はありません。
長所/短所については、「なぜ関数型プログラミングがまだ引き継がれていないのか」に対するEric Lippertの答えに勝てないと思います。SO質問。
まず第一に-コンパイラはもっともっとやらなければならないからです。命令型コンパイラを作成したい場合は、アセンブラへの1-1変換をほぼ行うことができ、生成されたコードは許容可能な速度になります(確かに、やることはたくさんありますが、「基本的に」1-1コンパイル+最適化です)。関数型コンパイラは、非常に重いインライン化、末尾呼び出しの最適化などを処理する必要があります。したがって、関数型言語の実装はC / C ++ / ...よりもはるかに遅くなりました(ただし、コンパイラが向上するにつれて、反復ごとに速度が大幅に向上します)。
第二に-プログラマーは、「だまされていない...状態」のアプローチを「受け入れる」ことができないと述べるのに慣れています。確かに-状態の欠如は各条件で有用ではありませんが、(グローバル)状態の欠如はローカルな状態の欠如を意味しません。
第三に、関数型プログラミングにはその裏に素敵な話はありません。オブジェクトは名詞にマッピングされ、直感的に操作できるので、OOPには素晴らしいストーリーがあります。その後、昇格される可能性のあるManager
asのサブクラスEmployee
としてクラスを作成できず、デコレーターをいじる必要があるため、それほど単純ではないことがわかります。関数型プログラムには数学の話があります。これは、IMHOの方が便利ですが、市場性は低くなります。Employee
Manager
内部的にはコンピューターの観点から-並列コンピューティングと並行コンピューティングの間に違いはありません。多くのプログラマーは違いを見ず、多くの言語は同じプリミティブで両方を処理します。関数型プログラミング言語にはローカル状態と軽量スレッドがないため、アルゴリズムの並列化ははるかに簡単です。ただし、並行プログラミングはグローバルな状態に関するものであるため、並行プログラミングは自動的に容易にはなりません。
最後に-命令型で書かれた古いプログラムがたくさんあります。命令型言語から命令型言語への移植でさえ、関数型言語よりもはるかに簡単です。
私の知る限り、投資銀行は内部で機能的なプログラムを採用し始めているため、XXIに参加しますc。(非常に重要ですが、隠れた領域です)-勢いを増します。
PS。関数型プログラムは、他のアプローチよりも複雑さを隠すという意味で「優れている」と思いますが、本質的に必須のスクリプトなどの領域がないということではありません。
プログラミング言語は、情報の表現形式です。この場合、コンピュータが従うべき指示。ただし、表現は対象読者(つまりプログラマー)にとっても重要です。
機能的/論理的な概念は、手続き型の概念ほど日常生活で一般的に使用されるものではありません。手順(テレビ、DVDプレーヤーの使用方法、IKEAから家具の製造方法など)を読んだ場合、手順は(自然言語ではありますが)ほとんどが手順に従って書かれています。
したがって、数学や科学にそれほど深く関わっていない多くの人々は、論理的または機能的な概念よりも、そのような手続きの概念にはるかに精通していることがよくあります。
これは、使用するプログラミング言語のクラスの選択に大きな影響を与えると思います。結局のところ、そのようなプログラミング言語で解決できる一連の問題は、ほとんど同じです(すべてが完全に解決している限り)。
ただし、多くの手続き型言語は、他の概念の面をますます取得しています。Pythonはラムダ計算とクロージャー、ルビーも実行できます。業界でひどく使用されているJavascriptは、実際には実際には関数型言語です(ほとんどの人が「誤用」する場合でも、手続き型の方法で使用することによります)。したがって、それらの機能を適切な場所で適切に使用することは、実際にはプログラマの仕事です。