kotlin中 if else 和 let 的一点小摩擦

前言:

最近在学习kotlin的同时也在对项目代码做重构kotlin化,重构过程中发现了一些小问题,在试用kotlin let 嵌套 if else 时 会有一点小摩擦,究竟是什么摩擦呢?我们来一探究竟

正文

1.先看一段示例代码:

1634291077552.png

可以看到 if 报错了,提示补全else 分支,注意 这里的 it.setBg 返回的是一个字符串,这个是什么原因呢,按照正常写法是应该补全else分支的
2. 另一段示例代码:

1634291142277.png

将示例一中的红框代码调换个位置,报错没有了,why?
3. 另另另一个示例

1634291240703.png

补全else 分支的示例,这里无论是示例一还是示例二的代码位置,都不报错了
4.原因分析:
示例1分析:kotlin中let 函数是有返回值的,看 if a==1 的返回值 是 it.setBg() 是个string, else if a== 2的返回指示个void
由于没有else 分支,且上述两个返回类型不一致,编译器无法推导出最终的类型
示例2分析:if a ==1 分支返回值是 void, else if( a == 2) 分支返回也是void,两个类型是一致的,由于没有else分支,这里至少保证已有分支返回值类型是一致的
示例3分析:所有分支都有返回值,可以固定返回值类型
5.总结
对于let的返回值如果嵌套了if 且分支较多,如果无else 分支,需要保证所有if 分支返回类型一致

\

猜你喜欢

转载自juejin.im/post/7019234566598557726