scala学习

scala学习

scala简介

Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式编程和函数式编程风格。Christopher Diggins认为:
不太久之前编程语言还可以毫无疑意地归类成“命令式”或者“函数式”或者“面向对象”。Scala代表了一个新的语言品种,它抹平了这些人为划分的界限。
根据David Rupp在博客中的说法,Scala可能是下一代Java。这么高的评价让人不禁想看看它到底是什么东西。
Scala有几项关键特性表明了它的面向对象的本质。例如,Scala中的每个值都是一个对象,包括基本数据类型(即布尔值、数字等)在内,连函数也是对象。另外,类可以被子类化,而且Scala还提供了基于mixin的组合(mixin-based composition)。
与只支持单继承的语言相比,Scala具有更广泛意义上的类重用。Scala允许定义新类的时候重用“一个类中新增的成员定义(即相较于其父类的差异之处)”。Scala称之为mixin类组合。
Scala还包含了若干函数式语言的关键概念,包括高阶函数(Higher-Order Function)、局部套用(Currying)、嵌套函数(Nested Function)、序列解读(Sequence Comprehensions)等等。

scala语法以及和java的联系

class :类
object:对象,单例对象

scala基本语法:

def:定义函数的关键字
main:函数名
args: Array[String] :参数
args : 参数名 Array[String] : 参数类型 ,String : 泛型
Unit : 无返回,相当于void
注意:main函数必须放在object中
例如:

object Demo1Helloworld{
def main(args: Array[String]): Unit = {
 println("helloworld")
 } 
 }

语法基础以及和java的一些比较

object Demo2Base{
del main(args: Array[String]):Unit = {
//scala具有类型推断的属性
//自动根据等号右边推断出变量的类型
var s = "1"
//手动增加类型
var s :string="1"
//var : 声明变量,可以再指向其他的对象
//val : 声明常量,不能再指向其他对象

//scala的类型转换
val str: String = "100"
//java的方式
Integer.parseInt(str)
//scala的类型转换是对java的方式进行了封装,用to的方法隐式增加
val int: Int = str.toInt
val str1: String = int.toString

//注意:scala中不支持for(int i;i<size;i++)循环,需要用while或者迭代器
}
}

scala和java相互兼容,语法不兼容

可以在scala中使用java的类
例如:创建一个java类,包含属性,方法等。可以通过在scala中new得到
new 类名(参数1,参数2)
而在java中也可以调用scala的方法
因为通过object声明的scala,相当于加了个static静态修饰符,可以通过类名进行调用
类名.方法名()

![scala on java(1)](C:\Users\A\Desktop\scala\scala on java(1).png)

java和scala文件读写的语法比较

以下代码形式示例:

object Demo3IO{
der main(args: Array[String]): Unit = {
//1.使用java的形式写scala代码
//注意:scala中的异常默认抛出
//读取的路径为相对路径,该路径为当前运行模块路径
val fileReader = new FileReader(fileName = "data/students.txt")

//缓冲流
val bufferedReader = new BufferedReader(fileReader)
//读取第一行
var line : String = bufferedReader.readline()
while (line != null){
println(line)
line = bufferedReader.readline()
}
bufferedReader.close()

//使用scala
val source: BufferedSource = Source.fromFile("data/students.txt")
val lines: Iterator[String] = source.getLines()
    for (line <- lines) {
      println(line)
    }
//迭代器只能迭代一次

 //链式调用
    val iterator: Array[String] = Source.fromFile("data/students.txt").getLines().toArray
   
   //输出流
    val bufferedWriter = new BufferedWriter(new FileWriter("data/out"))

    for (line <- iterator) {
      bufferedWriter.write(line)
      bufferedWriter.newLine()
      bufferedWriter.flush()
    }

    bufferedWriter.close()
}
}
posted @ 2021-07-12 20:31  xiaolee_bigdata  阅读(35)  评论(0编辑  收藏  举报