宣言的な命名
宣言型プログラミングの関数名についての話がある 『なっとく!関数型プログラミング』.icon p.9
めっちゃちょびっとしか書いてないが
命令形だとcalculateScore(word)とするところを、
how的
宣言型だとwordScore(word)とすると。
what的
関数を式と捉える
動作、命令、操作、ではない
「何であるか」を表す
「何をするか」ではない
何かを「計算する」というニュアンスよりは、
「その値を取得する」というニュアンスがある
とにかくその値が得られればそれでok
「計算して求めたscoreが欲しい」のではなく、
単に「スコアがほしい」のである
内部で計算してるのか、どこかからfetchしてきてるのかはどっちでも良い
calcScoreやfetchScoreではなく
scoreという名前にする
また、関数型プログラミングの場合、
変数になにか入れてそれを使う、というより
関数の合成で何かを表す、ということをよくやる
だから、変数名と関数名がコンフリクトしない
仮にこれをtypescriptでやろうとすると、
code:ts
const score = (..) => ..
code:ts
const main = () => {
const score = score(a,b,c) ...
}
みたいになりがちで、変数名にscoreを使っていると、scoreという関数が呼べないがち
Haskellで手続き的に書くことが多いのはIOモナドの中であり、
IOモナド内の操作は、what的よりhow的になることが多いのかな?
つまり、あえてfetchScoreのような命名にするのでは
だから、let score = fetchScoreのようになり、名前のコンフリクトもない
とかありそう