我有四个方法,可以改变输入并返回输出。
class edit
{
function a($input) { return $input + 4; }
function b($input) { return $input - 2; }
function c($input) { return $input * 10; }
function d($input) { return $input / 8; }
}
巧合的是,这些方法需要一个接一个地调用,前一个返回的输出作为下一个的输入。
我们可以通过多种方式处理这个过程。
$handle = new edit();
$output = $handle->a(8);
$output = $handle->b($output);
$output = $handle->c($output);
$output = $handle->d($output);
或
在类中创建另一个方法来处理整个过程。
function all($input)
{
$output = $this->a($input);
$output = $this->b($output);
$output = $this->c($output);
$output = $this->d($output);
return $output;
}
$handle = new edit(8);
$handle->all();
这些都可以完成同样的任务。
但是,我最近了解了合成功能,这对我来说是完美的。
(注意这里的示例我已经从类移动了方法a,b,c,d ,并将它们称为函数在一个程序庄园中,我无法使这个组合功能 OOP友好,请原谅我。)
function compose($f,$g,$h,$i)
{
return function($x) use ($f, $g, $h, $i) { return $f($g($h($i($x)))); };
}
$comp = compose('a', 'b','c','d');
$result = $comp(8);
说了这么多,我想知道用组合功能实现这项任务的好处?
我只能注意到最小的改进,因为我们不必将输入传递四次,只需一次。
在我最近的研究中,我遇到过多位软件工程师,他们正在讨论功能编程的优秀程度。
我觉得我错过了什么?或者是我提到的唯一改进?
PS - 我使用的语言是PHP,我在这里给出的方法/功能只是简单的例子来说明这一点。我也在努力遵守 SOLID 原则。
感谢。