聊聊Scala

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

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

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里变量的初始化必须要指明类型:

String msg = "Hello, World!"

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

val msg = "Hello, World!"

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

for(i=0;i<args.size();i++ ){
   System.out.println(args.get(i))
}

Scala可能就一行代码。

args.foreach(println)

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

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

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

原文发布于微信公众号 - 鸿的学习笔记(shujuxuexizhilu)

原文发表时间:2018-11-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C语言及其他语言

初学C语言的学习计划

背景:很多同学在学习C语言的过程中,常常会遇到这样的问题,即“教材看完了,知识点也懂,但写不出来程序”,这段时间,我们通过长期与有多年C语言研究经验的教授、教师...

37540
来自专栏大数据钻研

JavaScript 世界万物诞生记

一. 无中生有 起初,什么都没有。 造物主说:没有东西本身也是一种东西啊,于是就有了null: ? 现在我们要造点儿东西出来。但是没有原料怎么办? 有一个声音说...

35280
来自专栏数据结构与算法

P1372 又是毕业季I

题目背景 “叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻。毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌。1000多个日夜的欢笑...

32940
来自专栏Python小屋

Python实现大自然数分解为最多4个平方数之和(1)

问题描述:任意大自然数,总是能分解为最多4个平方数的和,所谓平方数是指它是一个自然数的平方。例如:72884 = 4^2 + 138^2 + 232^2,337...

28640
来自专栏编程

知道这几点你就学会了Python!

由于Python目前在各个领域都比较火,尤其是人工智能和量化金融方面的应用,更让人趋之若鹜,还不会Python的你是不是落伍了呢。下面就是我的不装逼教你学Pyt...

23850
来自专栏专知

关关的刷题日记10——Leetcode 1. Two Sum 方法1

关小刷刷题10 – Leetcode 1. Two Sum 方法1 题目 Given an array of integers, return indices ...

31590
来自专栏C语言及其他语言

【每日一题】1443 [蓝桥杯][历届试题]数字游戏

每日一题,一年365天,想不成为大神都难! 题目描述 栋栋正在和同学们玩一个数字游戏。 游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈。栋栋首先说出数...

30850
来自专栏desperate633

LintCode 买卖股票的最佳时机 II题目分析代码

假设有一个数组,它的第i个元素是一个给定的股票在第i天的价格。设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交...

6710
来自专栏Web行业观察

盘点那些奇形怪状的编程语言

有的语言是多面手,在很多不同的领域都能派上用场。这类编程语言叫 general-purpose language,简称 GPL。大家学过的编程语言很多都属于这一...

31520
来自专栏数据结构与算法

2924 数独挑战

2924 数独挑战  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果 题目描述 Descripti...

29930

扫码关注云+社区

领取腾讯云代金券