Scala基础

一、什么是Scala:

  直观的来说,加强版Java。一种脚本语言 ,可以直接使用Java的类库。

  特点:面向对象编程,函数式编程

  Scala会有三类事务,Class、Object、Trait。在Scala中把静态的和非静态的严格分开

  Class中能编写非静态的东西;

  Object中只能编写静态的,我例如Java中的main方法,它是静态的,在Scala中就要写道Object里。

  简单的举个例子:

object Scala {
  def func1 = println("Hello Zyp")

  def main(args: Array[String]): Unit = {
    /* 
       写个main方法,直接调用函数
     */
    func1
  }
}
在上面的代码中:   
  1. object里面都是静态方法(以及变量等)
2. 数据类型跟在变量后面,中间用“ :”隔开
  3. 返回值在参数完成的后面,方法体是以“ = ”来赋值
  4. 语句末有无 ”;“ 都可

  在Scala中我们声明" func1 "这个函数,他其实是个变量,这就是这个语言不同于java的地方,完全面向对象编程,是函数语言。每一个函数在Scala中都是一个值,当我们定义一个函数的时候就是定义了一个变量。

  Scala中的函数:高阶函数、柯里化函数、内嵌函数(函数中定义函数)等。

    高阶函数:       函数的参数可以传递函数

    克里化函数: 函数可以拆分,部分执行。


 

二、Scala中的变量和函数:

1. 定义变量:

  修饰符:var  \ val

    var 代表一个变量 ;val 代表一个常量

def main(args: Array[String]): Unit = {
    var n =10
    n=11
 //变量可以再次赋值
  }
 

 def main(args: Array[String]): Unit = {
    val n:Int =10
    n=11 
//会报错 Reassignment to val }

  从上面的声明变量还可以看出:在Scala中,类型可以不给。(Scala中没有基本数据类型,全是引用数据类型

2. 定义函数:

  关键字:def

def func2(a:Int,b:Int):Int = return a+b

  1.   返回值关键字 "return" 可写可不写

  2.   :Int 表示的是返回值类型,没有返回值就是Unit

  3.   这里的参数类型是变量,也可以用函数作为参数(因为scala中一切皆对象)

例如:

def square(x: Int) = {
    println(x)
    x * x
 }

def printByName(x: => Any): Unit = {
    println(x)
 }

def main(args: Array[String]): Unit = {
    printByName(square(5))
 }

       先执行square,把整个函数作为参数传递给X,那么就会先打印5再返回25

3. scala中的循环:

打印1-10:

  for (i <-1 to 10){
    println(i)
  }

隔两个打印一个数隔两个打印一个数:(步长为2)

  for (i <-1 to 10 by 2){  //by 自增的意思 
    print(i+" ")
  }
 
打印结果为: 1 3 5 7 9

用ForEash的方式:

  (1 to 10 by 2).foreach(
    println(_)  _的意思是当前,当前这个数
  )
 
但是你如果不想用下划线的话可以如下:
 
  (1 to 10 by 2).foreach(  推出的方式
    x =>println(x)
  )

4. Scala中的数据类型:

  Scala所有类型都是Object,*的类叫做ScalaObject.我们定义的所有的类都叫做ScalaObject。ScalaObject下面呢就是最根基的类叫做Any,就是任意类型,下面两个体系:值类型(AnyVal)和引用类型(AnyRef)

 

  数值这些类型(Int Boolean char..)归为值类型(AnyVal)

  String和数组,列表这些都归为引用类型(AnyRef)

Null:是一个类,在Java和Scala中小写的Null是一个值,大写的Null是一个类,类型,不允许再被继承,是一个终止的特征,继承了引用类型(AnyRef)

Nothing:没有实例对象的一种数据类型,它的父类是Any(*的)

Unit:代表的是一个值类型,类似于 yuabzuJava中void


三、Tuples元组

1.

 

上一篇:12_运算符


下一篇:Scala 速通语法(九)| 数据结构