関数型とかの考え方メモ
2008/03/19
関数型プログラミング言語では、一般的に副作用と条件分岐は悪とされる。
副作用
ここで言う副作用とは、変数の値の再代入のこと。で再代入が無いということは、変数の状態を変更しないということ。状態が無ければテストもしやすく、バグも減る。というのが関数型プログラミングの考え方だと理解してます。
手続き型プログラミング言語に慣れた脳味噌だと、この利点を理解するのが難しい(かった)。でも直接的な意味での状態を扱わないプログラムというのはあまり意味がない。(常に「こんにちは」と表示するプログラムとか) 関数型プログラミングでは状態の変更は、関数呼出しによって行なわれる。具体的には、古い状態を引数に渡して新しい状態を戻り値で新しい変数に受ける。
条件分岐
ここで言う条件分岐とは、if や switch で処理を分けること。
でも直接的な意味での条件分岐を行なわないプログラムというのはあまり意味がない。(常に「こんにちは」と表示するプログラムとか) 関数型プログラミング(Haskell)では、条件分岐を、引数のパターンマッチを利用することで記述するロジックで条件分岐を行なわないようにできる。 #Haskellちゃんとやってないので自信なし
現在理解しているところ
関数型プログラミング言語では悪とされる副作用と条件分岐を、手続き型プログラミング言語とは別の方法で行なっているだけ。しかし、関数型と手続き型の考え方としては、口を大きく開いて自分を飲み込んでしまったくらい違うので、試してみる(勉強してみる)価値はある。