Scala学习-Scala入门基础必备-持续更新

 scala == java++
面向对象 函数式语言
也是基于JVM的

对比java中的

aa.java-(javac)->aa.class编译过程

scala如下:
aa.scala -(scalac)-> aa.class 编译过程

1.1 变量和数据类型

var变量
val常量 : 在程序执行的过程中,其值不会被改变的变量
var i:Int = 10
val j:Int = 20  value
# 能用常量的地方不用变量
# 变量类型确定后不能修改 说明scala是强数据类型语言
# 变量声明时,必须有初始值

用反引号 `` 可以包含任意字符串,哪怕是scala关键字也可以

val con_user = all_user.select("imei1").dropDuplicates().filter($"hashId" >= 0 && $"hashId" <= 59)

# 字符串通过+进行拼接
# printf 中字符串可以通过%进行传值
# 插值字符串:字符串模板可以通过$获取变量值
object Test03_String {
  def main(args: Array[String]): Unit = {
    val name:String = "alice"
    val age:Int = 19
    println(age + "岁的" + name)
    printf("%d岁的%s",age,name)
    println(s"${age}岁的${name}")
  }
}

Scala中一切数据都是对象,都是Any的子类
scala中数据类型分为两大类:数值类型AnyVal  引用类型AnyRef 它俩都是对象
scala仍然遵守隐式转换

Unit Null 和Nothing类型
Unit表示无值 和其他语言中void等同 方法不返回任何内容是使用
Null 类型只有一个实例值null
Nothing 在scala中类层级最低端,是任何类型的子类型。如果一个函数没有正常的返回值,可以使用Nothing

强制类型转换
java: int num = (int)2.5
scala: var num : Int = 2.7.toInt
val n1 :Int = 1.1.toInt
强转的符号只针对最近的,可以通过()进行综合转换
val f2 :Int = "12.3".toFloat.toInt

    val result:String ={
      val a = "测试"
      print(a)
      a
    }

1.2 运算符

1.3 流程控制

1.4 函数式编程

1.4.1 函数基础

函数的基本语法:
def sum(x:Int,y:Int):Int={  # 注意格式
    x+y
}

函数和方法:
函数:为完成某一功能的程序语句的集合,称为函数
方法:类中的函数称为方法

可变参数:可变参数一般放在最后 参数默认值,一般将其放在后边

scala中:
return可以省略,scala会使用函数体的最后一行作为返回值
返回值类型如果可以推断出来,则可以省略返回值类型  def f3(name:String){ ... }
如果函数声明了Unit,那么即使函数体中使用return关键字也不起作用
如果有return,则不能省略返回值类型
scala如果期望是无返回值类型,则可以省略等号
如果函数无参,但是声明了参数列表,那么调用时,小括号可以不加
def f7():Unit={
    println("test")
}
# 进行函数调用
f7()
# 或者
f7
函数声明时,如果没有参数列表,那么小括号可以省略
def f8:Unit={
    println("function f8")
}

匿名函数/Scala中lambda表达式
(name:String)=>{println(name)}

1.4.2 函数高阶

1.4.2.1 高阶函数

在scala中,函数是一等公民。可以调用、定义函数。

高阶用法:

  • 函数可以作为值传递
  • 函数可以作为参数进行传递
  • 函数可以作为函数返回值返回
object Test_fun_CollectionFun {

  def main(args: Array[String]): Unit = {

//    对数组进行处理,处理结果返回一个新数组
    val arr:Array[Int] = Array(12,1,45,75)
    def arrayOperation(array:Array[Int],op:Int=>Int):Array[Int]={
      for (elem<-array) yield op(elem)
    }
    def addOne(elem:Int):Int={
      elem+1
    }
//    调用函数测试
    val newArray:Array[Int] = arrayOperation(arr,addOne)
    println(newArray.mkString(","))
  }
}
1.4.2.2 匿名函数

匿名函数:没有名字的函数就是匿名函数。

(x: Int) => {函数体}  # 其中x代表输入参数,Int代表输入参数类型,函数体为具体代码逻辑

* 匿名函数的至简原则
   * 1.参数的类型可以省略,会根据形参进行自动的推导
   * 2.类型省略之后,发现只有一个参数,则圆括号可以省略。其他情况:没有参数或者参数超过1 的永远不能省略圆括号
   * 3.匿名函数如果只有一行,则大括号也可以省略
   * 4.如果参数只出现一次,则参数省略且后面参数可以用_代替

object Test_fun_niming_02 {

  def main(args: Array[String]): Unit = {

    def dualFunctionOneAndTwo(fun:(Int,Int)=>Int):Int = {
      fun(1,2)
    }

    val add = (a:Int,b:Int) => a+b
    val minus = (a:Int,b:Int) => a-b

//    匿名函数至简原则
    println(dualFunctionOneAndTwo(add))
    println(dualFunctionOneAndTwo((a,b)=> a+b))
    println(dualFunctionOneAndTwo( _ + _ ))
  }

}
1.4.2.3 函数柯里化&闭包

闭包:函数式编程的标配

闭包:如果一个函数,访问到了它的外部变量的值,那么这个函数和他所处的环境,称为闭包。

函数柯里化:把一个参数列表的多个参数,变成多个参数列表。

    def addCurrying(a:Int)(b:Int):Int={
      a+b
    }
1.4.2.3 递归函数
1.4.2.4 控制抽象
1.4.2.5 惰性函数

1.5 面向对象

1.6 集合

1.7 模式匹配

  • 33
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值