zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    ASP.NET MVC 3 新特性
    C#用WebClient下载File时操作超时的问题
    用C# 实现 Zen Cart 的用户密码加密算法
    ASP.NET MVC 局部缓存实现 用户控件缓存 Partial Output Caching
    关于MarshalByRefObject的解释
    文件的上传和下载
    浅谈三维GIS的应用之三维管线
    Python:处理不是经由EXPORT出來的Windows日志
    python :简单邮件发送
    日志文件分割:将包含不同关键字的行写入到不同的文件
  • 原文地址:https://www.cnblogs.com/ji-xufeng/p/8931120.html
Copyright © 2011-2022 走看看