今日は関数型プログラミングについて触れます。より具体的には、宣言型プログラミングと命令型プログラミングの違いを見ていきます。
まず、規約を簡単に見てみましょう。次に、これらのプログラミング スタイルを比較し、それらが Java でどのように表示されるか、また言語がそれらの適切な共存をサポートしているかどうかを確認します。
関数型プログラミングは、関数が手続き型プログラミングのようなサブルーチンではなく数学関数として理解されるパラダイムです。つまり、これら 2 つのパラダイムでは、「機能」という単語の解釈が異なります。このことを覚えておいて、混同しないでください。Java では、サブプログラムは「メソッド」と呼ばれるのに対し、関数は数学関数 (ラムダ関数またはメソッド参照) を指すため、混乱することはありません。
実際、手続き型プログラミングでは、関数は入力変数だけでなく、外部要因 (関数外の他の変数やシステムの状態など) にも依存します。つまり、同じ引数を使用して同じ関数を呼び出すと、異なるコンテキストで異なる結果が生成される可能性があります。関数型プログラミングでは、関数が同じ引数で呼び出された場合、関数は入力データのみに依存するため、常に同じ結果が生成されます。
関数型プログラミングの長所
- コードの信頼性の向上
- 便利な単体テスト
- コンパイル中にコードを最適化する機会
- 同時実行の機会
関数型プログラミングの短所
関数型プログラミングの欠点は、次のすべての同じ機能から生じます。
-
代入ステートメントはありません。代わりに、新しい値が新しい変数に格納されるため、メモリを常に割り当てて自動的に解放する必要があります。その結果、高効率のガベージ コレクションは、機能プログラムを実行するシステムにとって不可欠な部分となります。
-
厳密でない評価は、関数呼び出しの順序が予測できないことを意味し、操作の順序が重要な場合に I/O 問題が発生します。
これで関数型プログラミングの簡単なレビューは終わりです。次に、プログラミング スタイルに移りましょう。
命令型プログラミングは、次の特徴を特徴とするプログラミング パラダイムです。
-
プログラムのソースコードは命令(ステートメント)で構成されています。
-
指示は順番に従う必要があります。
-
前の命令の実行によって生成されたデータは、後続の命令によってメモリから読み取ることができます。
-
命令を実行して得られたデータをメモリに書き込むことができます。
命令型言語の主な特徴は次のとおりです。
- ブール変数の使用。
- 代入演算子の使用。
- 複合表現の使用。
- サブルーチンの使用。
命令型プログラムは、自然言語の命令型ムードで表現される命令のようなものです。言い換えれば、命令型プログラムは一連のコマンドです。
命令型プログラミング言語には、C および C++ が含まれます。
宣言型プログラミングは、問題の解決策を指定するプログラミング パラダイムです。つまり、最終結果が説明されており、それを達成する方法は説明されていません。HTML は宣言型言語の一例です。この言語でタグを記述するときは、要素がページ上でどのように描画されるかについては考えません。ページがどのように見えるべきかを説明するだけです。
もう 1 つの宣言型プログラミング言語は SQL です。
実際の例を考慮して、2 つのプログラミング スタイルを比較してみましょう。特定の場所に行く方法を人にどのように説明するかということです。
この状況を想像してみてください。ある男性が通りで私たちに近づいてきて、「美術館へはどうやって行けますか?」と尋ねました。
命令型アプローチでは、徒歩でそこに行く方法のアルゴリズムを彼に提供します。
- ここで振り向いて
- 2ブロック直線で歩く
- 右に曲がります
- …
宣言型アプローチでは、単に住所を伝えるだけで、その人は自分で適切な場所に到着します。
Javaは現在、マルチパラダイム プログラミング言語です。マルチパラダイムとは、言語が複数のパラダイムをサポートしていることを意味します。
この言語は、長い進化の過程でオブジェクト指向モデルを拡張し、ユーザーがさまざまなツールを使用して、特定のタスクに最適なものを選択できるようにしてきました。
その結果、Java は現在、命令型アプローチ (メソッド呼び出しのコードの記述など) と宣言型アプローチ (実行時に使用可能なアノテーションなど) の両方をサポートしています。
要約しましょう:
-
さまざまなプログラミング パラダイムがあります。
-
宣言的アプローチと命令的アプローチがあります。
-
当面のタスクに最適なものを選択する必要があります。
-
Java は、両方のアプローチをサポートするマルチパラダイム言語です。
GO TO FULL VERSION