Scala简介及基础语法

一、scala简介
    官网:https://www.scala-lang.org/
    Scala语言很强大,集成了面向对象和函数式编程的特点。
    运行在JVM(jdk)。
    大数据中为什么学习scala?
    spark是scala语言编写。
    python写spark 挺好的
    java写spark 很糟糕(代码实在是太多了)
    scala写spark 很完美
    
二、scala特点
    1)优雅
    框架设计中第一个要考虑的问题就是API是否优雅。
    精简的封装。
    代码精简(少)。
    2)速度快
    scala语言表达能力强。
    一行代码=多行java代码,开发速度快。
    3)完美融合hadoop生态
    scala是静态编译,表达能力强并且代码量少。

三、安装Scala
    1)下载scala-2.11.8.zip
    2)解压到E:\temp\目录下
    3)配置环境变量
    SCALA_HOME=E:\temp\scala-2.11.8
    PATH中加入%SCALA_HOME%\bin;

四、Scala基础语法
    1)Scala程序的开始HelloWorld
    object HelloWorld {
        def main(args: Array[String]): Unit = {
            println("Hello, world!")
        }
    }
    
    2)Scala的数据类型
    Scala与java一样,有8种数值类型:
    Byte/Char/Short/Int/Long/Float/Double/Boolean/
    和Unit类型(void)
    注意:scala中无包装类型。
    Unit:表示无值,用于不返回任何结果的方法的结果类型。
    
    3)Scala定义变量
    两个关键字:val var
    val:定义变量值不可变
    var:定义的变量值是可变的
    scala编译器会自动的推断类型!
    指定类型: val str:String = "Hello World"
    注意:类型要保持一致
    Unit = ():()相当于什么都没有用()表示。
    
    4)条件表达式
    if:判断
    val y = if(x>0) 1 else 2
    
    scala> val z = if(x>0) "error" else 1
    z: Any = error
    
    Any:包含Anyval和AnyRef
    Anyval:包含scala所有类型
    AnyRef:Scala classes与Java Classes
    Any相当于java的Object
    val k = if(x<0) 0 else if(x>=1) 1 else -1
    if和else if:多个条件的判断,符合条件看左侧,不符合条件看右侧
    
    5)块表达式
    在scala中{}包含一系列表达式,块中的最后一个表达式的值就是块的值
    例如:
    def main(args: Array[String]): Unit = {
        //块表达式
        val a = 1

        val rs = {
            if(a > 2){
                1
            }else if (a < 2){
                -1
            }else{
                0
            }
        }
        println(rs)
    }
    
    6)循环
    yield:生成一个新的集合关键字
    1.to(10).map(_*1000)
    map:取出元素
    _:代表元祖

循环的一些例子:

//1、循环得到1到10
scala> 1 to 10
res7: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

//2、循环换行输出1到10
scala> for(i <- res7) println(i)
1
2
3
4
5
6
7
8
9
10

//3、循环不换行输出1到10
scala> for (i <- res7) print(i)
12345678910

//4、定义变量接收循环得到的数字1到10
scala> val rs = 1 to 10
rs: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

//5、循环换行输出1到10
scala> for(x <- rs) println(x)
1
2
3
4
5
6
7
8
9
10

//6、定义一个数组
scala> val arr = Array(1,3,5)
arr: Array[Int] = Array(1, 3, 5)

//7、循环换行输出数组的值
scala> for (i <- arr) println(i)
1
3
5

//8、按要求循环换行输出值
scala> for(i <- 1 to 10;j <- 1 to 5 if i != j) print((10*i+j) + " ")
12 13 14 15 21 23 24 25 31 32 34 35 41 42 43 45 51 52 53 54 61 62 63 64 65 71 72 73 74 75 81 82 83 84 85 91 92 93 94 95 101 102 103 104 105

//9、使用yield生成一个新的集合
scala> for(i <- 1 to 10) yield i*10
res14: scala.collection.immutable.IndexedSeq[Int] = Vector(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)

//10、使用to方法得到1到10
scala> 1.to(10)
res15: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

//11、使用to方法和map方法得到预期的结果
scala> 1.to(10).map(_*1000)
res16: scala.collection.immutable.IndexedSeq[Int] = Vector(1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000)

//12、使用yield生成一个新的集合
scala> val a1 = for(i <- 1 to 10;if(i%2 == 0)) yield i
a1: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10)

 

posted on 2018-12-31 16:43    阅读(764)  评论(0编辑  收藏  举报