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的兼容性并不如宣传说的那么好。

kotlin 学习感受的更多相关文章

  1. WEB学习感受

    web学习感受 1.html前端知识比较好学,各种标签只需要记住关键的就行例如:body h1,p,div,tr,td,ul,li,就行了. 2.css学习前期还好, 后期关键布局和样式知识点较多,而 ...

  2. Kotlin 学习笔记(一)

    (Kotlin 学习笔记的文档结构基本按照 Java 核心技术一书的目录排列) 基本程序设计结构 数据类型 数字 类型 宽度 Double 64 Float 32 Long 64 Int 32 Sho ...

  3. Kotlin学习笔记(9)- 数据类

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...

  4. Kotlin学习快速入门(7)——扩展的妙用

    原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...

  5. kotlin学习-初次见面

    第一次相识 最近看了很多介绍kotlin的文章.怀着好奇心改造了之前用java写的一个工具jar包.功能不是很复杂,类也只有几个,却足足写3个小时.期间一边看教程,一边写,有一种找回原来第一次写代码的 ...

  6. Kotlin学习第一课:从对比Java开始

    1. 介绍 今年初,甲骨文再次对谷歌所谓的安卓侵权使用Java提起诉讼,要求后者赔偿高达90亿美元.随后便传出谷歌因此计划将主力语言切换到苹果主导的Swift,不过这事后来没了跟进. 但谷歌在这两天的 ...

  7. kotlin学习笔记-异常好玩的list集合总结

    不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){ var StringVal = "12_12_13_15_a_b_c_d_yu_ ...

  8. kotlin学习(二)——类

    Kotlin中的类遵循一个简单的结构.尽管与Java有一点细微的差别.你可以使用try.kotlinlang.org在不需要一个真正的项目和不需要部署到机器的前提下来测试一些简单的代码范例. 1. 怎 ...

  9. kotlin学习三:初步认识kotlin(第二篇)

    上一章熟悉了kotlin基本的变量和函数声明,并明白了如何调用函数.本章再来看一些其他有用的东西 包括: 1. kotlin代码组织结构 2. when语法 3. 循环迭代语法 4. try表达式 1 ...

随机推荐

  1. 使用openssl生成RSA公钥和私钥对

    在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...

  2. hihocoder [Offer收割]编程练习赛14 可疑的记录

    题目3 : 可疑的记录 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi有一棵N个节点的树,编号1-N,其中1号节点是整棵树的根.他把这棵树的N-1条边记录成N-1 ...

  3. 如何查找元素对应事件的js代码

    以chrome的firebug为例 1.找到其dom元素,然后右键"break on"-->"subtree modification"等,设置后元素旁边 ...

  4. SignalR实现在线聊天室功能

    一.在线聊天室 1.新建解决方案 SignalROnlineChatDemo 2.新建MVC项目 SignalROnlineChatDemo.Web (无身份验证) 3.安装SignalR PM> ...

  5. angular -- ng-ui-route路由及其传递参数?page页面版

    前面有说过 ng-ui-route 使用 script 标签来做,但是很多时候,会通过引入模板页面的方式来实现: 具体代码: <!DOCTYPE html> <html lang=& ...

  6. 微信小程序 --- 页面跳转

    第一种:wx.navigateTo({}); 跳转: 注意:这种跳转回触发当前页面的 onHide 方法,将当前页面隐藏,然后显示跳转页面.所以可以返回,返回的时候触发 onShow方法进行显示: ( ...

  7. 强连通分量+缩点(poj2553)

    http://poj.org/problem?id=2553 The Bottom of a Graph Time Limit: 3000MS   Memory Limit: 65536K Total ...

  8. html 标准属性不要用 setAttribute 方法

    html 中有些属性,譬如 checked , autofocus 只要存在就会有效,即使值是 false ,譬如: <input autofocus=false id='test'> & ...

  9. MacBook Pro Retina 安装WIN7 - 对抗模糊及其它

    最近对虚拟机里的WIN7受够了,把整个虚拟机都删了,准备装双系统. 安装过程还是很简单的,网上教程一大堆,就是通过MAC OS X自带的BootCamp工具来管理整个安装过程,我是用外置光驱安装的,没 ...

  10. MVC学习之HtmlHelper

    1.为什么要使用HtmlHelper? 1.首先HtmlHelper是一个类型,MVC中的ViewPage<TModel>中的一个属性Html属性,这个属性的类型就是HtmlHelper& ...