この関数の例を考えてみましょう:
最初の例
;;; Lisp
(defun foo (x y z)
(let ((tmp))
(setf tmp (operation1 x y z))
(setf tmp (operation2 tmp y z))
(setf tmp (operation3 tmp y z))
(setf tmp (operation4 tmp y z))
...
(setf tmp (operationN tmp y z))
tmp))
// PHP
function foo($x, $y, $z)
{
$tmp = operation1($x, $y, $z);
$tmp = operation2($tmp, $y, $z);
$tmp = operation3($tmp, $y, $z);
...
return operationN($tmp, $y, $z);
}
私の先生は、関数型プログラミングでは、戻り値を temp 変数に格納するのではなく、すぐに次の関数に渡すべきだと教えてくれました。
2 番目の例
;;; Lisp
(defun foo (x)
(operationN
(...
(operation3
(operation2
(operation1 x y z)
y z)
y z)
y z)
y z)
)
// PHP
function foo($x, $y, $z)
{
return operationN(
...(
operation3(
operation2(
operation1($x, $y, $z),
$y, $z),
$y, $z),
$y, $z),
$y, $z);
}
これは非常に単純な例であり、残りの引数には他の関数が適用される可能性があると考えてください。私の意見では、最初の例の方が読みやすいです。
- 関数型プログラミングの方法でこのコードをフォーマットする適切な方法は何ですか?
- プログラミング時にコードの読みやすさまたは適切なコード構文を優先する必要がありますか (深さのレベルに依存する必要があります)?