第一章.scala语言、函数式编程

一、语言分类

在这里插入图片描述
上图引自【总结】编程语言的分类
从大学到现在接触到的语言,有C语言、java、python,如上图所示:

  • C语言是面向过程的、编译型的、静态的、强类型语言;
  • .Python是面向对象的、解释型的、动态的、弱类型语言;
  • Java是面向对象的、混合型的、静态的、强类型语言;

二、程序的执行方式–编译型,解释型

1、C是编译型的,python是解释型的, java是为什么是混合型的?
首先Java需要编译,编译成字节码,然后解释执行或者是预编译成机器码直接执行。而且启动JVM时,它有一个参数可以设置成Server模式还是Client模式。在Server模式,例如,使用idea、tomcat启动程序的时候,常常感觉到启动很慢,像这种活动服务,一般都是期望启动的时候慢一点儿,但是用的时候快一点儿,所以它在启动的时候,把字节码向本机这个硬件再去再去编译一次,转成机器码,然后速度会运行的时候非常快,这就为什么说java是一个混合体,它既是编译的,又是解释的。

2、Java程序从源代码到执行经历阶段:
Java程序==(编译javac)–>字节码文件.class==>类装载子系统化身为反射类Class==>运行时数据区==>(解释执行+JIT编译器编译)–>操作系统(Win,Linux,Mac JVM)。
3、Java的Client模式和Server模式
在JVM启动的时候,它有一个参数可以设置成Server模式还是Client模式,Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升。JVM如果不显式指定是-Server模式还是-Client模式,JVM能够根据下列原则进行自动判断(适用于Java5版本或者Java以上版本):
For Java SE 5, the definition of a server-class machine is one with at least 2 CPUs and at least 2GB of physical memory.
对于 Java SE 5, 服务器级机器的定义是具有至少 2 个 CPU 和至少 2GB 物理内存的机器。
在这里插入图片描述

  • 32 位系统上,默认使用 Client 类型的 JVM。要想使用 Server 模式,机器配置至少有 2 个以上的 CPU 和 2G 以上的物理内存。Client 模式适用于对内存要求较小的桌面应用程序,默认使用 Serial 串行垃圾收集器。
  • 64 位系统上,只支持 server 模式的 JVM,适用于需要大内存的应用程序,默认使用并行垃圾收集器

4、编译型、解释型根本区别?
说到这个问题,要先说一下编译型和解析型语言。编译型语言需要提前通过编译器将所有源代码一次性转换成机器能够识别的二进制指令,也就是生成一个可执行程序。
而解释性语言可以一边执行一边通过解释器转换,需要哪些源代码就转换哪些源代码,不会生成可执行程序。
那么,编译型和解析型的根本区别在哪?答:“是否是强类型”。
强类型的概念是什么?什么是强类型?换句话说,什么是类型?类型的简单描述是什么?是宽度,是类型,类型的本质其实就是宽度,比如说int是四个字节,long是八个字节,而C有类型,Java也有类型,但是其他解释型语言基本都没有类型的。所以这时候其实也从而说明了编译型的语言,它是需要类型的。
为什么?因为它最终是要把你的代码的逻辑编辑成一些机器码,然后最终运行的时候,它是需要内存开辟足够宽的空间,未来才能跟按照你的逻辑存放这些数据,不溢出。对于给定的正确的类型,就解释型而言的话,它运行时解释程序,是按照文件去处理的,它是没有这个概念,它不需要预编译,它不需要有内存提前分配空间大小,所以这也是为什么解释型比编译型慢,因为编译器已经是把未来运行的时候,所有的路径、所有的宽度、所有的所有的点,整体设计好了,直接在内存开辟空间。到时候一个格子,什么箱子都准备好,把东西往里,往里放就行,绝对能放进去,放进去,这个东西就是一个类型,它做加法的时候就不用判断,直接计算就行。

三、scala语言

1、什么是scala语言
官网概述:
The Scala Programming Language
Scala combines object-oriented and functional programming in one concise, high-level language. Scala’s static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.
翻译:
Scala 将面向对象和函数式编程结合在一种简洁的高级语言中。Scala 的静态类型有助于避免复杂应用程序中的错误,其 JVM 和 JavaScript 运行时允许您构建高性能系统,并轻松访问庞大的库生态系统。
2、Scala六个特征:

  • Java和scala可以无缝混编(因为都是基于JVM的编程语言)
  • 类型推测(自动推测类型)
  • 并发和分布式(Actor)
  • 特质trait,特征(整合java中接口和抽象类的优点)
  • 模式匹配(类似于java中的switch)
  • 高阶函数(函数的参数是参数,函数的返回是函数)
    3、JAVA和SCALA的区别?
    (1)在语言功能方面
    在这里插入图片描述
    (2)在编译执行过程中:
    在这里插入图片描述
    (3)语言模型:
    1. 面向过程的© 第一类值:基本类型 +指针
    2. 面向对象的 (java) 第一类值:基本类型 + 对象类型
    3. 函数式的 第一类值:基本类型 + 对象类型 + 函数
      SCALA 就是面向对象的函数式编程语言

4、使用scala:
1、环境搭建
(1)开发 jdk sdk(编译器)
(2)运行 jdk jre
V: spark 2.3.x > scala 2.11 > jre/jdk 1.8.uxxx
2、使用IDEA开发
主流:使用 集成工具 : IDE
IDEA +plugin +编译器 》创建scala项目了!
(1) 启动屏幕:configure–》plugins --》安装scala插件。在这里插入图片描述
(2)IDEA下载scala 2.11
在这里插入图片描述
(3)创建普通的scala项目
在这里插入图片描述
(4)开始scala代码之旅
Java代码打印”Hello World“

public class TestJava {
  public static void main(String[] args) {
    System.out.println("Hello World");
  }
}

Scala代码中打印”Hello World“

object TestScala {
  def main(args: Array[String]): Unit = {
    println("hello world")
  }
}

从上面的Java代码和Scala可以得到:
1.Java方法要放到类中,Scala主方法只能写在 object定义的文件中;
2.Java主方法需要用staic修饰,Scala没有;
3.Java中分号使必须的,Scala分号可有可无;
4.Java文件中的必须存在一个类与文件名相同,scala是包级别区分,类名可以和文件名不一致;


#学习scala


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值