Kotlin简介(2)

让我们在这里暂停一下,看一个典型的Java逻辑片段以及对应的Kotlin实现:

public class Sample { public String logic(String paramA, String paramB) { String result = null; try { if (paramA.length() > 10) { throw new InvalidArgumentException(new String[]{"Unknown"}); } else if ("AB".equals(paramA) && paramB == null) { result = subLogicA(paramA + "A", "DEFAULT"); } else if ("XX".equals(paramA) && "YY".equals(paramB)) { result = subLogicA(paramA + "X", paramB + "Y"); } else if (paramB != null) { result = subLogicA(paramA, paramB); } else { result = subLogicA(paramA, "DEFAULT"); } } catch (Exception ex) { result = ex.getMessage(); } return result; } private String subLogicA(String paramA, String paramB) { return paramA + "|" + paramB; } }

对应的Kotlin实现:

fun logic(paramA: String, paramB: String?): String { return try { when { (paramA.length > 10) -> throw InvalidArgumentException(arrayOf("Unknown")) (paramA == "AB" && paramB == null) -> subLogicA(paramA + "A") (paramA == "XX" && paramB == "YY") -> subLogicA(paramA + "X", paramB + "X") else -> if (paramB != null) subLogicA(paramA, paramB) else subLogicA(paramA) } } catch (ex: Exception) { ex.message ?: "UNKNOWN" } } private fun subLogicA(paramA: String, paramB: String = "DEFAULT"): String { return "$paramA|$paramB" }

虽然这些代码片段在功能上是等效的,但是它们有一些明显的区别。

logic()函数不需要包含在类中。Kotlin提供了顶级函数。这开辟了一个广阔的空间,鼓励我们去思考是否真的需要一个对象。单独的纯函数更容易测试。这为团队提供了采用更简洁的函数方法的选项。

Kotlin引入了when,这是一个处理条件流的强大结构。它比if或switch语句的功能要强大得多。任意逻辑都可以使用when进行条理的组织。

注意,在Kotlin版本中,我们从未声明返回变量。这是可能的,因为Kotlin允许我们使用when和try作为表达式。

在subLogicA函数中,我们可以在函数声明中为paramB指定一个默认值。

private fun subLogicA(paramA: String, paramB: String = "DEFAULT"): String {

现在,我们可调用任何一个函数签名了:

subLogicA(paramA, paramB)

或者

subLogicA(paramA) # In this case the paramB used the default value in the function declaration

现在,逻辑更容易理解了,代码行数减少了约35%。

把Kotlin加入Java构建

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/399b3a47af5bc6f9637d2b00264ce737.html