Kotlinベース11関数のデフォルト値
Kotlinベース11関数のデフォルト値
関数のデフォルト
Java言語では、パラメータのデフォルト値の使用はサポートされていません.これは「デフォルトパラメータ」と「メソッドリロード」が同時にサポートされていると二義的な問題があるためだと言われていますが、具体的な原因は分かりません.しかし、個人的にはJavaがこの特性をサポートしていないのは確かに卵が痛いです.使い方をリロードしてもデフォルトパラメータという特性と同じ機能を間接的に実現できると言っていますが、これはあなたがもっとコードを書かなければならないことを意味しています.この点について、
Javaがデフォルトパラメータをサポートしていると仮定すると、次のコードについて
このような人に対して私は何を言うべきか分かりません.あなたは
鋭い目つきの学生たちは、
Pythonを使ったことがある学生は疑問があるかもしれませんが、デフォルトのパラメータがサポートされている以上、指定されたパラメータの値伝達はサポートされていませんか?答えは肯定的です.
関数のデフォルト
Java言語では、パラメータのデフォルト値の使用はサポートされていません.これは「デフォルトパラメータ」と「メソッドリロード」が同時にサポートされていると二義的な問題があるためだと言われていますが、具体的な原因は分かりません.しかし、個人的にはJavaがこの特性をサポートしていないのは確かに卵が痛いです.使い方をリロードしてもデフォルトパラメータという特性と同じ機能を間接的に実現できると言っていますが、これはあなたがもっとコードを書かなければならないことを意味しています.この点について、
Javaがデフォルトパラメータをサポートしていると仮定すると、次のコードについて
public int add(int a) {
// do something
}
public int add(int a, int b = 0) {
// do something
}
add(12)
が実行されると、呼び出されたint add(int a)
ですか、それともint add(int a, int b = 0)
ですか.このような人に対して私は何を言うべきか分かりません.あなたは
public int add(int a, int b = 0)
を定義した以上、public int add(int a)
を定義して何をしているのか、これ以上多くのことをしているのではないでしょうか.C++の中でこのようにすると間違いを報告します.原因は二義的な問題が発生したからです.私が言ったように、public int add(int a, int b = 0)
を定義し、public int add(int a)
を定義して何をしているのかを定義します.このような問題は完全に回避できます.同時に、デフォルトのパラメータの特性を使用して、余分なコードを書く必要がなく、便利さを楽しむことができます.私たちのKotlinもこの特性をサポートしてくれて嬉しいです.@JvmOverloads //<1>
fun joinToString(
collection: Collection,
separator: String = ", ",
prefix: String = "",
postfix: String = ""
): String {
val result = StringBuilder(prefix)
for ((index, element) in collection.withIndex()) {
if (index > 0) result.append(separator)
result.append(element)
}
result.append(postfix)
return result.toString()
}
fun main(args: Array) {
println(joinToString(listOf("c++", "Java","Python", "Kotlin")))
}
//result:
c++, Java, Python, Kotlin
Process finished with exit code 0
鋭い目つきの学生たちは、
@JvmOverloads
という声明に気づいたはずだ.では、これは何に使いますか.そうですね.さっきJavaはデフォルトパラメータをサポートしていないと言ったのではないでしょうか.この声明は、Javaコンパイラにこのクラスをコンパイルするときに、対応するリロード関数を生成することを教えています.そうすれば、この関数はJavaで使用できます.自分でコードを書く必要はありません.public class DefaultPara {
//error public void print(String s = "1234")
public void print(String s) {
System.out.println(s);
}
public static void main(String ...args) {
new DefaultPara().print("dasdsa");
String[] str = {"c++", "Java","Python", "Kotlin"};
ArrayList list = new ArrayList<>();
for (String s : str) {
list.add(s);
}
System.out.println(Kt34Kt.joinToString(list));
}
}
//result:
dasdsa
c++, Java, Python, Kotlin
Process finished with exit code 0
Pythonを使ったことがある学生は疑問があるかもしれませんが、デフォルトのパラメータがサポートされている以上、指定されたパラメータの値伝達はサポートされていませんか?答えは肯定的です.
fun main(args: Array) {
println(joinToString(listOf("c++", "Java","Python", "Kotlin"), postfix = "..."))
}
//result:
c++, Java, Python, Kotlin...
Process finished with exit code 0