尝试kotlin的起因

因为各种原因(版权,人员招聘),公司的技术体系从c#转到了java,我花了大概两周的时间来上手java,发现java的语法还是非常简单的,基本看着代码就知道什么意思.学习java的过程中,大部分时间都花费在了maven配置,理解spring的ioc上面.

学习的一段时间,我对java的感觉也正如前人的总结,稀烂的语法,完美的生态.spring在更高层面去约束你的代码设计,测试,事物,分布式,lucene,hadoop...jvm世界有太多的财富等着我去挖掘.但,我实在是不太喜欢java啰嗦,表达能力贫弱的语法.我决定试试jvm上的其他语言.

首先我并不考虑弱类型语言,后端开发不像前端,业务流程比较长,model复杂,强大的类型系统可以起到注释代码,控制复杂度的作用,所以我第一个目标是scala.然后我发现我就掉坑里了,scala毫无疑问是我学过的最复杂的语言了,光是看它的文档,就大概花了我一周时间,丰富的特性,强大的类型系统,fp范式.那段时间我无聊了会在hackerrank上刷刷oj,使用下来,确实感觉scala很强大,语法简练,集合操作方便.但后来我并没有在公司项目上使用它,因为我感觉这并不是一门适合用来做工程开发的语言,语法糖太丰富,不同的人写的代码风格会差异非常大,比如有的人写helper类,有的人喜欢用trait,还有的人想试试scala的多继承,再就是运算符重载,省略()的函数调用方式...

这里插一嘴,每次看见园子里抱怨c#药丸的,我都觉得挺无聊的.c#在国内互联网届江河日下,这是不争的事实,但我们又不拿巨硬的薪水,谁给钱多就给谁站队就是了.发现我好像还没进入正题啊.马上开始~~

话说有天逛知乎的时候,听到了kotlin发布release 1.0的消息,看看别人的评价还不错的样子,我也决定试试.
如何评价kotlin
这是我当时使用两天后的体验,到现在也几个月过去了,kotlin在公司的项目上基本也算稳定了,所以想把一些东西总结下.

对kotlin的第二印象

正如我上面那个帖子说的,kotlin是个很特殊的语言.在我使用的过程中,我感觉jetBrains团队的目标也很明确:让越来越多的人用kotlin,然后间接推广他家的idea,所以kotlin是一门非常讨好开发者的语言,它的设计风格并不明显,并没有什么花哨的特性,从头到尾的标签就是:简单,方便,实用.如果其他语言有什么特别好的设计,kotlin也无节操的直接拿过来的,而且还会将一些特性进行增强和限定.

比如大家非常喜欢的c#的扩展方法,kotlin也有,而且kotlin的扩展方法更灵活,不需要限定在静态类里面,像js扩充原型链一样方便.
又比如scala写lambda可以用_代替参数的声明,kotlin也有it关键字,scala的方法只有一个参数的时候,可以省掉(),kotlin也可以,但必须对这个方法进行显示的声明infix 避免滥用.

这篇文章并不介绍kotlin的语法,这点jetBrain也做得很好,有兴趣的人刷下这两个项目,基本就没啥问题了.
kotlin-koans : kotlin语法的练习题
Kotlin-examples :简单介绍kotlin的配置和与java的互操作

好水的一篇文章...
下篇谈谈我对编程语言的看法

