V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
whitepoppy
V2EX  ›  Android

想问问现在用 kotlin 写 android 的多吗

  •  
  •   whitepoppy · 2018-09-26 14:22:05 +08:00 · 10093 次点击
    这是一个创建于 2010 天前的主题,其中的信息可能已经有所发展或是发生改变。

    class InTheVehicleFragment : FragmentCompat() { private val presenter = InTheVehiclePresenter(this)

    companion object {
        fun newInstance(): InTheVehicleFragment {
            return InTheVehicleFragment()
        }
    }
    
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_in_the_vehicle, container, false)
    }
    
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        presenter.setup()
        initView()
        initListener()
    }
    
    private fun initView() {
        //setInCarNum(25)
    }
    
    private fun initListener() {
        container_add_car_plate_num.setOnClickListener { presenter.gotoAddCarPlate() }
        container_car_open_order.setOnClickListener { presenter.gotoSerOrder("") }
    }
    
    fun httpError() {
        rcv_today_cars.visibility = View.GONE
        container_loading.visibility = View.GONE
        container_fail.visibility = View.VISIBLE
        container_fail.setOnClickListener({
            presenter.fetchHistoryCars()
        })
    }
    
    fun httpSuccess() {
        rcv_today_cars.visibility = View.VISIBLE
        container_fail.visibility = View.GONE
        container_loading.visibility = View.GONE
    }
    
    fun setTodayRv(mAdapter: InTheVehicleAdapter) {
        rcv_today_cars.setupVertical()
        rcv_today_cars.adapter = mAdapter
    }
    
    fun nodify() {
        rcv_today_cars.post {
            rcv_today_cars.adapter.notifyDataSetChanged()
        }
    }
    

    }

    写的我好难受啊

    91 条回复    2018-09-28 23:32:17 +08:00
    lwbjing
        1
    lwbjing  
       2018-09-26 14:30:49 +08:00
    他们都跟我说未来会多。。
    luopengfei14
        2
    luopengfei14  
       2018-09-26 14:38:24 +08:00 via iPhone
    楼主思想上被草多了,就习惯了
    firefffffffffly
        3
    firefffffffffly  
       2018-09-26 14:53:02 +08:00
    感觉写得还可以啊,习惯两天就真香了,不过我们屏蔽了不经过 findViewById 直接操作 view 的写法

    还有个代码精简点
    fun newInstance() = InTheVehicleFragment()
    loshine1992
        4
    loshine1992  
       2018-09-26 14:54:49 +08:00   ❤️ 1
    kotlin 还没 release 的时候就在用了,真香。
    hjw45611
        5
    hjw45611  
       2018-09-26 15:16:06 +08:00
    私人项目在用,公司项目不让用。
    M0
        6
    M0  
       2018-09-26 15:17:49 +08:00
    滚回 java 了。
    youxiachai
        7
    youxiachai  
       2018-09-26 15:20:45 +08:00
    ....你都用 kotlin 插件了..为啥...id 命还要按照下弧线那套..直接用驼峰啊...
    GoodRainChen
        8
    GoodRainChen  
       2018-09-26 16:34:48 +08:00   ❤️ 2
    之前公司用过一段时间,然后慢慢又用回 java 了...没有任何原因,就大家不约而同
    没发现有什么本质上的优势,写代码最花时间的还是思考,而不是打字
    closedevice
        9
    closedevice  
       2018-09-26 17:03:11 +08:00
    不推荐花时间在 Kotlin 上,本质没有变化.
    shawndut
        10
    shawndut  
       2018-09-26 17:13:53 +08:00
    还好吧,用起来可以缩减代码量,语法糖有些多
    66450146
        11
    66450146  
       2018-09-26 17:33:52 +08:00
    我们不写 Kotlin 已经招不到人了,孤狗肯定不愿意在 Java 上吊死
    Maiiiiii
        12
    Maiiiiii  
       2018-09-26 17:52:17 +08:00
    写多一点就适应了,感觉比 java 方便
    KNOX
        13
    KNOX  
       2018-09-26 18:23:49 +08:00 via iPhone
    @GoodRainChen 是不是你们用 java 的思维去写?我是觉得 kotlin 需要深入理解才能写好。
    whitepoppy
        14
    whitepoppy  
    OP
       2018-09-26 18:27:26 +08:00
    @loshine1992 老哥啊 我是真不想写 我来的时候那个 sb 就已经用 kotlin 了
    qiyuey
        15
    qiyuey  
       2018-09-26 18:29:41 +08:00 via Android
    服务端开发,全 Kotlin
    icris
        16
    icris  
       2018-09-26 18:29:52 +08:00
    @GoodRainChen #8
    那么用 Java 对思考有什么样的好处,使用 kotlin 对思考有什么样的坏处呢?
    如果没有,简单的算数,kotlin 还是快
    whitepoppy
        17
    whitepoppy  
    OP
       2018-09-26 18:31:29 +08:00
    @GoodRainChen 我同意 浪费时间 没以前写的顺手了 写起来太别扭了
    loshine1992
        18
    loshine1992  
       2018-09-26 18:33:42 +08:00   ❤️ 2
    @whitepoppy #14

    骂别人 sb 的时候想想自己为什么不拥抱变化,为什么不愿意学习。

    拿着工资还可以学东西是多好的事情啊

    而且会 Java 的人学 Kotlin 真的成本超低,2~3 天就可以上手,1 周看完一些特性就可以无缝使用了
    icris
        19
    icris  
       2018-09-26 18:35:32 +08:00
    推荐几行代码
    inline fun View.gone() { visibility = View.GONE }
    inline fun View.visible() { visibility = View.VISIBLE }
    inline fun View.invisible() { visibility = View.INVISIBLE }
    inline fun View.visibleOrGone(visible: Boolean) { if (visible) visible() else gone() }
    inline fun View.visibleOrInvisible(visible: Boolean) { if (visible) visible() else invisible() }

    就可以 rcv_today_cars.gone()
    这样再用回 Java 写 setVisibility 的时候就会难受了。
    whitepoppy
        20
    whitepoppy  
    OP
       2018-09-26 18:39:22 +08:00
    @loshine1992 这话你怎么不和金融行业的说呢 公司项目要的是稳定 自己另说 不写也可以 但他封装的东西 比起 java 还难写 还不让改
    loshine1992
        21
    loshine1992  
       2018-09-26 18:43:21 +08:00
    @whitepoppy #20

    不爽就写 Java 啊,又不是不能混编,能过 Code Review 就行。
    sampeng
        22
    sampeng  
       2018-09-26 18:45:49 +08:00   ❤️ 2
    kotlin 是唯一一个改善让我觉得 java 系还能一战的语言。

    每个特性都是为了节省时间和吸收其他现代化语言设计的。。每个特性都爱不释手。。。

    用 kotlin 和用 java 的思维去写代码不知道哪里冲突了。。。。。。

    ps:lz 写的还蛮好的啊。。。
    whitepoppy
        23
    whitepoppy  
    OP
       2018-09-26 18:47:35 +08:00
    @loshine1992 那倒是好了哦 关键不让啊 非要按他的要求写 天天还沾沾自喜 233
    storypanda
        24
    storypanda  
       2018-09-26 18:47:42 +08:00 via Android
    让我想起了我当时选择 Swift 和 OC 的抉择,但 Android 自学我选择 Java
    GoodRainChen
        25
    GoodRainChen  
       2018-09-26 18:49:08 +08:00   ❤️ 1
    @icris
    首先,我没打算否认 kotlin 的代码更加简洁,有他的先进性(当然,我个人用着其实也不算太舒服,先搁置这个问题)
    但是,这些便捷对于开发效率,正如我之前写的,提升没有想象中的显著。写过一段时间就会发现,kotlin 对于类型安全等方面的限制更加严格,把简化写法带来的优势抵消了不少。
    相反地,便捷的语法、简化的语法糖,势必带来代码阅读需要更多的思考,哪怕你觉得微不足道,但是积累起来也是影响效率的。毕竟你看代码思考要转个弯,没有 java 那么傻瓜(直白)。举个例子,B.setXXX(A) 简化成 B.XXX = A,代码上 set 改成了=,省不了两个字符,但是屏蔽了 setXXX 是个 method 的事实,也许别人就在这个 setXXX 里做了计算逻辑,你看代码的时候很容易不小心漏过去。这只是个例子,你可能有办法反驳我,但是我希望我的意思能传达到
    xd314697475
        26
    xd314697475  
       2018-09-26 18:53:52 +08:00
    官方没支持时就在用了,比 java 爽吧
    loshine1992
        27
    loshine1992  
       2018-09-26 18:55:49 +08:00
    @whitepoppy #23

    要么写,要么炒 boss 咯,你们两个三观不合无解的啦。

    PS:Kotlin 就是比 Java 好。
    whitepoppy
        28
    whitepoppy  
    OP
       2018-09-26 18:59:52 +08:00
    @loshine1992 什么 boss 都是搬砖的
    whitepoppy
        29
    whitepoppy  
    OP
       2018-09-26 19:00:33 +08:00
    @xd314697475 不爽 我感觉差别不大
    lucky2javascript
        30
    lucky2javascript  
       2018-09-26 19:32:00 +08:00
    现在用 flutter 写
    xiaoshenke
        31
    xiaoshenke  
       2018-09-26 19:51:55 +08:00 via Android
    不多 我就不用
    icris
        32
    icris  
       2018-09-26 19:59:41 +08:00
    @GoodRainChen #25
    从下往上说。
    首先 getter setter 也不是 kotlin 首创,你可以观察观察 C# 程序员对 Java 的 set 方法什么评价。同时,方法调用者不需要也不应该关心方法内部逻辑。如果看一个 x.a = 1 你不知道里面有没有计算逻辑,那么如何知道 x.setA(1); 里面有没有计算逻辑?如果一样不知道,这一项打平没毛病吧?
    那么便捷的语法对代码阅读需要的思考量会增多吗?我觉得会减少。对于语句 x.toJson() 和语句 objectMapper.writeValueAsString(x) ,哪一个能一眼看出在做什么?
    再往上,类型安全限制,就是非空呗?首先自己写的 kotlin 方法和属性能不能空完全自己控制,Java 代码没有明确注解的都是 String! 类型,做不做检查都不会报错,Java 代码标注 Nullable 的你写 Java 不也得写一块儿检查?如果区别是 kotlin 必须检查而 Java 可以不检查让它运行时空指针,那我是只看出来好处。

    但看起来楼主是来喷人的,在这讨论这些意义不大。
    GoodRainChen
        33
    GoodRainChen  
       2018-09-26 20:15:38 +08:00
    @icris
    “如果看一个 x.a = 1 你不知道里面有没有计算逻辑,那么如何知道 x.setA(1); 里面有没有计算逻辑”。
    x.setA(1)更接近本质,而 x.a = 1 是封装了一层的简化版本。实际工作中不关心他人代码的内部逻辑是很难的,场景很多:比如新人入职、新接手模块,又或者做 review,又或者定位问题,尤其是小团队或者小组负责人,每个人都必须对项目整体了如指掌。屏蔽越多本质上的细节,意味着越容易让人的思维被误导

    第二点其实就是说到了这个 kotlin 麻烦的地方,目前 Android SDK 就是用 java 写的,kotlin 自己玩,对于空值的保护确实不错。但是带上 Java 写的 AndroidSDK,就有了不少的麻烦,两种语言之间的类型转换让事情变麻烦了

    再说下去有点类似争 XX 语言天下第一了。我也觉得意义不大。

    所以我再总结一下我的观点,kotlin 不坏,但是似乎没有好到顶着招聘和学习成本去强制引入它,尤其是如果其他同事不喜欢 kotlin,那更是带来内部矛盾,得不偿失
    mmdsun
        34
    mmdsun  
       2018-09-26 20:18:58 +08:00 via Android
    没有本质变化。Java13 估计 var 携程 扩展函数 都会有了
    icris
        35
    icris  
       2018-09-26 20:44:13 +08:00
    @GoodRainChen #33
    第二点我觉得我已经说清楚了,我再试着解释解释。注解 Nullable 的,具体举例
    protected void onCreate(@Nullable Bundle savedInstanceState),
    它在 kotlin 里调用的时候提示是
    onCreate(savedInstanceState: Bundle?) ,
    注解了 NonNull 的
    public void onSupportActionModeStarted(@NonNull ActionMode mode),
    它在 kotlin 里调用的时候提示是
    onSupportActionModeFinished(mode: ActionMode),
    没注解的,具体举例
    public void setContentView(View view) ,
    它在 kotlin 里提示是
    setContentView(view: View!),
    无论哪一种,正常逻辑都跟 Java 里调用是一样的流程( Java 用的 if 逻辑 kotlin 也能用,kotlin 的 ? 逻辑 Java 不能用,这一条显然是 Java 更麻烦 ),非正常逻辑下区别是调用 onSupportActionModeFinished(null) 在 Java 里可以正常编译等运行时报空指针,Java 里的 onCreate 里面可以直接用 savedInstanceState 而不需要判断非空等第一次打开 Activity 报空指针。我觉得这个能力真是毫无用处。

    第一点,就按你的需求来,在 Java 中,如果你要看 setXXX 内部逻辑,你要看到一个 setXXX 就点进去看看;在 kotlin 中,同样的需求,你可以看到一个等号就点进去看看;如果 Java 里这个 setXXX 是 Lombok 生成的,甚至点进去看的时候都同样跳转到声明处。我没感觉出来区别。
    GoodRainChen
        36
    GoodRainChen  
       2018-09-26 20:53:36 +08:00
    @icris

    就以 setContentView(view: View!)为例
    假设这个 setContentView 是我写的,我明确知道 view 逻辑上根本不可能为 null,但是在这里被转换成了 View!类型,是不能和 View 通用的,我得加一步转换,否则每处用到这个 view 的地方都要加"?"来处理。

    而在原本的 java 里,我这里不需要任何额外操作
    icris
        37
    icris  
       2018-09-26 21:01:30 +08:00
    @GoodRainChen #36
    首先,你这个逻辑是错的。setContentView 是你写的,那是谁在调用 setContentView ?你自己调用你知道,团队成员调用你也知道?他们调用传个 null 进来,你是不是要崩?
    而此时如果你们用 kotlin,这个方法就可以是 setContentView(view: View) ,谁也不会传 null 进来。

    其次,这个方法不是你写的,它本来就可以给个 null,如果你重写方法并不处理 null,总有第三方库会让它出错。
    GoodRainChen
        38
    GoodRainChen  
       2018-09-26 21:07:33 +08:00
    @icris
    由外部保证参数的合法性,否则直接崩溃反而比较好。就像有些方法判断参数合法性,不合法直接扔一个参数不合法的异常出来,直接崩了。这是很常见的一种模式。
    那我再换个,不是入参,是返回值,比如 xxx.toString() 从 Java 拿过来 String!,明明可以确认这玩意儿不可能为空,还是要判空,不是给人添麻烦吗?
    icris
        39
    icris  
       2018-09-26 21:09:15 +08:00
    @GoodRainChen #36
    等等,你好像挖了个坑给我,标注 ! 的东西作为方法返回值类型时在 kotlin 里根本不需要判断非空也不需要加 ? 调用,作为参数重写的时候可以自己选择加不加可空,你说的不能和非空类型通用的是 savedInstanceState 这样的 Nullable 的 东西
    theworldsong
        40
    theworldsong  
       2018-09-26 21:13:08 +08:00
    公司项目使用。全线在用。
    icris
        41
    icris  
       2018-09-26 21:17:13 +08:00
    @GoodRainChen #38
    常见的模式是判断了再抛异常出去,直接报空指针可不常见(要说常见倒也常见,只是这种时候可算不上模式)。
    建议打开 IDE 写几行试试看,别靠猜。推荐测试方法 getMenuInflater(),kotlin 里的 menuInflater,类型 MenuInflater!,看看不加问号报不报警告。
    crist
        42
    crist  
       2018-09-26 21:20:29 +08:00
    哈哈哈哈哈哈哈哈哈
    icris
        43
    icris  
       2018-09-26 21:20:48 +08:00   ❤️ 1
    @GoodRainChen #38
    我也再复制一个正常的不接受空参数的方法的实现供参考
    @Override
    public ActionMode startSupportActionMode(@NonNull final ActionMode.Callback callback) {
    if (callback == null) {
    throw new IllegalArgumentException("ActionMode callback can not be null.");
    }
    ...
    }
    abeholder
        44
    abeholder  
       2018-09-26 21:31:49 +08:00
    kotlin 挺好的啊,上半年的时候有几天下午在公司划水,就看了下官网的语法,然后把以前写的猜单词的小程序用 kotlin 实现了下。
    感觉用起来比 java 真的要舒服很多诶。。
    但是之后一直没用过,现在基本上 kotlin 的语法已经忘的差不多了。。
    然后这个程序我也已经看不懂了。。。

    https://github.com/abedormancy/ToyPrograms/blob/master/src/game/kotlin/GuessWord.kt

    ,有没 kotlin 大佬帮忙看下各种语法是否使用得当。。。0 0.
    abeholder
        45
    abeholder  
       2018-09-26 21:33:22 +08:00
    @icris 大佬帮我瞅两眼 ,( ̄︶ ̄)↗
    kaedea
        46
    kaedea  
       2018-09-26 21:47:27 +08:00 via Android
    协程都出稳定版了,为啥还不用...
    cgpiao
        47
    cgpiao  
       2018-09-26 21:55:14 +08:00 via iPhone   ❤️ 1
    根本原因还是思维的懒惰,你用 kotlin 还在用死板的 java 思想,当然怎么写都不爽。何不培养 kotlin 的思想呢,我觉得现代语言肯定比旧的语言好的,因为没有陈旧的历史包袱,不用做那些痛苦的妥协。
    grantonzhuang
        48
    grantonzhuang  
       2018-09-26 22:15:31 +08:00 via Android
    kt 好用的地方除了空值判断这个,各种默认 final 也挺好的。主要不在于技巧和写法,而在于思想。
    grantonzhuang
        49
    grantonzhuang  
       2018-09-26 22:16:11 +08:00 via Android
    如果只是简单的把 Java 的逻辑翻译成 kt,那确实没啥必要去换
    icris
        50
    icris  
       2018-09-26 22:34:03 +08:00   ❤️ 1
    @abeholder #44
    放到 IDEA 里,很多语法优化建议都会给出弱警告,比如一些变量提示可以私有的,比如 it.trim().length > 0 会提示 Replace size check with 'isNotEmpty' ,按提示会修改成 it.trim().isNotEmpty()。
    还有一些无关紧要的不会提示的地方,比如 it.trim().isNotEmpty() 还可以改成 it.isNotBlank() , .filter { it == answer[0] }.length 可以改成 .count { it == answer[0] },这些方法都是只要看见有这个方法就知道怎么用的,我觉得没必要特别记忆,写个点想要什么就打什么,有方法就用,没方法的经常用的话也可以造个方法用,写得跟写英语一样就行了。
    abeholder
        51
    abeholder  
       2018-09-26 22:52:25 +08:00
    @icris 谢谢大佬,给大佬捶背。╭(′_`)╭(′▽`)╯
    bumz
        52
    bumz  
       2018-09-26 23:38:43 +08:00
    Kotlin 是 IDE 公司设计的,Java 是程序语言领域的大师级人物设计的,于是你发现所有那些擅长 marketing 的叫嚣着替代 Java 的语言,其实最终都不如 Java
    whitepoppy
        53
    whitepoppy  
    OP
       2018-09-26 23:57:08 +08:00
    @icris 思维方式不是怎么好改的啊 有方便的地方也有不好的地方 还是觉得那个顺手就用那个
    icris
        54
    icris  
       2018-09-27 00:04:40 +08:00
    @bumz #52
    这个于是起什么作用?为什么不如,哪不如?大师级人物干什么都是大师级,大师级人物的 NetBeans 怎么没人用呢?
    huclengyue
        55
    huclengyue  
       2018-09-27 00:06:34 +08:00 via Android
    kotlin 加 anko 真香
    bumz
        56
    bumz  
       2018-09-27 01:20:32 +08:00
    @icris #54 阅读偏正短语的时候要注意定语。

    「程序语言领域的大师级人物」、「 IDE 公司」都是偏正短语。

    「于是」后面的是按照现有的信息对未来的期望,这点从「最终」一词的使用就可以看出了。

    既然是期望,「哪里」、「为什么」就是次要的问题。这就好比「百度出品」和「 Google 出品」的差别一样。
    icris
        57
    icris  
       2018-09-27 09:02:54 +08:00
    @bumz #56
    那原因不问,展望一下擅长 marketing 的叫嚣着替代 Java 的 C# 未来将会如何吧,毕竟是微软做的。
    dagger2
        58
    dagger2  
       2018-09-27 09:13:22 +08:00
    我用 kotlin 就一个原因,kotlin 写出来的代码更漂亮,能让我开心。。。
    fan123199
        59
    fan123199  
       2018-09-27 09:17:46 +08:00
    Kotlin 太好用了, 就用 function extension 和 入表达式,就够了。写起来飞快,简直是封装中的封装。然后一些 list,map 等的操作语法糖,让人爱不释手。

    但是, 在我用了一段时间后还是发现一些问题。1,团队合作的问题。太简化,就需要理解。这个要看风格大家能不能互相接受。如果风格一致,那么大家都开心。2 , 搜索定位。 比如以前搜 setText,我可以知道哪里进行了文字设置。但现在不行了,全是等号。

    Android 上很多调用时频繁且繁琐的,能简化一点代码就简化一些。每次写 java 版的 dialog 就感觉在浪费生命。

    最后。Kotlin 大法好。
    ayayui
        60
    ayayui  
       2018-09-27 09:22:57 +08:00
    能用 Kotlin 的时候我都不想用 Java
    davy1995
        61
    davy1995  
       2018-09-27 09:29:13 +08:00 via Android
    这个时候还有吐槽没 get 到 kotlin 的好处的吧,就好比吃水果吃了水果皮没吃到果肉吧
    wupher
        62
    wupher  
       2018-09-27 09:31:03 +08:00
    服务端自己负责的一个项目,目前是全 kotlin。
    Android 只有私人项目了。

    写习惯 kotlin 和 Groovy 后,我自己是非常讨厌写 Java 了。不过,kotlin 对型别有时要求过于严格,有时也挺麻烦的。
    notreami
        63
    notreami  
       2018-09-27 09:32:49 +08:00
    你们用吧,反正最后还是需要深入了解 java
    chocotan
        64
    chocotan  
       2018-09-27 09:37:22 +08:00
    多不多,看别人的统计结果吧
    https://www.oschina.net/news/97762/the-state-of-kotlin-2018
    -----
    前两天看到我们公司一个安卓项目已经在用 kotlin 写了
    closedevice
        65
    closedevice  
       2018-09-27 09:40:52 +08:00
    以为大家都在谈语言的本质,而非语法,但看下来全程是谈语法的...
    icris
        66
    icris  
       2018-09-27 09:44:26 +08:00
    @closedevice #65
    本质还是 JVM 语言,编译出来 .class 再反编译回去还是 Java,不谈语法有什么好谈的
    icop
        67
    icop  
       2018-09-27 09:52:07 +08:00
    最主要的是看公司整体用什么。
    thinkloki
        68
    thinkloki  
       2018-09-27 10:42:42 +08:00
    @qiyuey 老哥 kotlin 写服务端有什么教程吗?
    closedevice
        69
    closedevice  
       2018-09-27 10:44:19 +08:00
    @icris 这一个本质背后蕴藏的体系非常庞大,只谈语法却是小了格局.
    zhangwugui
        70
    zhangwugui  
       2018-09-27 10:48:32 +08:00
    感觉是思维的一个转换。
    xuhaoyangx
        71
    xuhaoyangx  
       2018-09-27 10:50:40 +08:00
    本质来说 kotlin 其实还是一对语法糖,但是真香
    GoodRainChen
        72
    GoodRainChen  
       2018-09-27 10:52:26 +08:00
    @icris
    主逻辑上的东西没必要判空,就比如 setContentView,判个空有意义吗?实际写代码都很赶时间的,这种阻塞核心流程的地方,还判空写 @NonNull,不是浪费时间吗?就算判了 null 也是个白屏死在那里,很多用户都没有杀应用这个概念,他只会觉得你有一个不可恢复 BUG
    bumz
        73
    bumz  
       2018-09-27 11:00:28 +08:00
    @icris #57 可惜了,IDE 公司里没一个像 James Gosling 这样的程序语言设计专家,从 C# 的设计看微软里面也没有

    于是呢?今天 C# 几乎就是外包公司用
    icris
        74
    icris  
       2018-09-27 11:04:50 +08:00
    @GoodRainChen #72
    你还在说 setContentView,这个方法根本没有标 NonNull,打开 IDE 看看这种 View! 的东西怎么处理的吧,别老给我挖坑了。
    我反正已经复制了一个 Google 写的判断参数是 null 就抛异常的 startSupportActionMode 方法出来,你可以认为这完全是浪费时间,就算不写也是一个 NullPointerException,我只能说这是正常逻辑该有的操作。

    还有,不是「没发现有什么本质上的优势,写代码最花时间的还是思考,而不是打字」吗,怎么连个 if (x == null) 都没时间写了?既然确实要这点儿时间,那 kotlin 优势不就又出来了?
    icris
        75
    icris  
       2018-09-27 11:12:50 +08:00
    @bumz #73
    第一,外包公司也用 Java (同时外包公司不用 kotlin )。
    第二,你前一句说要展望未来来着,看今天市占有什么用,.net 开源才刚开始。
    第三,我试着理解一下你的逻辑:为什么 Java 好,因为它是「程序语言设计专家」开发的,为什么「程序语言设计专家」是「程序语言设计专家」,因为他开发了 Java ;为什么说微软没有「程序语言设计专家」,因为 C# 不好,为什么 C# 不好,因为它不是「程序语言设计专家」开发的。是这样吗?
    GoodRainChen
        76
    GoodRainChen  
       2018-09-27 11:19:19 +08:00
    @icris
    唉,我打个比方,你非得揪着这个真实的方法不放,难道要我顶着安全红线把公司业务代码拿出来讨论吗?

    我们纠结这个问题的原点是: [kotlin 对于类型安全等方面的限制更加严格,把简化写法带来的优势抵消了不少]
    你说你代码简洁,省点时间,结果全在别的地方把省的时间又找回来了,这没多大优势啊
    iFlicker
        77
    iFlicker  
       2018-09-27 11:21:49 +08:00
    @bumz unity3d。。。。
    auhah
        78
    auhah  
       2018-09-27 11:22:06 +08:00
    挺香的。。。写起来蛮爽

    视野之内全是干货的感觉,冗余代码少了很多
    icris
        79
    icris  
       2018-09-27 11:23:39 +08:00   ❤️ 1
    @GoodRainChen #76
    我再说一遍,你说的关于 kotlin 的 ! ? 限制,全是错的。我已经说了实际上 kotlin 是怎么处理 Java 方法定义的,你不愿意听不愿意看不愿意试,也行,至少结论应该是「 kotlin 对于类型安全等方面的限制更加严格,可以节省更多写 if (x == null) 的时间」。
    zzzmode
        80
    zzzmode  
       2018-09-27 11:31:42 +08:00
    用 kotlin 可以少写很多代码
    xayoung
        81
    xayoung  
       2018-09-27 11:32:24 +08:00
    iOS 来问下,kotlin 会有 swift 那样重新学几遍的困境么? (几个项目经历了 2.1->2.2->3.0->4.1->4.2,打开 Xcode 面对成千上万个错误就想死)
    GoodRainChen
        82
    GoodRainChen  
       2018-09-27 11:34:33 +08:00
    @icris
    还是你自己去试试吧,或者是因为后面插件又跟新了?
    反正我这里直接 onCreate 里面直接用 savedInstanceState.getString("")
    是会提示错误的:Only safe(?.)or non-null .....
    bumz
        83
    bumz  
       2018-09-27 11:40:24 +08:00
    @icris #75

    1. 凶手也用菜刀,但是菜刀不止凶手用,大厨也用。暗器只有凶手用。
    2. C# 已经快二十年了,在今天二十年的时间意味着什么已经不用多说了。
    3. 专家设计的语言不见得好,好的语言也不见得是专家设计的。但是绝大多数专家设计的语言比绝大多数业余人士设计的语言好,绝大多数优秀的语言是专家设计的。前者是二者的因果关系,后者是相关性,请勿混为一谈。
    icris
        84
    icris  
       2018-09-27 11:42:27 +08:00
    @GoodRainChen #82
    savedInstanceState: Bundle?
    view: View!
    挑一个说到底,别跳着来。推荐测试语句 menuInflater.inflate(0, null),menuInflater 是 MenuInflater!
    那么这样一个 Bundle? 的对象,我前几楼也说了,我复制一下:
    「 Java 里的 onCreate 里面可以直接用 savedInstanceState 而不需要判断非空等第一次打开 Activity 报空指针。我觉得这个能力真是毫无用处。」
    在 kotlin 里不能方便地报空指针对工作有什么不好的影响吗?
    icris
        85
    icris  
       2018-09-27 11:45:15 +08:00
    @bumz #83
    那么我要提一个问题了,为什么 Java 比 C# 好?
    bumz
        86
    bumz  
       2018-09-27 11:58:52 +08:00
    @icris #85 这就是另一个帖子了

    简单来说 C# is sort of Java with reliability, productivity and security deleted.

    例如 C# 没有 Checked exception (一个很多人恨的特性,但其实他们只是恨写出可靠的程序罢了)

    再比如 C# 混乱的 IDisposable
    icris
        87
    icris  
       2018-09-27 12:06:33 +08:00
    @bumz #86
    我实际上还可以继续提问,为什么 C# 没有 reliability 而 Java 有 reliability,为什么 C# 没有 productivity 而 Java 有 productivity,为什么 C# 没有 security 而 Java 有 security,但是算了,if you say so.
    zt1991616
        88
    zt1991616  
       2018-09-27 12:15:27 +08:00   ❤️ 1
    Android 圈也和前端圈一样了?有啥好吵的,爱用用,不爱用别用,又没人强迫你
    TheWalkingDead
        89
    TheWalkingDead  
       2018-09-27 13:54:16 +08:00
    用什么语言总体还是看公司需要,看 leader 安排,不过用小众语言的人总是自带优越感
    Tyanboot
        90
    Tyanboot  
       2018-09-28 01:40:57 +08:00 via Android
    @xayoung 不会。只有实验性的功能才可能会被改掉,比如协程的支持。其他的用了这么久了还没有过破坏性改动。
    icris
        91
    icris  
       2018-09-28 23:32:17 +08:00
    @TheWalkingDead #89
    事实表明 Java 程序员才有优越感,上面不用 kotlin 的很多表示看不起 kotlin (「你们用吧,反正最后还是需要深入了解 java 」(试图表达一个 kotlin 程序员都不懂 Java 的意思)、「 Kotlin 是 IDE 公司设计的」( Java 大于一切,语法吊打 C#)、楼主所有发言)。
    或者你是要表达 Java 在 Android 开发上算小众?毕竟现在 Google 的文档示例代码都把 kotlin 放前面,你这么说也没问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1587 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 16:57 · PVG 00:57 · LAX 09:57 · JFK 12:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.