zoukankan      html  css  js  c++  java
  • kotlin 学习感受

    kotlin 学习感受

    直白的说。。很不好,像屎一样,本来对此抱有很大的期望和好感度,但经过一整天的学习,完全失望了,这门语言中间有各种的奇怪的语法和反直觉性的东西

    特点

    优点

    在jvm的基础上特别在安全性做了很大的改进。。很多的特性基本杜绝了一些不安全的编码,并且做了类似 RASP 的安全方案。
    官方也宣传说对Java 100%兼容.

    先说优点吧,免得说我在胡乱喷shit
    控制流语句变得很灵活支持默认返回,和label 控制等特性
    比如when和if 变得极其灵活而且方便好用例如

    
    var par = when(i){
    	i is null -> false
    	i is String -> {
    		do some ....
    		null #last will auto return to var par
    	}
    	i in 1..100 -> {
    		do some ...
    		i * 2
    	}else{
    		null
    	}
    	
    }
    

    加入了 extension 的特性
    例如Java的 Array 并没有 swap的方法可以通过extension的特性灵活加入

    fun Array<Int>.swap(first:Int,last:Int){
    	var f_i = this[first]
    	this[first] = this[last]
    	this[last] = f_i
    }
    
    // this will get [0,1,2,3,4]
    var s = Array<Int>(5,{i-> i})
    s.swap(2,4) /// will swap  
    
    
    

    屎一样的缺点

    我试着写了一个JSwing 呵呵。但是失败了。官方加了一个 kotlin-swing。。 呵呵

    繁杂的语法糖

    fun <T> cloneWhenGreater(list: List<T>, threshold: T): List<T>
        where T : Comparable,
              T : Cloneable {
      return list.filter { it > threshold }.map { it.clone() }
    }
    

    比如原来的 @Override 变成需要特别申明原来的类为open class,这导致了一个很重大的问题。。目前写的类以后到底要不要用呢?假如没有写open的话。。那么其他人如果想要重写某个方法,就没有办法

    及其臃肿的结构
    真的不是我想黑他。
    在为了安全性的考虑上,它在普通class 的基础上加了 一个 open的结构
    所有想要继承的类必须加上open ,这导致我不知道怎么继承原始的类比如 Int
    还有诸如data ,object ,interface, abstract 这样单独的东西。和原来Java 简介明了的class 和 interface 有着很大差别。。如果不是认真记忆,很容易把这些混杂

    为了增加所谓好的特性加入了非常多的语法
    比如generics,为了防止溢出或者 UnMatchClass 这样的错误,特别又(ps:TMD到底还有多少语法)加了 T in out等语法

     fun get(index: Int): T { /* ... */ }
     ...
     fun copy(from: Array<out Any>, to: Array<Any>) {
     // ...
    }
    

    同时混入了类似 Object-c中的delegation的东西。。。。。

    总结

    整体没有设计哲学,就像一个胡乱的七巧板一样有各种形状的单个模块(我个人偏向类似Lisp的语系),为了加入好的特性而像拼凑积木一样加入各种语法,大大加大了学习的成本和编写的成本。最后在使用的时候往往出现各种问题;和Java的兼容性并不如宣传说的那么好。

  • 相关阅读:
    有没有开源软件可以批量安装操作系统
    MarkMan – 马克鳗,让设计更有爱!
    Tomboy : Simple note taking
    wikipad这个软件可以深入研究是基于pywebkit linux uubntu 下有分发包
    guard/guardlivereload
    Frequently Asked Questions — Scrapy 0.15.1 documentation
    Tornado Web服务器
    稀疏矩阵的存储格式 之 CSR/CSC
    Zen Coding — a new way of writing HTML and CSS code
    felinx / labs / source — Bitbucket
  • 原文地址:https://www.cnblogs.com/Qingluan/p/5196845.html
Copyright © 2011-2022 走看看