【开发效率问题】声明对象,不能自动生成对象名


#1

对比java声明对象,kotlin先写对象名再写类名,然后再修改对象名,书写太不爽了

var mBean : DetailBean ? = null  

就这么简单一句,kotlin要手打两遍 “DetailBean” ,再as里面用快捷键了 后面的 ": DetailBean " 也没有直接出来,然后还得从新修改 对象名“detailBean” 变成 “mBean”. 太啰嗦了!


#2

哦,那你用 Java 吧 :expressionless:


#3

你很享受这种蹩脚的写法吗? 我只是提出自己的意见,希望官方能优化或者给出解决方案。多人开发项目,我也不可能只用java。


#4
  1. 个人认为这种写法并不算蹩脚,与 Java 相比只是风格问题
  2. 我也不喜欢你这种写法,但并不是因为类型后置,而是因为这里用了 var,以及没必要的可空类型,我会这么写 val bean = initBean(xxx)
  3. 你向官方提别的建议还好,这个他们绝对不可能通过的,赌五毛

#5

另外,很多人反对类型后置语法的原因是因为 IDE 不能自动提示一个变量名,在我看来他们只是懒于思考如何取一个好的名字,你是不是因为这个原因呢?


#6

懒于思考都出来了,呵呵,干脆用txt写得了,要啥自动提示自动化,我1s能写完的代码,你花10s去打字去想个酷炫的名字,我就用var举个例子,还非要钻牛角尖不为空,我TM业务需要就要null咋了,对,啥建议都不要说,无脑吹去吧。你别回复了


#7

先说命名的问题,这是习惯问题,你可能习惯了Java里打出类名可以直接出对象名,到了Kotlin不习惯很正常。
解决方法也有很多种,比如Intellij IDEA里的Live Templates就可以创建类似于宏的东西。

好,来解决一下另一个问题:为什么写法这么智障

因为在很多情况下不需要写类型,编译器会自动推断,IDE也会提示这个对象是什么类。

例如val i = 1val j = 0这种情况你肯定是知道i和j是Int类型,因为根据后面的1和0编译器会知道这是整型数字就直接初始化为Int类型了。其实Swift也是这样,let相当于Kotlin里的val,是一个意思,函数式编程嘛。

在以前为了维护代码的方便和为了快速知道变量是啥类型(当时的BCPL无法帮助人们记住变量的类名),人们创造了匈牙利命名法。这种命名法命名出来的变量可以直接通过变量名就能知道是什么类型、用途,那类名其实就更不重要了。因此Kotlin选择将类名后置,并在赋值号后的对象类型清晰的情况下允许开发者省略类名。

但是有几种情况下省略不了类名:lateinit varnull。前者相当于Java的Object obj;,后者在Kotlin里不鼓励使用(所以这应该就是为啥Kotlin里很少出现NullPointer的原因吧😂)所以这种情况下,人家不鼓励这么做,强行这么写它就是复杂。(还有带参的Lazy单例类、线程安全的单例类…写法太复杂我也想吐槽)


#8

多谢解释。Kotlin这对象名要尽量写全的出发点是好的,但是似乎忽略了 代码的简洁性和可维护性,有些类可能需要3/4个单词来命名,如果都用全称,整个块代码都是长单词的对象,看着非常不清晰,维护起来也很费时。哎。


#9

请问一下为什么会出现整个代码块都是长单词对象的情况,Kotlin 有这个限制吗?


#10

我求你别来这里钻牛角尖,看着心烦,回复没有任何价值。


#11

不允许人发言的话,你发这个贴的意义是什么呢?请遵守论坛公约,理性专业地讨论问题,就事论事,不要针对个人,不要情绪化。


#12

楼上说的是尽量省略,你怎么看成尽量写全的:sweat:


#13

对于类型后置的写法风格的含义,我虽然在kotlin官方(中文)文档中没有看到具体的描述或解释,但是在以前我看Go文档的时候有见过他们解释Go语言的声明语法由来的:gos-declaration-syntax,这里面大部分原因与指针有关。

其次,我觉得类型后置没有什么不好,我个人来讲更喜欢这种语法,因为kotlin涉及到的空指针安全与可变性比java要细致很多,如果仍然按照java的那种风格反而会更加混乱,就像go做出的选择一样。

最后,变量名在前、类型在后的写法,或许也更符合英语母语人群的阅读方式,比如:“数字类型的a” 是 “A of numeric type”,实际上是名字在前类型在后的。(当然,我英语并不好说错了请轻喷)

关于null安全的问题,这是个挺繁杂的话题,是否应该存在null以及null在程序中如何设计才更合理都不好讨论,跳过了~

以上为个人见解,我觉得不能被习惯所束缚,首先带着接受的态度审视技术才是正确的做法


#14

@ForteScarlet 的回答是个好回答,但我感觉楼主发这个贴本身就不是为了讨论问题,而是为了抱怨,或者说抬杠。看看用词都是“智障”、“啰嗦”、“蹩脚”之类的,还口口声声让人闭嘴,完全就是自顾自的情绪输出, @ZeroGoYoosee 耐心解释了半天, 但是这个楼主好像什么也没 get 到,还在那里自说自话,这还有什么好讨论的呢


京ICP备16022265号-2 Kotlin China 2017 - 2018