解释:命令式与声明式编程

发表:2年前 更新:1年前

您很可能听说过声明式编程与命令式编程。

你可能也查了一下,得到了类似的东西

在计算机科学中,声明式编程是一种编程范式,它表达了计算的逻辑而不描述其控制流。

如果你和我一样,那是没有意义的。那么让我们来看看隐喻吧!

假设你想要一杯咖啡。

势在必行的方式:

我会从左下抽屉拿一个杯子,从冰箱里拿一些牛奶,加热一些牛奶,把牛奶倒进杯子里,从最上面的架子上拿一些咖啡粉倒进咖啡里,然后挑一个勺子从桌子上混合咖啡。

声明方式:

妈妈,我要一杯咖啡!

现在,您想预订一辆出租车到办公室。你可以告诉司机到达办公室的所有确切转弯和道路,或者你可以只给他们地址。

看?命令式的方式是列出如何做某事的确切步骤,而声明式的方式只是说出我们想要做什么。

注意:声明式程序只是命令式的抽象。最后,需要有人去做必要的工作。妈妈需要以一种必要的方式煮咖啡。出租车司机需要知道去你办公室的路。


好吧,让我们从隐喻世界跳到我们的代码,并自己尝试声明性代码。这是一个快速测试:编写一个函数,将数组中的所有偶数相加




时间到!我见过很多人这样写答案:

function evenSum(numbers) {
    let result = 0;

    for (let i = 0; i < numbers.length; i++) {
        let number = numbers[i]
        if (number % 2 === 0) {
            result += number;
        }
    }

    return result;
}

这是必须的;这是布置每一步。

这是一个更具声明性的解决方案:

const evenSum = numbers => numbers
    .filter(i => i % 2 === 0)
    .reduce((a, b) => a + b)

在这里,我们要求 JavaScript 做我们想做的事:过滤掉偶数,然后添加它们。通过使用更多的函数,我们可以使我们的函数更具声明性。

const isEven = n => n % 2 === 0;
const sum = (a, b) => a + b;
const evenSum = numbers => numbers.filter(isEven).reduce(sum);

注意:您现在一定已经注意到函数式编程是声明式编程的一个子集!

您一定已经开始看到好处了。如果没有,这里有一个列表:

  1. 声明式程序更具可读性。 我只看到“按偶数过滤并按总和减少”,而不是某种我需要手动单步执行才能理解的循环。
  2. 声明式程序是可重用的。 在最终代码中,我们有 3 个单独的函数,我们可以在代码库中重用它们。由于命令式代码严重依赖于状态,它可能很难被重用。
  3. 声明式程序是简洁的。

#javascript

#教程

signature
保持理智
评论

无权限

请登录后评论

RunPod公众号

赞助商

联系我们

QQ群:798695907

邮箱:laravel@88.com