「副作用」の版間の差分

編集の要約なし
 
(2人の利用者による、間の4版が非表示)
1行目: 1行目:
'''副作用'''とは、[[プログラミング]]において、ある[[メソッド]]の[[引数]]と[[戻り値]]以外の要素が、そのメソッドの動作に影響を及ぼすことをいう。
'''副作用'''(読み:ふくさよう)とは、[[プログラミング]]において、ある[[メソッド]]の[[引数]]と[[戻り値]]以外の要素が、そのメソッドの動作に影響を及ぼすことをいう。


==概要==
==概要==
副作用とは[[グローバル変数]]などの要素がある[[メソッド]]の動作に影響を及ぼすことをいう。本来であればメソッドの[[引数]]と[[戻り値]]だけを考慮すればいいはずであるが、メソッド内部で[[グローバル変数]]を参照するなどしていることにより、それらもすべて把握していなければそのメソッドを利用することができないという状態である。
[[プログラミング]]における副作用とは、[[グローバル変数]]などの要素がある[[メソッド]]の動作に影響を及ぼすことをいう。本来であればメソッドの[[引数]]と[[戻り値]]だけを考慮すればいいはずであるが、メソッド内部で[[グローバル変数]]を参照するなどしていることにより、それらもすべて把握していなければそのメソッドを利用することができないという状態である。


==オブジェクト指向で顕著になる==
==オブジェクト指向で顕著になる==
16行目: 16行目:
これらを回避する目的で様々な手法が考案されている。
これらを回避する目的で様々な手法が考案されている。


===プログラミング言語===
===プログラミング言語レベルでの回避策===
副作用をもつ[[プログラミング言語]]を根絶しよう考案されたのが[[関数型プログラミング言語]]である。関数型といっても多くのものは「副作用を低減しよう」と逃げ道的な要素を残していることが多い。一方で副作用を絶対的に悪とし完全排除を試みたプログラミング言語もあり、それらは「[[純粋関数型プログラミング言語]]」と呼ばれる。たとえば[[Haskell]]などでは引数と戻り値がすべてであり、それ以外は絶対に許されないという言語使用で副作用を封じ込めている。ただそこれらに移行するには慣れと経験が必要であり学習能力の低い[[プログラマー]]には難易度が高いという問題点を抱えている。
副作用をもつ[[プログラミング言語]]を根絶しよう考案されたのが[[関数型プログラミング言語]]である。


===プロジェクト運用===
関数型といっても[[JavaScript]]など多くの[[プログラミング言語]]は「副作用を低減しよう」というものであり、逃げ道的な要素を残していることが多く、まずは[[プログラマー]]の教育が非常に重要な要素となる。
その他にも急激な変化は難しい[[プログラミング言語]]などは現状維持し、プロジェクトに関わる人々の人事などで副作用を軽減しようという手法が考案されている。それらをまとめて最近では「[[アジャイル]]」という。ただし[[ペアプログラミング]]や[[RAIDプログラミング]]は、[[派遣社員]]が大半を占め、[[人的リソース]]の入れ替わりが激しいに日本でこそ有意義な仕組みであるが、日本では実践しているという話はあまり聞いたことがない。また、やらないよりはマシな程度の効果ではあるが[[コードレビュー]]も有効であるとされる。
 
一方で副作用を絶対悪とし完全排除を試みた[[プログラミング言語]]もあり、それらは「[[純粋関数型プログラミング言語]]」と呼ばれる。たとえば[[Haskell]]などでは[[引数]]と[[戻り値]]がすべてであり、それ以外は絶対に許されないという言語仕様で副作用を封じ込めている。ただ純粋関数型であっても業務システムではほぼ必須となる[[データベース]]などの広く共有する部分が[[グローバル変数]]的に機能するため副作用の完全なる排除は難しいのが実情である。
 
これらに移行するには慣れと経験が必要であり学習能力の低い[[プログラマー]]には難易度が高いという問題点を抱えている。
 
===プロジェクト運用レベルでの回避策===
その他にも急激な変化は難しい[[プログラミング言語]]などは現状維持し、プロジェクトに関わる人々の人事などで副作用を軽減しようという手法が考案されている。それらをまとめて最近では「[[アジャイル]]」という。
 
ただし[[ペアプログラミング]]や[[RAIDプログラミング]]は、[[派遣社員]]が大半を占め、[[人的リソース]]の入れ替わりが激しいに日本でこそ有意義な仕組みであるが、日本では実践しているという話はあまり聞いたことがない。
 
また、やらないよりはマシな程度の効果ではあるが[[コードレビュー]]も有効であるとされる。


==関連項目==
==関連項目==
26行目: 36行目:
*[[人月の神話]]
*[[人月の神話]]


==参考文献==
[[category: プログラミング]]
{{reflist}}
 
{{stub}}