前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊Scala

聊聊Scala

作者头像
哒呵呵
发布2018-12-12 11:06:13
1.1K0
发布2018-12-12 11:06:13
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

Scala确是一门神奇的语言,从语言特性上来说远比Java、Python更加学院派,Martin大大作为一名教授,使得每个Scala新的特性大多会有一篇博士论文作为支持,不像Python,只有一个PEP提案。看来语言的发明者是教授确实好处很多,但是带来的坏处也不言而喻,曲高而和寡,叫好而不叫座。例如扎根Scala里的函数式编程思想,使用val表示不变量还好理解,高阶函数和惰性求值也还好,稍微思考下也能勉强理解能用了,monoid是什么鬼?可应用和可遍历的函子又是啥?相信读者大部分也一脸迷糊了。这就是Scala,用Scala写Java的程序也还好,毕竟Scala兼容Java,允许程序员龟缩在自己的一亩三分地,抱怨着“学不动了”,更甚者,作为一个允许在Jvm上的,静态类型的编译语言,Scala也能让你写出Python的感觉。

不行?你可以试着在文本编辑器写上:

代码语言:javascript
复制
println("Hello, Scala!")

保存为hello.scala,再运行Scala hello.scala,屏幕上出现了Hello, Scala! 吃惊吗?(当然这个得益于Scala强大的类型推导机制和解释器)。

所以说Scala是一门有趣的语言,无论是动态语言还是静态语言,总能找的到你熟悉的角落。

倘若Spark和Kafka不火起来的话,Scala可能也就会和Matlab一样,流行于学术界。但生活是一件很奇妙的事,Spark从伯克利成长起来,这也多亏于MapReduce,Hadoop开创了大数据时代,但是MapReduce作为Hadoop的发家手段被Spark逐渐取代了。在Spark的代码里,充斥着Scala的设计思想,RDD是不变的,于是自然而然引入了map、reduce、fliter等高阶函数,甚至在SparkSQL里,SQL的parser也是使用了Scala的模式匹配,简洁而优雅。Spark源码

于是Scala随着Spark和Kafka的成长,慢慢地也走进了工业界的视野。虽然Spark提供了良好的Python和Java接口,Kafka本身也拥有着自己的二进制协议,开发者不可能只使用接口吧,遇到什么大问题,总得捏着鼻子阅读Spark和Kafka的源码?就这样,Scala伴随着大数据的浪潮也有了人使用和关注。

一旦开始使用Scala,Java的开发者应该会有种很不适用的感觉,例如在Java里变量的初始化必须要指明类型:

代码语言:javascript
复制
String msg = "Hello, World!"

但是Scala觉得这个没啥必要,编译器可以做的事,何必需要开发者呢?开发者唯一需要关注的只是这个变量是可变的还是不变的。

代码语言:javascript
复制
val msg = "Hello, World!"

在Java里,for循环可能要写一大堆,args是一个列表:

代码语言:javascript
复制
for(i=0;i<args.size();i++ ){
   System.out.println(args.get(i))
}

Scala可能就一行代码。

代码语言:javascript
复制
args.foreach(println)

在一定程度上,写过了Scala的代码,再转回Java(即使是Python)大多会有种深深的不适应感,到后来逐渐地被Scala带偏,原来编程语言还可以这么写,Java(Python)设计的这里不好,那里不好。

总的来说,Scala是一门优秀的语言(不代表适合工业界),里面充斥着学术界对编程语言未来的思考,值得花费精力去学习,不仅仅是学习Scala的语法,也要学习隐藏在Scala背后的观念,学习Scala是如何思考编程这门手艺的。

--以此作为《Scala学习》系列的开篇

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档