JavaScript普通方法调用和把方法当作参数的方法调用以及Java中的lambda表达式

文章介绍了如何通过将计算方法作为参数传递来实现更通用的求和、求平方和立方和的功能。在JavaScript中展示了sumOfAnything函数的运用,然后在Java中利用lambda表达式和接口实现类似的功能,强调了这种方法的通用性和代码简洁性。
摘要由CSDN通过智能技术生成

1.假如我们要求sum=1+2+3+..+n

function sum1(n){
        let sum = 0;
        for (let i = 1; i <= n; i++) {
          sum += i;
        }
        return sum;
}

2.假如我们要求sum=1^2+2^2+3^2+..+n^2

function sum2(n){
        let sum = 0;
        for (let i = 1; i <= n; i++) {
          sum += i*i;
        }
        return sum;
}

3.假如我们要求sum=1^3+2^3+3^3+..+n^3

function sum3(n){
        let sum = 0;
        for (let i = 1; i <= n; i++) {
          sum += i*i*i;
        }
        return sum;
}

4.我们想一下,是否有一种更通用的方法呢,没错,就是把方法当作参数来定义方法

function sumOfAnything(n,f){
        let sum = 0;
        for (let i = 1; i <= n; i++) {
          sum += f(i);
        }
        return sum;
}

然后我们来求第一题的sum=1+2+...+100,sumOfAnything(100,x=>x),输出结果为5050

第二题的sum=1^2+2^2+3^2+..+10^2,sumOfAnything(10,x=>x*x),输出结果为385

第三题的sum=1^3+2^3+3^3+...+5^3,sumOfAnything(5,x=>x*x*x),输出结果为225

 5.试想一下,如果我们要求的不再是加法,而是乘法、除法呢,比如sum=1^2*2^2*3^2*..*n^2

function anthingOfAnything(n, f, comb,identity) {
          let sum = identity;
          for (let i = 1; i <= n; i++) {
              sum = comb(sum,f(i));
          }
          return sum;
}

sum=1^2*2^2*3^2*..*10^2,使用anthingOfAnything(10,x=>x*x,((x,y)=>x*y),1),结果为13168189440000

 6.那么在java当中有没有类似的把方法当作参数来调用呢,当然有,那就是lambda表达式

以刚才JavaScript最后一个方法为例

首先,我们先来定义两个接口

interface Operation{
    int operator(int x);
}
interface Comb{
    int combOp(int x,int y);
}

然后定义方法

public static int anythingOfAnything(int n,Operation operation,Comb comb,int identity){
        int sum = identity;
        for (int i = 1; i <= n; i++) {
            sum = comb.combOp(sum, operation.operator(i));
        }
        return sum;
}

最后,用lambda表达式的形式传参调用这个方法测试sum=1^2*2^2*3^2*4^2*5^2

public static void main(String[] args) {
        //sum=1^2*2^2*3^2*...*n^2
        System.out.println(anythingOfAnything(5, x -> x * x,((x, y) -> x*y),1));
}

 

7.总结:把方法当作参数来调用的方法,比起普通方法来说,可以适应于更多的情况,更加通用,并且这种写法能使代码更加简洁,可读性更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值