初学Scala有感

1、Scala语言的地位

       Scala是JVM系的语言(Clojure、Groovy、Scala、JRuby等属于这一类),这类语言的特点是将语言编译成为Java Bytecode后由JVM解释执行,这样做的原因是:

        . 对于Java程序员来说,转换比较容易,以前学到的知识实际上都可以利用起来(因为这类语言调用Java库实际上是没有障碍的);

        .对于那些对Java的语法不满的程序员来说,可以充分发挥(比如函数式语言的特性:尽管Java8已经增加了对函数式语言的部分支持,但是个人觉得和Scala、Groovy等还有一定的差距);

        .新建一门语言的成本比较低:我个人觉得这应该是未来的语言发展的趋势,比如苹果的Object-C、Swift已经向LLVM靠拢了,即这些新的语言只负责将代码翻译成某种中间代码(JVM的ByteCode或者LLVM的IR),剩下的事情由xxxVM去完成;

        .JIT(即时编译)的广泛应用,使得构造程序的执行环境变得复杂起来,既然后面的工作如此复杂,最好是交给别人去做,自己只要做好前端(程序代码-->中间代码转换)。

 

2、我为什么要学Scala

        最近接触的两个第三方库都是Scala写的:一个是Spark(分布式计算框架),另外一个是Kafka(消息通讯中间件),本着实用开源库必须读其代码的原则,就要学习下Scala了。

 

3、个人感受:

       几天学习下来总体感觉还是不错的,先说下好的地方吧:

      。语法较为松散:比如语句结束的分号大多数情况下是不需要的;Catch Exception也不是必须的;

      。拥有了一些类似于脚本语言+C++特性

              . 没有三元运算符(xxx?xxx:xxx),因为if xxx else 是一个表达式,可以用在语句中;

       。集合的操作非常赏心悦目:比如取数组、List等的元素都可以使用myVar(i),集合的Filter/Map等函数式语言的操作也支持的很好;

       。集合和Java中的集合并不是兼容的,但是Java中的集合也可以使用诸如Filter等操作,内部采用了隐式类型转换机制;

       。一切都是对象(实际上Java并不是纯粹的面向对象的语言,比如int类型就不是对象),1+2实际上也是对象的调用,+,++,+=等操作是可以定义的,有点像C++语言的操作符重载,这个功能算是一把双刃剑吧,好的地方是灵活方便,不好的地方是用的多了可读性比较差,容易引起混乱;

       。N多的占位符,为了简化写法引用的,比如一个Lamda表达式本来的形式是(x:String) => x.toUpperCase() 实际上可以写成 (_:String).toUpperCase,写起来还是很酷的;

       。类型推断的大量使用:我记得Java是JDK7以后,语法上逐步增加了类型推断的功能,比如List<String> x = new ArrayList<>(); 后面就不用写类型了,在Scala里面很多时候都是不需要写类型的,比如var x = new ArrayList<String>(); 编译器实际上就认为x也是ArrayList类型,还是挺方便的;

       。Lamda表达式支持的很好,个人觉得比Java8要好,功能比较多,特别是占位符的引入,非常之方便;

       。设计模式的天然支持:比如声明一个Object X {} 情况下,X就是Singleton了,其他的模式不一一列举了,这篇文章整理的比较经典: http://pavelfatin.com/design-patterns-in-scala/

       。ValueObject支持的很好,比如不可变的集合类等等,个人程序员应该越累越注意这个特性,因为不可变对象与可变对象相比,在程序优化、并发控制方面有很大的差别,函数式语言里面实际上所有的对象都是不可变的;

       。对Actor模型的支持,这块没有仔细研究,但是值得研究。

 

       我写了一个从各个服务的配置文件里面抽取满足MySQL数据库连接URL格式的字符串,再按照一定的格式打印出来,输出每个服务使用了哪些数据库,每个数据库被哪几个服务访问,只写了100行左右的代码,还是很简洁的(个人对Scala语言掌握不熟练的情况下)。

 

       再说说不好的地方:

       。Eclipse-IDE对Debug支持的比较差,Debug的时候不方便(在开始写Scala的时候由于不熟,很多时候依赖Debug,这点体会很明显),比如鼠标查看变量的值、Watch等功能是不支持的,只能在一个Debug的View里面列表看看;

       。生成的Class自己码要比Java代码长,这块还没有仔细研究,不过经常反编译Scala生成的Class文件对理解Scala还是很有帮助的。

       。语法和Java区别还是挺大的,对于Java程序员来说,还是有一定的障碍,并不是像官网说的那样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值