JavaScript与Java中的默认参数

默认参数(也称为可选参数)是提供给函数的参数的默认值。如果用户不提供此参数的值,则将使用默认值。如果用户提供了默认参数的值,则将使用用户提供的值而不是默认值。、

在JavaScript中,所有的函数参数都是可选的,默认情况下是未定义的。来看下面一个例子:

function add(a, b) {
  return a + b;
}
// 因为所有参数默认为未定义
// 直接调用add()相当于调用add(undefined,undefined)
// 强行对undefined 进行运算会返回NaN
add(); // -> NaN
// b 未定义
// 调用add(1)等于调用add(1, undefined),同样返回NaN
add(1); // -> NaN
add(1, 2); // -> 3

想要让一些参数变得可选可以为他们添加默认值

在JavaScript中,你可以直接这样定义

function add(a, b = 0) {
  return a + b;
}
// 当你没有给出参数b的值时,b将为0
add(1) // 1 + 0 = 1
add(1, 2) // 1 + 2 = 3

想要了解更多关于JavaScript中默认参数的内容可以访问MDN

而在Java中,所有函数参数都是必需的。这意味着由于所有参数都是必需的,所以没有办法给参数设置默认值。

package com.company;
public class Main {
    private static int add(int a, int b) {
        return a + b;
    }
    public static void main(String[] args) {
        // 尝试使用无参数或一个参数调用add
        // 由于所有参数都是必需的,因此会给出编译时错误
        add(); // 编译错误
        add(1); // 编译错误
    }
}

尽管在Java中存在这种限制,但是我们利用Java的重载机制对代码进行变通,可以做到如JavaScript中的类似效果,如下所示

重载方法:如果一个类中的方法具有不同的参数列表,那么类中的方法可以具有相同的名称。

package com.company;
public class Main {
    private static int add(int a, int b) {
        return a + b;
    }
    private static int add(int a) {
        return add(a, 0);
    }
    private static int add() {
        return add(0, 0);
    }
    public static void main(String[] args) {
        add(); // -> 0
        add(1); // -> 1
        add(1, 2); // -> 3
    }
}

了解更多关于Java中重载方法的知识可以访问Defining Methods (The Java™ Tutorials > Learning the Java Language > Classes and Objects)

翻译

根据原文Default parameters in JavaScript and Java – Tănase Hagi – Medium,略有修改