尝试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. CoreCLR源码探索(一) Object是什么

    .Net程序员们每天都在和Object在打交道 如果你问一个.Net程序员什么是Object,他可能会信誓旦旦的告诉你"Object还不简单吗,就是所有类型的基类" 这个答案是对的 ...

  2. 微信小程序开发心得

    微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...

  3. lua 学习笔记(1)

    一.lua函数赋值与函数调用         在lua中函数名也是作为一种变量出现的,即函数和所有其他值一样都是匿名的,当要使用某个函数时,需要将该函数赋值给一个变量,这样在函数块的其他地方就可以通过 ...

  4. form表单验证-Javascript

    Form表单验证: js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等.完整代码如下: <!DOCTYPE html PUBLIC &qu ...

  5. 【转】 FineBI:自助式BI工具打造业务分析的“快与准”

    如今的企业经营方式,业务对于数据分析有极大的需求,但却苦于没有数据以及工具的有效支持,业务分析仍就依赖于IT报表制作.而IT方不断地按业务需求去调研.确认业务逻辑,然后取数做报表,其中还要忍受业务的需 ...

  6. 用Java代码实现拦截区域网数据包

    起因: 吃饭的时间在想如果区域网内都是通过路由器上网,那如何实现拦截整个区域网的数据包,从而实现某种窥探欲. 思路:      正常是通过电脑网卡预先设置或分配的IP+网关对路由器进行通讯,比如访问百 ...

  7. Android之Dedug--Circular dependencies cannot exist in AnimatorSet

    今日,在学习AnimatorSet时,使用play.with.after.before时,代码书写如下: ObjectAnimator animator1 = ObjectAnimator.ofFlo ...

  8. ucos实时操作系统学习笔记——操作系统在STM32的移植

    使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...

  9. ASP.NET MVC Model元数据(四)

    ASP.NET MVC Model元数据(四) 前言 前面的篇幅讲解了Model元数据生成的过程,并没有对Model元数据生成过程的内部和Model元数据结构的详细解释.看完本篇后将会对Model元数 ...

  10. dhcp协议交互报文

    DHCP共有八种报文,分别为DHCP Discover.DHCP Offer.DHCP Request.DHCP ACK.DHCP NAK.DHCP Release.DHCP Decline.DHCP ...