May 2025
Intermediate to advanced
424 pages
6h 12m
Chinese
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
在第 19 章中,我们探讨了 Kotlin 的错误处理策略,以及如何从 Java 中的异常重构为功能性更强的技术。 事实上,大多数代码都会忽略错误,希望它们不会发生。 我们能做得更好吗?
市场部的一个新人开始修改我们在第 20 章中看到的电子表格--那个生成高价值客户评分的电子表格。 我们不知道他们在做什么,但他们不断导出破坏我们解析的文件,然后要求我们解释什么是堆栈跟踪。 这让双方的关系都有点尴尬,所以蛋糕已经开始变少了。 还能有更多的激励吗?
是的,有可能。 我们还被要求编写一个无人值守的作业,这样市场营销人员就可以将文件保存到服务器上,我们会自动编写汇总版本。 如果没有人在循环中解释这些堆栈跟踪,看来我们必须找到一种正确报告错误的方法。
下面是 代码的原样:
funSequence<String>.toHighValueCustomerReport():Sequence<String>{valvaluableCustomers=this.withoutHeader().map(String::toCustomerData).filter{it.score>=10}.sortedBy(CustomerData::score).toList()returnsequenceOf("ID\tName\tSpend")+valuableCustomers.map(CustomerData::outputLine)+valuableCustomers.summarised()}privatefunList<CustomerData>.summarised():String=sumByDouble{it.spend}.let{total->"\tTOTAL\t${total.toMoneyString()}"}privatefunSequence<String>.withoutHeader()=drop(1)internalfunString.toCustomerData():CustomerData=split("\t").let{parts->CustomerData(id=parts[0],givenName=parts[1],familyName=parts[2],score=parts[3].toInt(),spend=if(parts.size==4)0.0elseparts[4].toDouble())}privatevalCustomerData.outputLine:Stringget()="$id\t$marketingName\t${spend.toMoneyString()}"privatefunDouble.toMoneyString()=this.formattedAs("%#.2f")privatefunAny?.formattedAs(format:String)=String.format(format,this)privatevalCustomerData.marketingName:Stringget()="${familyName.toUpperCase()}, ...
Read now
Unlock full access