[解決済み] ステートレス・プログラミングのメリット?
質問
最近、関数型プログラミングについて勉強しています(特にHaskellですが、LispやErlangのチュートリアルも見ています)。コンセプトはとても勉強になるのですが、"no side effects"のコンセプトの実用面がまだ見えてきません。その実用的な利点は何でしょうか?私は関数的な考え方で考えようとしていますが、状態を簡単な方法で保存する能力がないと、ただ過度に複雑に見える状況があります(私はHaskellのモナドを「簡単」だとは思っていません)。
Haskell(または他の純粋な関数型言語)を深く学び続ける価値はあるのでしょうか?関数型やステートレス型のプログラミングは、手続き型よりも実際に生産的なのでしょうか?Haskellや他の関数型言語を後で使い続ける可能性はありますか、それとも理解のためだけに学ぶべきですか?
生産性よりも性能を重視しています。ですから、手続き型、オブジェクト指向型、その他の言語よりも関数型言語の方が生産性が高いかどうかを主に尋ねています。
どのように解決するのか?
読む 関数型プログラミングの概要 .
ステートレス・プログラミングには多くの利点がありますが、特に重要なのは 劇的に マルチスレッドで並行処理されたコード ぶっちゃけた話 変えられる状態は マルチスレッドコードの敵です デフォルトで値が不変であれば、プログラマは1つのスレッドが2つのスレッド間で共有される状態の値を変更することを心配する必要がありませんから、競合状態に関連するマルチスレッドのバグの全クラスを排除することができます。競合状態がないため、ロックを使用する理由もありません。したがって、不変性によってデッドロックに関連する別の種類のバグもなくなります。
これが関数型プログラミングが重要である大きな理由であり、関数型プログラミングの列車に飛び乗るのに最も適した理由でしょう。他にも、デバッグの簡略化(関数が純粋で、アプリケーションの他の部分の状態を変化させない)、より簡潔で表現力のあるコード、デザインパターンに大きく依存する言語と比較して定型文が少ない、コンパイラがコードをより積極的に最適化できるなど、多くの利点があります。
関連
-
[解決済み] ネストされた関数。副作用の不適切な使用?
-
[解決済み] 関数型プログラミング言語と命令型プログラミング言語の違いは何ですか?
-
[解決済み] (関数型)リアクティブプログラミングとは?
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
-
[解決済み】関数型プログラミングで、ファンクターとは何ですか?
-
[解決済み】関数型プログラミングのソフトウェア工学の方法論はありますか?[クローズド]
-
[解決済み】なぜ関数型プログラミングはまだ浸透していないのでしょうか?
-
[解決済み】手続き型プログラミングと関数型プログラミングの違いは何ですか?[クローズド]
-
[解決済み] First Class FunctionとHigh Order Functionの違いについて
-
[解決済み] ヒンドレーミルナーとは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ネストされた関数。副作用の不適切な使用?
-
[解決済み] 関数型言語における「パターンマッチング」とは?
-
[解決済み] 関数型プログラミングで時間関数が存在するのはなぜですか?
-
[解決済み] クロージャ」とは何ですか?
-
[解決済み] Y-combinatorとは?[クローズド]
-
[解決済み】ミュータブルステートなしで何か役に立つことができるのか?
-
[解決済み】関数型プログラミングで、ファンクターとは何ですか?
-
[解決済み] .then()チェーンで以前のプロミス結果にアクセスするにはどうすればよいですか?
-
[解決済み】手続き型プログラミングと関数型プログラミングの違いは何ですか?[クローズド]
-
[解決済み] ヒンドレーミルナーとは?