java太low,又舍不得jvm平台的丰富资源?试试kotlin吧(一)的更多相关文章

  1. JVM 平台上的各种语言的开发指南

    JVM 平台上的各种语言的开发指南 为什么我们需要如此多的JVM语言? 在2013年你可以有50中JVM语言的选择来用于你的下一个项目.尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的 ...

  2. JAVA高级篇(二、JVM内存模型、内存管理之第二篇)

    本文转自https://zhuanlan.zhihu.com/p/25713880. JVM的基础概念 JVM的中文名称叫Java虚拟机,它是由软件技术模拟出计算机运行的一个虚拟的计算机. JVM也充 ...

  3. 如何把Java代码玩出花?JVM Sandbox入门教程与原理浅谈

    在日常业务代码开发中,我们经常接触到AOP,比如熟知的Spring AOP.我们用它来做业务切面,比如登录校验,日志记录,性能监控,全局过滤器等.但Spring AOP有一个局限性,并不是所有的类都托 ...

  4. 基于java平台的常用资源整理

    这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...

  5. 这里整理了基于java平台的常用资源

    这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...

  6. java虚拟机学习-深入理解JVM(1)

    1   Java技术与Java虚拟机 说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成: Java编程语言.Java类文件格式.Java虚拟机和Java应 ...

  7. Java 面试知识点解析(三)——JVM篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  8. Java向服务端转身 系统平台所对应的机器语言 虚拟CPU的机器语言字节码 bytecode

    小结: 1.虚拟CPU的模拟器:java虚拟机 JVM Java将虚拟机(VM)作为插件集成到浏览器中,将编译后的Java程序(Applet)在虚拟机上运行,这种技术 当初是为了增强浏览器的功能. J ...

  9. Java EE开发课外事务管理平台

    Java EE开发课外事务管理平台 演示地址:https://ganquanzhong.top/edu 说明文档 一.系统需求 目前课外兴趣培训学校众多,完善,但是针对课外兴趣培训学校教务和人事管理信 ...

随机推荐

  1. AngularJs之九(ending......)

    今天继续angularJs,但也是最后一篇关于它的了,基础部分差不多也就这些,后续有机会再写它的提升部分. 今天要写的也是一个基础的选择列表: 一:使用ng-options,数组进行循环. <d ...

  2. 【.net 深呼吸】启动一个进程并实时获取状态信息

    地球人和火星人都知道,Process类既可以获取正在运行的进程,也可以启动一个新的进程.在79.77%应用场合,我们只需要让目标进程顺利启动就完事了,至于它执行了啥,有没有出错,啥时候退出就不管了. ...

  3. 【原】AFNetworking源码阅读(五)

    [原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...

  4. mac下安装及配置tomcat

    mac下的软件不像windows下的程序那样写注册表,对于tomcat的安装来说,在mac下是名符其实的绿色软件,具体操作如下: 1.到 apache官方主页 下载完整 tar.gz文件包.(没有专门 ...

  5. AFNetworking报错"_UTTypeCopyPreferredTagWithClass", referenced from: _AFContentTypeForPathExtens

    问题: 在和Unity交互的过程中,从Unity开发工具打包出来的项目文件,在添加AFNetworking库,运行时报出以下错误: Undefined symbols for architecture ...

  6. 【干货分享】流程DEMO-制度发文和干部任免

    流程名: 制度发文和干部任免  业务描述: 当员工在该出勤的工作日出勤但漏打卡时,于一周内填写补打卡申请.  流程相关文件: 流程包.xml  流程说明: 直接导入流程包文件,即可使用本流程  表单: ...

  7. git和pycharm管理代码

    首先明白三个概念,服务器代码库,本地代码库,和正在coding的项目. coding完毕后,先通过commit提交到本地代码库,然后通过push再提交server的代码库    git步骤 git c ...

  8. git图像化界面GUI的使用

    GIT学习笔记 一.        基础内容 1.git是一个版本控制软件,与svn类似,特点是分布式管理,不需要中间总的服务器,可以增加很多分支. 2.windows下的git叫msysgit,下载 ...

  9. Java模拟Windows的Event

    场景 开发中遇到一个场景,业务操作会不定时的产生工作任务,这些工作任务需要放入到一个队列中,而另外会有一个线程一直检测这个队列,队列中有任务就从队列中取出并进行运算. 问题 业务场景倒是简单,只不过这 ...

  10. node应用线上部署时锁定包的依赖版本

    npm shrinkwrap 我们使用node开发时,经常需要依赖一些模块来完成功能需求,而我们所依赖的模块也必然会依赖其他模块,就这样一级一级的依赖,而且这些依赖模块并不为我们所控制.一个产品或项目 ...