Scala学习1

时间:2021-05-11 20:38:21

Scala是一种静态语言、面向对象的函数式编程语言。它的程序代码以.scala结尾,编译时会编译成.class字节码在jvm上运行。

  类和方法默认是public的,不必显式声明public。

  return是可选的,方法调用会默认返回最后一行表达式;

  不需要再每行代码后面写";",如果是多行代码在一行则需要写";"

  scala建议优先使用val常量,而不是var。这样能提升不变性和函数式风格。

  scala中对象引用和调用方法之间的“.”是可以不写的,例如java中int a = 1*1;等同于scala中val a = 1.*(1)/val a = 1 * 1

  从技术层面上看scala是没有运算符的,+、-、*、/、%、!=、>、>=、<、<=运算符都是数值对象提供的方法。

程序执行入口main函数

object Test1 {

  def main(args: Array[String]) {

    println("hello scala")

  }

}

忽略main函数的可执行类

object Test1 extends App {

  println("hello scala")

}

常量与变量的声明方式(变量声明后必须初始化)

val a=1

var b=1

函数的声明

循环与增强循环
 
  def main(args: Array[String]) {
    
    //输出从1到3
      for(i<-1 to 3){    // 实际上是调用1.to(3)方法,scala把所有都视为对象(数字1是RichInt类的方法,这个类型是由Int隐式转换来的。to()方法返回的是一个Range类的实例)
          print(i+",")     // 不换行输出。注意i是一个val常量,不是var变量。每次循环都创建一个叫做i的val常量,不可以在循环中改变常量i的值。
      }
    println()          // 换行输出
    
    //输出从1到2,until方法不包含最后一个值
    for(i<-1 until 3){ // 实际上是调用1.until(3)方法,scala把所有都视为对象(数字1是RichInt类的方法,这个类型是由Int隐式转换来的。until()方法返回的是一个Range类的实例)
      print(i+",")     // 不换行输出。注意i是一个val常量,不是var变量。每次循环都创建一个叫做i的val常量,不可以在循环中改变常量i的值。
    }
    println()          // 换行输出
    
    //输出从1到3
    (1 to 3).foreach(i=>print(i+",")) // 使用Range类的foreach()方法,foreach()方法接收的的参数是一个函数值,所以需要在括号中提供一段代码体
   
    
  }

元组

def main(args: Array[String]) {
    //元祖和多重赋值-1
    val (name, age, mail) = getPersonInfo();
    println("姓名:"+name+"\n年龄"+age+"\n邮箱"+mail)
    //元祖和多重赋值-2
    val info = getPersonInfo()
    println("姓名:"+info._1+"\n年龄"+info._2+"\n邮箱"+info._3)
    
  }
 
  //返回多个值的函数(姓名、年龄、邮箱)。java中通过对象、String数组和list,scala中使用元祖和多重赋值表现
  def getPersonInfo()={
    //创建包含3个对象的元祖
    ("zhangsan", "123", "zhangsan@126.com") //元祖是一个不变的对象序列,使用,分隔的值进行创建。
  }