関数型プログラミングの強み





ねえ!私の名前はカテリーナです。関数型プログラミングに最も温かい気持ちを持っています。関数型言語を継続的に使用し、少しでも教えています。



Typeableでの私たちの主な開発言語はHaskellであり、Haskellが生産の準備ができているかどうかについて誰もが議論している間、私たちはそれを使用して競争上の優位性を考えました。この経験に基づいて意見を述べたいと思います。



FPがプログラミングをどのように改善するか



関数型プログラミングは現在非常に人気があり、FP要素は、ラムダ関数、部分適用(カリー化)、高階関数(マップ、フィルター、畳み込み)など、多くの命令型言語で登場し始めました。これらの借用はどこかで見栄えがしますが、どこかでかなり奇妙な外国の構文につながります。しかし、プログラミングパラダイムはプログラマーの頭の中にあるアプローチであり、一般に言語の一部ではありません。ある程度まで、どの言語もさまざまなパラダイムをサポートしており、その設計により、プログラムをさまざまなスタイルで開発できます。機能的なスタイルで開発する価値があるかどうかは未解決の質問であり、各開発者は好み、言語機能、およびその他の考慮事項に基づいてそれに答えます。



命令型言語で関数型スタイルを使用するか、さらに良いことに、関数型言語、特に静的に型付けされた言語を使用すると、コードがはるかに良くなると信じています。



  1. コードはより簡潔で表現力豊かになります。「表現力」は、コードの単位あたりのアイデアの数として定義できます。一般に、関数型言語は、より高いレベルであるため、より表現力があります。たとえば、配列またはリスト内のすべての要素の変換は、機能的なワンライナーで行われます(map / foreach /その他と無名関数を使用)が、必須のスタイルでは、ループを編成し、変数を宣言する必要がありますカウンターまたはイテレーターの場合は、明示的な割り当てを使用します。より複雑な例では、表現力の違いは増加するだけです。
  2. . « » . , . , , , - , : , (, ) , . , . ( ), « » . , , , . (working memory), , . , . — . , , C, SOLID GoF-, , , .



  3. . — , . : , , . , , , ? . «» , , « ».
  4. コードのデバッグとテストが簡単になります。この点は、前の2つの点に続きます。小さな関数のセットがあり、そのうちのいくつかは純粋です。それらの結果は入力のみに依存することがわかっています。コードのデバッグが簡単になります。使用されている関数が個別に返されるものを確認するだけで、それらがどのように連携するかを理解できます。アプリケーションの「クリーンな」ロジックの単体テストを作成するのも同じくらい簡単です。 


FPがプログラマーをどのように改善するか









次に、関数型言語でプログラムを書くことに直接関係のない私の経験を共有し、FPの知識と使用が私にとって他にどのようなものであり、あなたにとって役立つかもしれないかについてお話ししたいと思います。



  1. , -. - , . , «» « » , , . , : , , Haskell, Brainfuck, Piet. . , .
  2. , , computer science. , . , , - , , .
  3. . , « » , , . , . , . , , , . , , - , - , . , , .
  4. : Haskell! , Haskell, . , Haskell-, . - . «» «» , , . , , «Haskell-». , , . , , . . , , , , . , , , . , : — ! 


結論



Python、C ++、Kotlin、Swiftなどの一般的な産業開発言語でのFP要素の出現は、このアプローチが本当に有用であり、長所があることを確認しています。機能スタイルを適用すると、プログラミング言語に関係なく、分解、一般化、およびテストが容易な、より堅牢なコードが可能になります。もちろん、関数型言語を使用すると、高度な表現力を備えた自然な構造を提供することで、これらの利点を最大限に活用できます。



関数型言語はたくさんありますが、私たちが思うように、現時点で開発に最も便利で便利なのは、静的型付けを使用する言語です。これにより、コンパイル中に多くのエラーをキャッチし、アプリケーションロジックの一部をタイプレベルで表現できます。



結論として、たとえそれがあなたの自己啓発のためだけに役立つとしても、誰もが代替のアプローチを使用して実際にそれらを試すことを恐れないことを望みます。



All Articles