Scala语言入门基础语法

一,基础语法

package cn.itcast.helloword.newstart

import scala.collection.mutable.ArrayBuffer

object basics {
  //def:定义方法用def关键字   m:方法的名字   x和y是参数列表    Int:方法返回值类型     x*y:方法体
  //方法的返回值类型可以不写,编译器可以自动推断出来,但是对于递归函数,必须指定返回值类型
  def m(x: Int,y: Int):Int = x * y
  //函数的定义
  val f1 = (x:Int,y: Int) => x + y
  //方法和函数的区别,在函数式编程语言中,函数是"头等公民",他可以像任何其他数据类型一样被传递和操作.
  //定义一个方法,方法m2参数要求是一个函数,函数的参数必须是两个Int类型,返回值类型也是Int类型
  def m2(f: (Int,Int)=>Int): Int = {
    f(2,6)
  } 
  //定义一个函数f1,参数是两个Int类型,返回值是一个Int类型.
  val f2 = (m: Int,n: Int) => m * n
  //将方法转换成函数,神奇的下划线_
  val f3 = m _;
  
  println("************************")
  def main(args: Array[String]): Unit = {
    //7,数组,映射,元组,集合
    //7.1,定长数组和变长数组
    //初始化一个长度为8的定长数组,其所有元素均为0
    val arr1 = new Array[Int](8)
    //直接打印定长数组,内容为数组的hashcode值
    println(arr1)
    //将数组转换成数组缓冲,就可以看到原数组中的内容了
    //toBuffer会将数组转换成数组缓冲
    println(arr1.toBuffer)
    //注意:如果new,相当于调用了数组的apply方法,直接为数组赋值
    //初始化一个长度为1的定长数组
    val arr2 = Array[Int](10)
    println(arr2.toBuffer)
    //定义一个长度为3的定长数组
    val arr3 = Array("hadoop", "storm", "spark")
    //使用()来访问元素
    println(arr3(2))
    //变长数组(数组缓冲)
    //如果想使用数组缓冲,需要导入import scala.collection.mutable.ArrayBuffer包
    val ab = ArrayBuffer[Int]()
    //向数组缓冲的尾部追加一个元素
    //+=尾部追加元素
    ab += 1
    //追加多个元素
    ab += (2, 3, 4, 5)
    //追加一个数组++=
    ab ++= Array(6, 7)
    //追加一个数组缓冲
    ab ++= ArrayBuffer(8,9)
    //打印数组缓冲ab
    println(ab)
    //在数组某个位置插入元素用insert,在0的位置插入-1和0
    ab.insert(0, -1, 0)
    println(ab)
    //删除数组某个位置的元素用remove,删除角标为8的两个元素
    ab.remove(8, 2)
    println(ab)
    //7.2 遍历数组   TODO
    //增强for循环,好用的until会生成角标,0 until 10  包含0不包含10
    //初始化一个数组
    val ar = Array(1,2,3,4,5,6,7,8)
    //增强for循环
    for (i <- ar)
      println(i)
    //好用的until会生成一个Range,reverse是将前面生成Range反转
    for (i <- (0 until ar.length).reverse)
      println(ar(i))
    
    println("************************")
    
    //6,定义方法和函数,调用m2方法,并传入f1函数
    val r1 = m2(f1)
    println(r1)
    println("======================")
    //调用m2方法,并传入f2函数
    val r2 = m2(f2)
    println(r2)
    println("======================")
    val r3 = m2(f3)
    println(r3)
    println("======================")
    
    //5,调用方法和函数
    //    Scala中的+ - * / %等操作符的作用与Java一样,位操作符 & | ^ >> <<也一样。只是有
    //一点特别的:这些操作符实际上是方法。例如:
    //a + b
    //是如下方法调用的简写:
    //a.+(b)
    //a 方法 b可以写成 a.方法(b)

		  val x = 1
		  //4,循环
		  //for(i<-表达式),表达式1 to 10返回一个range(区间)
		  //每次循环将区间中一个值赋给i
		  for (i <- 1 to 10)
		    println(i)
		    println("-----------------------")
		  //数组
		  val arr = Array("a","v","c")
		  for (i <- arr)
		    println(i)
		    println("-----------------------")
		  //高级for循环   每一个生成器都可以带一个条件,注意:if前面没有分号
		    for (i <- 1 to 3;j <- 1 to 3 if i != j)
		      println((10*i+j)+"")
		      println("-----------------------")
		  //for推导式:如果for循环的循环体以yield开始,则该循环会构建出一个集合
		  //每次迭代生成集合中的一个值
		      val v = for (i <- 1 to 10) yield i * 10
		      println(v)
		      println("-----------------------")
		      
		  
    //3,块表达式
    //在scala中{}中可包含一系列的表达式,块中最后一个表达式的值就是块的值
		  //下面就是一个块表达式
		  val result = {
		    if (x &

你可能感兴趣的:(Scala语言入门基础语法)