Scala、Java、ECMA6的语法关联

语法概述

      Scala 是一门集成了面向对象编程和函数式编程的语言,建立在Java之上,简单来说,就是对Java核心类的高度封装,scala文件编译后也是class格式,运行在JVM中。Scala是ECMA6的前生,所以在语法上两者高度的相似,都是面向对象和函数式编程的高度结合体,而java8中出现的lambda虽然也是函数式编程的一个完美解决方案,但它的面向函数和面向对象还是完全分离的,它并不能像Scala一样将方法转换为函数,不能将对象转换为函数,而Scala实现了方法、对象、函数之间的无缝切换及融合。接下来我们梳理一下ECMA6、Java、Scala这三种语法之间在各个核心领域有什么样的区别和联系

数据类型

  • scala
          scala中的数据类型是对Java语法数据类型的封装,包括了 byte short int long float double char boolean string Unit Null Nothing Any AnyRef
  • java
          byte short int long float double char boolean
  • es6
          string number boolean array object Null Undefined

作用域

  • scala

    1. private:只能在当前类中的函数中调用
    2. protected:能在当前类中的函数和当前类的子类中调用
    3. default/public:任何地方都可以访问到
  • java

    1. Private:只能在当前类中的方法中调用
    2. default:能在当前类中的方法和同一个包下的类中调用
    3. Protected:能在当前类中的方法和同一个包下的类及其的子类中调用
    4. Public:任何地方都可以访问到
  • es6

    1. var:能在当前函数及同级嵌套函数中使用
    2. let:能在当前函数不包括同级嵌套函数中使用

静态域

      Scala将静态域和实例域彻底分离,静态变量和函数全部存放到object中,而在java中每一个对象都有自己的静态域,当然这个区别只在语义上存在,JVM中不受影响

类的类型

  • scala

    1. trait:类似于abstract,但子类有方法体的函数不可被重写,只能重写无方法体的函数
    2. object:所有的属性和函数都在静态域中
    3. class:和Java语法中的class一样,可通过extends、with关键字继承trait或class
  • java

    1. class:所有的方法都要有方法体
    2. interface:java8之前除Object中的方法外,所有的方法都不可有方法体,java8之后加了lambda的编译机制,允许写一个有方法体的主方法
    3. abstract:方法体可有可没有
  • es6

    1. class:class的声明方式在es6之后加入,等同于function
    2. function:是最原始的对象声明方式,在es6中函数即对象,对象即函数

变量声明

  • scala
          只有var、val两种声明标识,前者为变量,后者为常量
  • java
          有基本数据类型和对象名两种声明方式,当用基本数据类型声明时(如Integer),需要注意自动装箱陷阱
  • es6
          有var、const、let三种声明方式,var、let用来控制变量作用域,const为常量,不可更改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值