Scala笔记(1)——基本知识

Scala与Java的关系

  • 1、都是基于JVM虚拟机运行的

    Scala编译之后的文件也是.class,都要转换为字节码,然后运行在JVM虚拟机之上。

  • 2、Scala和Java相互调用

    在Scala中可以直接调用Java的代码,同时在Java中也可以直接调用Scala的代码

  • 3、Java8 VS Scala

    1)Java8(lambda)没有出来之前,Java只是面向对象的一门语言,但是Java8出来以后,Java就是一个面向对象和面向函数的混合语言了。

    2)首先我们要对Scala进行精确定位,从某种程度上讲,Scala并不是一个纯粹的面向函数的编程语言,有人认为Scala是一个带有闭包的静态面向对象语言),更准确地说,Scala是面向函数与面向对象的混合。

    3)Scala设计的初衷是面向函数FP,而Java起家是面向对象OO,现在两者都是OO和FP的混合语言,是否可以这么认为:Scala= FP + OO,而Java =OO + FP?

    由于面向对象OO和面向函数FP两种范式是类似横坐标和纵坐标的两者不同坐标方向的思考方式,类似数据库和对象之间的不匹配阻抗关系,两者如果结合得不好恐怕就不会产生1+1>2的效果。

    面向对象是最接近人类思维的方式,而面向函数是最接近计算机的思维方式。如果你想让计算机为人的业务建模服务,那么以OO为主;如果你希望让计算机能自己通过算法从大数据中自动建模,那么以FP为主。所以,Java可能还会在企业工程类软件中占主要市场,而Scala则会在科学计算大数据分析等领域抢占Java市场,比如Scala的Spark大有替代Java的Hadoop之趋势

Scala Lazy特性

1、当val被声明为lazy时,它的初始化将被推迟,直到我们首次对它取值。例如,

lazy val lines= scala.io.Source.fromFile("D:/test/scala/wordcount.txt").mkString

2、如果程序从不访问lines ,那么文件也不会被打开。但故意拼错文件名。在初始化语句被执行的时候并不会报错。不过,一旦你访问words,就将会得到一个错误提示:文件未找到。

3、懒值对于开销较大的初始化语句而言十分有用。它们还可以应对其他初始化问题,比如循环依赖。更重要的是,它们是开发懒数据结构的基础。(spark 底层严重依赖这些lazy)

4、加载(使用它的时候才会被加载)

println(lines)

猜你喜欢

转载自www.cnblogs.com/ji-xufeng/p/8931120.html