• Scala--第一天


    一、scala的语言类型

    1. 编译型语言
    2. 强数据类型编程语言(数据有类型,变量也有类型)

    二、Scala的用处

    1. 开发大数据(spark,Flink,Kafka)
    2. 表达能力强,胜过Java,开发效率高
    3. 兼容Java,可直接访问Java类库

    三、基本语法

      1.标识符:①大小写敏感;②不可使用关键字或保留字;③望文生义

      2.变量的定义: var/val 变量名:变量类型 = 初始值

             e.g:var name:String="cmx"

             注意:var定义的变量是可以重新赋值的;val定义的不可以重新赋值

      3.类型推断:var name="cmx",在Scala中,如果没有写变量的类型,Scala会根据变量的初始值来推断出变量的类型

      4.惰性赋值:lazy val name="cmx",这种写法的意义在于:当一个变量过大时,无需马上加载到内存,可以惰性赋值,在用的时候,给其分配内存空间,减少内存的压力

            注意:传统的赋值,会在赋值成功后,立刻开辟新的内存空间

               惰性赋值只能使用 val 关键字  var关键字用不了

      5.Scala的字符串

        ①使用双引号:var name:String="cmx" ,var  n:String="c" , var a:Char='v'

          ②使用三引号:var s:String="""

                      select *

                      from

                      user

                     """

          可以保持换行的格式

        ③插值表达式:用于字符串的拼接

         方式一:使用"+"  var ss ="cmx", print(name+name.length)

         方式二:插值表达式,var/val 变量名:变量类型 = s"${变量}字符串"

             e.g:var name ="cmx"

               print(s"名字为${name}")

      6.常见的数据类型

                                                                                                                         

      7.类型层次结构

    1. 根类 Any 的子类: AnyVal 、AnyRef 。
    2. AnyVal子类:Char、Byte、Short、Int、Long、Float、Double、Boolean、Unit
    3. AnyRef子类:ScalaObject、String、Seq、List、Array、Iterable、Other Scala Classes、Other Java Classes、Null
    4. Null是继承自AnyRef的类,是每个引用类的子类
    5. Nothing是任何其他类型的子类型

      几个重点说明:

    • Any scalla中所有类型的父类,有俩个子类AnyVal,AnyRef
    • AnyVal 所有数值类型的父类
    • AnyRef 所有引用对象的父类
    • Unit特殊数值类型,只用于方法(函数)声明的时候,表达这个函数没有返回值
    • Null是AnyRef的子类,可以赋值给所有的引用类型的对象 null
    • Nothing scala内部使用,不可直接创建对象

      8.运算符

         

      注意:Scala中没有a++,a--,但是有a+=1,a-=1

         字符串值的对比用 == 或者 equals方法  :var a="cc" var b="dd" print(a==b) 或者 print(a.equals(b))

         字符串引用的对比 用eq()方法 :print(a.eq(b))

      9.Scala表达式

    1. 变量+运算符 构成的一个式子
    2. 每个表达式都有其对应的结果,可以是字符串 布尔值 数值
    3. 语句块,用{}括起来的部分,每个语句块 都有对应的返回值(语句块中最后一行的内容),且可以赋值给其他变量
    1 var a={
    2   print(1+1)
    3   1+2
    4 }
    5 println(a)
    6##结果位3

      10.流程控制

      流程控制同其他语言大致相同,分为三类:1.顺序流程;2.分支流程;循环流程

      ①顺序流程 自上而下 从左至右依次执行          注意:函数的定义与调用,不受定义顺序的限制

     1 object test1 {
     2   def func():Unit={
     3     print("我是一个函数")
     4   }
     5   def main(args: Array[String]): Unit = {
     6     println(1+2)
     7     func()
     8   }
     9 ##输出结果
    10 3
    11 我是一个函数

      ②分支流程(条件选择流程)

      格式:

    1 if(布尔表达式){}
    2 else if(布尔表达式){}
    3 ...
    4 else{}

      Scala中没有三元运算符,但是有类似Java中的运算代码如下

    1   def main(args: Array[String]): Unit = {
    2     var b = 1
    3     var a = if (b > 0) 2 else 4
    4     print(a)
    5   }
    6 ###结果
    7 2

      ③for循环,while循环 知道循环的次数用for  不知道用while

      示例代码:

     1     for(i<- 1 to 10){    ##闭区间用to
     2       print(i+",")
     3     }
     4     println()
     5     for(j<-1 until 10){   ##开区间用until
     6       print(s"${j},")
     7     }
     8 ###结果
     9 //    1,2,3,4,5,6,7,8,9,10,
    10 //    1,2,3,4,5,6,7,8,9,
    11 #若循环中只有一个表达式 可以简化代码
    12 for(n<- 1 to 10)println(n)
    13 ###结果
    14 //    1
    15 //    2
    16 //    3
    17 //    4
    18 //    5
    19 //    6
    20 //    7
    21 //    8
    22 //    9
    23 //    10

      嵌套循环

     1     //嵌套循环
     2     for (i <- 1 to 10) {
     3       for (j <- 1 to 8) {
     4         println(i + "," + j)
     5       }
     6     }
     7     //若嵌套循环中只有一个表达式,可以简化
     8     for(i<-1 to 10 ;j<-1 to 10){
     9       println(i + "," + j)
    10     }
    11   }

      守卫

    1     //可以解决步长的问题
    2     for (i <- 1 to 10 if i % 2 == 0) {
    3       println(i)
    4     }
    5     //使用Range函数解决步长问题
    6     for(j<- Range(1,10,2)){
    7       println(j)
    8     }
    9   }

      for推导式:在Scala中用来生成一个新的集合

    1     var newCollection = for (i <- 1 to 10) yield i * 10
    2     print(newCollection)
    3     println()
    4     var newCollection1 = for (i <- Range(1,10)) yield i * 10
    5     print(newCollection1)
    6 ###结果
    7 //    Vector(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)  ##vector 向量,载体的意思
    8 //    Vector(10, 20, 30, 40, 50, 60, 70, 80, 90)

      while循环

    1     var i = 1
    2     while (i < 10) {
    3       print(i)
    4       i += 1
    5     }

      break,continue关键字

     1 ###break关键字
     2 import scala.util.control.Breaks._
     3 breakable(
     4       for (i<-1 to 10){
     5         if(i>5)break()
     6         else println(i)
     7       }
     8     )
     9 ###结果
    10 //    1
    11 //    2
    12 //    3
    13 //    4
    14 //    5
    15 ###continue关键字
    16     for (j<-1 to 10){
    17       breakable(
    18         if (j==5)break()
    19         else println(j)
    20       )
    21     }
    22 ###结果
    23 //    1
    24 //    2
    25 //    3
    26 //    4
    27 //    6
    28 //    7
    29 //    8
    30 //    9
    31 //    10
  • 相关阅读:
    linux常用命令三
    linux常用命令二
    redis持久化
    Linux环境redis集群搭建
    Maven常用命令
    Maven生成项目站点
    maven中import scope依赖方式解决单继承问题的理解
    maven使用assembly打包tar.gz文件
    Apache CXFjar包目录(转)
    WebService学习笔记一
  • 原文地址:https://www.cnblogs.com/cmxbky1314/p/12259040.html
Copyright © 2020-2023  润新知