SCALA基础语法(一)

一、基础语法(1)

1.1主函数声明

// Scala

// def main(args: Array[String]): Unit ={}

//Java

//public static void mian(String[] args){}

1.2类

// Scala

// [修饰符] class 类名 {类体}

// scala语法中,类并不声明为public,一个Scala源文件可以包含多个类。所有这些类都具有公有可见性。所以这里的修饰符在后面扩展时再介绍

// Java

// [修饰符] class 类名 {类体}

// java语法中要求一个java源码文件中可以声明多个类,但是公共类只能有一个,且必须和源码文件的文件名保持一致。

1.3对象

// Scala

// val 变量 [:类型]  = new 类型();

// val user : User = new User();

// scala在声明对象变量时,可以根据创建对象的类型自动推断,所以类型声明可以省略

但当类型和后面new 对象类型有继承关系即多态时,就必须写了

// Java

// 类型 变量 = new 类型();

// User user = new User();

// Java是强类型语言,声明任何变量的同时都必须声明类型

1.4属性

// Scala(Bean)

// private var 属性名称 [:类型] = 属性值

// def Setter/Getter方法

官方不推荐程序员自己编写get和set方法,因为只要class中的成员变量不加private修饰符,scala编译器会自动把成员变量变为私有的同时,增加公有的get和set方法

// Java(Bean)

// private 类型 属性名称;

// public Setter/Getter方法

// Java语法中如果声明了一个属性,但是没有显示的初始化,那么会给这个属性默认初始化

// 通过setter/getter方法对属性进行赋值和取值

// setter/getter方法一般都是公共访问权限,起到了封装的作用

1.5方法

// Scala

// def 方法名(参数列表) [:返回值类型] = {方法体}

// Scala中的方法其实就是函数,只不过一般将对象中的函数称之为方法。声明规则请参考函数式编程中的函数声明

// 调用方法

// 对象.方法名()

// Java

// public 返回值类型 方法名(参数列表) { 方法体 }

//调用方法

// 对象.方法名()

1.5.1函数既是方法也是值

在函数式编程语言中,函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。

注意:方法名+(参数)为执行并返回结果, 方法名+ _ 则返回方法的引用

1.5.2参数与返回值

// 不写return,也不写返回值, ,程序会根据最后一行的结果作为return的返回值,类型自动推断。

// 写了 return 必须写返回值,但是写了返回值可以不写return,默认取最后一行。

// 如果连=号都不写,默认为Unit

注意:有return 无法省略返回值,没有return 可以自行推断

          函数如果参数列表不为空,那么在调用时需要传递参数,不能省略

          调用函数时,如果不传递参数,就采用默认的初始值,如果传递参数,传递的参数会覆盖初始化。

          如果函数存在多个参数,每一个参数都可以设定默认值,那么这个时候,传递的参数到底是覆盖默认值,还是赋值给没有默认值的参数,就不确定了(默认按照声明顺序)。在这种情况下,可以采用带名参数

1.5.3纯函数

//就是没有副作用的函数,这里所谓的没有副作用,指的是函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。 函数与外界交换数据只有一个唯一渠道——参数和返回值

纯函数的好处:

(1).易并行: 线程安全,不需要线程同步.

(2).易推断:因为所有的影响因素都在参数中,所以很容易理解函数的功能。

(3).易调试: 不用关心上下文,只关心所传入参数,是否能够计算出对应的值。

(4).易组合: 纯函数与纯函数组合一定还是纯函数

(5) 易缓存: 因为相同的参数一定返回相同的结果,所以可以利用参数缓存结果。

(6) 幂等: 不论该函数被执行多少次,都不会影响环境,而结果也一样。

(7)  可延迟处理: 结果不会因为时间而改变,只要传递的参数值确定,什么时候执行,结果都是一定的。

1.6伴生对象(类比为静态方法及成员的集合)

// Scala

// Scala语言并没有静态的概念。但是为了能够和Java语言交互,就产生了一种特殊的对象来模拟类对象,我们称之为类的伴生对象。这个类的所有静态内容都可以放置在它的伴生对象中声明和调用

// Scala中伴生对象采用object关键字声明,伴生对象中声明的全是“静态”内容,可以通过伴生对象名称直接调用。

// 伴生对象对应的类称之为伴生类,伴生类和伴生对象应该在同一个源码文件中。

// 伴生对象中的属性和方法都可以通过类名直接调用访问。

// 从语法角度来讲,所谓的伴生对象其实就是类的静态方法和成员的集合

1.7包

// Scala

// package 包名

// scala语言也可以使用包管理类

// scala 包名和源码实际的存储位置没有关系

// 从技术角度来讲,Scala的编译器会将Scala中的包编译成符合Java语法规则的包结构

1.8继承

// Scala

// class 子类名 extends 父类名 { 类体 }

//子类继承父类的属性和方法

1.9特质(类比接口)

// Scala

// Scala语言中,采用特质(特征)来代替接口的概念,也就是说,多个类具有相同的特征(特征)时,就可以将这个特质(特征)独立出来,采用关键字trait声明

// 声明特质

// trait 特质名

// 一个类具有某种特质(特征),就意味着这个类满足了这个特质(特征)的所有要素,所以在使用时,也采用了extends关键字,如果有多个特质或存在父类,那么需要采用with关键字连接

没有父类

// class类名 extends 特质1名称 with 特质2名称 with 特质3名称

有父类

// class类名 extends 父类 with特质1名称 with 特质2名称 with 特质3名称

 

 

猜你喜欢

转载自blog.csdn.net/lyk2132X/article/details/82152232