Kotlin链式通话中的评论

时间:2019-03-04 17:05:04

标签: kotlin functional-programming

由于编写Kotlin代码时,通常会有更长的调用链需要说明。在此链中添加评论的最佳位置是什么?

val map = javaClass.getResourceAsStream("/response.csv")
    .reader() //commentLocation1
    .readLines()
    .drop(1)
    // commentLocation2
    .map { it.split(",") }
    .map {
        // commentLocation3
        it.first().toInt() to it[2]
    }
    .toMap()

3 个答案:

答案 0 :(得分:3)

我没有在StringIO() object中找到任何有关此的提示,但是我更喜欢commentLocation1和commentLocation3。但是请记住,表达代码意图的更可取的方法是添加具有好名字的函数。因此,如果您觉得有必要添加注释以描述某些映射,过滤等的业务价值,则最好使用对函数的引用,用名称来解释。

答案 1 :(得分:2)

这只是个人喜好,但我不喜欢文档外的注释,恕我直言,它减少了在代码中保留过时注释的机会,因此,我建议将代码包装到具有所需解释的函数中:

/**
 * This function does something very useful =)
 */
fun function(){

}

答案 2 :(得分:0)

通常,我认为想在链条中间发表评论是一个信号,表明您的链条过长。如果将其分解,则可以使用变量名称添加很多“自我文档”。

val responseReader = javaClass.getResourceAsStream("/response.csv").reader()
val linesWithoutHeader = responseReader.readLines().drop(1)
val splitLines = linesWithoutHeader.map{it.split(","))}
val map = splitLines.map(firstAndThirdColumns).toMap()
def firstAndThirdColumns(...

这还具有为错误消息提供更精确位置的优点,并允许您插入类型注释以在中间仔细检查某些内容。当某人稍后进行维护时,他们也许可以不用中间变量名,而不必从链的开头重新构造头部的整个状态。在最坏的情况下,如果您仍然觉得需要注释,可以将其设为常规的注释,看起来并不那么尴尬。