学习scala的原因主要是因为以后要学习spark。

 

scala是运行在java虚拟机上的,它是一种面向对象和函数式编程结合的语言,并兼容java程序

相对于java更简单

 

安装scala前提你要保证你已经安装好了jdk

 

然后

下载这个msi版本的,下载完直接下一步下一步傻瓜安装

 

然后下载个IDEA

第一次新的IDEA没法创建scala

然后创建一个scala程序

 

 然后选择你的sdk位置和jdk版本

 

 

 然后finsh

在src下创建一个scala class文件

在这里可以为你的工程添加依赖外部包啥的

 

 ok开始一些简单地学习

scala和java一样,有9种数值类型Byte,Char,Short,Int,Long,Float,Double,Boolean,

还有一个Unit类型,它表示无值和void差不多

在java,object是所有类的祖先,在scala中是Any,上面说的几种类型都是Anyval,其他的都是AnyRef

object firstObject {

  def main(args: Array[String]): Unit = {
    var name = "wangpeibing"
    var age = 18.0//编译器会根据你的值默认的指定你的数据类型
    var name1: String = "zhangsan"//你也可以指定这个数据类型
    val name2: String = "lisi" //val也可以创建,但val修饰的东西他不能再改变,类似于java中的final
    val s = ()//此时s为unit类型的
    println("name = "+name, "age=" + age)
    println("name = "+name + "age=" + age)//加,在外面输出的时候会带上括号,不加就不带
    printf("name %s age %f",name,age)//类似于c语言中动态的取值
    println()
    println(f"$name $age")//f插值器允许创建一个格式化的字符串
    println(s"1 + 1 = ${1+1}")//使用$可以去表达式的值
    val s1  = if(age > 20) 20 else if(age > 10) 10 else 0//条件表达式

    val s2 = if(age > 10){//条件表达式会把最后一行当做返回值 虽然没有return,但默认的带上了,自己就不要再加return 了
      age
      age * 10
    } else {
      0
      100
    }
    println(s2)

  
  var s3 = if(age > 10)"xxxx" else 20//此时s3是一个Any类型的,因为XXXX是String,是AnyRef,Int是AnyVal类型,他们都是Any类型的
  
   print(s3)
} }

 定义函数和for循环

package cn.edu360.day3

object learning {
  def sayhello = print("hello")
  def sayhello2() = println("hello2")
  //def 方法名(属性名:属性类型.....):方法返回值(也可以不写,系统自动生成) = {具体的方法}
  def sum(a:Int,b:Int):Int = {
    return a+b //最后一行自带return,所以这个也可以不加return
  }
  def main(args: Array[String]): Unit = {
    val arr = Array(1,2,3,4,5)
    sayhello
    sayhello2()
    println("a + b:" + sum(1,2))
    for(ele <- 0 to 4){
      println(arr(ele))
    }
    for(ele <- arr){  //一个for循环类似java的增强for循环
      println(ele)
    }
    //scala里面的to方法,1 to 10 其实是1.to(10),是从1到10
    // 1 until 10是1到9

    for(e <- arr if e % 2 == 0){//增加一个条件
      println(e)
    }
    for(i <- 1 to 3; j <- 1 to 5 if(i == j)){//双重for循环
      println(i)
    }

    var test = for(e <- arr if e % 2 == 0) yield e  //此时会将结果放到一个新的集合中去,然后返回给test

    //scala的运算符都是一个方法1+2为 1.+(2)
    //讲方法转化成函数
    val fun = sum _
    //定义一个方法
    var fun1 = (a:Int, b:Int, c:Int) => a+b+c
    println(fun1(1,2,3))
    //另一种麻烦的写法
    //var 函数名:(参数类型...)=>函数返回值=(对前面参数类型的引用) =>(具体方法)
    var fun2:(Int, Int, Int) => Int =(x,y,z) =>(x+y+z)
    println(fun2(1,2,3))
  }
}

 函数作为参数传到方法里面

package cn.edu360.day3

object learning2 {
  //函数作为参数传入方法,只写出参数类型和返回类型
  //方法其实就像是java里面的接口,思想就是这个,只不过实现起来更加方便
  def add2(f:(Int, Int)=> Int, a: Int, b: Int)={
    f(a,b)
  }
  def add3(f:Int=>Int, t:Int):Int={
      f(t) + t
  }
  def main(args: Array[String]): Unit = {
    var f:(Int, Int)=>Int=(x,y)=>(x+y)
    var test = add2(f,1,2)
    var test2 = add2((x,y)=>(x+y),3,4)//使用匿名函数
    println(test)
    println(test2)
    var f1:(Int)=>Int = (a: Int) => a*10//两种定义函数
    var f2 = (a:Int) => a*10
    val test3 = add3(f1, 2)
    println(test3)
  }
}

 

 

 

 

版权声明:本文为wpbing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wpbing/p/11270749.html