Scala

本文详细介绍了Scala编程的基础,包括定义变量、常量、数据类型和操作符,深入探讨了表达式、循环、方法和函数的定义。此外,还涵盖了类和面向对象编程,如特质、样例类、模式匹配以及高级特性如闭包、柯里化和隐式转换。文章最后讨论了Scala中的Actor模型,展示了其在并行计算中的应用。
摘要由CSDN通过智能技术生成

Scala

1 定义变量

var 变量名 = 初始化值

var 变量名:数据类型 = 初始化值

注意:

  1. 自定义变量的时候需要初始化

  2. 定义变量的时候不可以指定变量的数据类型,系统会根据变量的初始化值推断变量的数据类型

2 定义常量

val 常量名 = 初始值

val 常量名:数据类型 = 初始值

注意:

  1. val 修饰的变量,相当于Java中的final修饰的变量

  2. val 修饰的变量,变量的类型的值类型 ,不可修改

  3. val 修饰的变量,变量的类型是引用类型,引用不可变,引用的内容可变

    val a1 = Array(1,2,3) 
    val a2 = Array(4,5,6)
    a1 = a2 //不可的,引用不会变
    a1(0) = 10 //可以,引用的内容可变
    
  4. val 修饰的变量,还可以用lazy修饰,需要在使用的时候赋值

3 数据类型和操作符

3.1 数据类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LmOrgt3E-1572950512549)(C:\Users\飞扬\AppData\Roaming\Typora\typora-user-images\1570091212665.png)]

  1. 值类型(Java中的基本数据类型)和引用类型
  2. 值类型是类类型,相当于java中的包装类,没有基本数据类型和包装类之分
scala> 1 to 10
res1: scala.collection.immutable.Range.Inclusive = Range 1 to 10

scala> 1.to(10)
res2: scala.collection.immutable.Range.Inclusive = Range 1 to 10

3.2 操作符

  1. 数学运算符

    + - * / %
    
  2. 关系运算符

    > >= < <= !
    
  3. 逻辑运算符

    $$ ||
    
  4. 位运算符

    $ ^ |
    
  5. 比较运算符

    == !=
    
  • scala 中的运算符都是方法地 重载,是方法的调用

    scala> 1+1
    res3: Int = 2
    
    scala> 1.+(2)
    res4: Int = 3
    
  • scala中没有++ – 运算符,可以用+= -= 代替

4 表达式

​ 就是一个语句块,包含一条或者多条语句

特点:

  1. 表达式是有返回值的
  2. 返回值是表达式中 最后一条语句的执行结果

4.1 条件表达式

if… else语句

scala> val a =1
a: Int = 1
     
scala> val res = if(a>0) 100 else -100
res: Int = 100

scala> val res = if(a>0) "success" else 100
res: Any = success

scala> val res = if (a>0) 100
res: AnyVal = 100                 

scala> val res = if(a<0) 100
res: AnyVal = ()

scala> val res = if(a>0) 100 else if(a<0)-100 else 0
res: Int = 100

scala> val res = if (a<0) 100 else ()
res: AnyVal = ()

4.2 块表达式

{一条或多条语句}

scala> val res = {10}
res: Int = 10

scala> val res = {val a =10
     | val b = 10
     | a+b}
res: Int = 20

scala> val res = {var a = 10
     | a = 20 }

scala> println(res)
()

scala> val res = {println("aaa")}
aaa

scala> println(res)
()

5 循环

5.1 for循环

for循环的语法:

for(i<- 表达式、数组、集合)
scala> for(i <- 1 to 10){print(i+" ")}
1 2 3 4 5 6 7 8 9 10
scala> for(i <- 1 until 10){print(i+" ")}
1 2 3 4 5 6 7 8 9
scala> val s = "scala"
s: String = scala

scala> for(i<- 0 until s.length)print(i+" ")
0 1 2 3 4
scala> for(i<- 0 until s.length)print(s(i)+" ")
s c a l a
scala> for(i<- s)print(i+" ")
s c a l a
scala> for (i <-  1 to 3;j <- 1 to 3 if (i != j))print(10*i+j+" ")
12 13 21 23 31 32
scala> val res = for(a<- 1 to 10 ) yield a* 10
res: scala.collection.immutable.IndexedSeq[Int] = Vector(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)

5.2 while循环

while 循环的语法:

whilee(条件语句){表达式}

5.3 do while循环

do while循环语法:

do{表达式}while (条件语句)

6 方法

定义语法:

def 方法名 (参数列表):返回类型  = 方法体 
返回类型可以省略,但如果该方法是递归类型则不能省略 
scala> def add(x:Int,y:Int) = x+y
add: (x: Int, y: Int)Int

scala> def add(x:Int,y:Int):Int = x+y
add: (x: Int, y: Int)Int

scala> add(2,5)
res23: Int = 7

scala> def add(x:Int,y:Int):String={x+y
     | println(x+y)}
<console>:12: error: type mismatch;
 found   : Unit
 required: String
       println(x+y)}
              ^

scala> def add(x:Int,y:Int):Unit={x+y
     | println(x+y)}
add: (x: Int, y: Int)Unit

scala> add (2,3)
5

6.1 带有参数列表的方法


scala> def addAndMultiply(x:Int,y:Int,z:Int) = (z+y)*x
addAndMultiply: (x: Int, y: Int, z: Int)Int

scala> def addAndMultiply(x:Int)(y:Int)(z:Int) = (z+y)*x
addAndMultiply: (x: Int)(y: Int)(z: Int)Int

scala> add
add   addAndMultiply

scala> addAndMultiply(1)(3)(3)
res25: Int = 6

6.2 无参方法

scala> def printInfo = println("I love you")
printInfo: Unit
scala> printInfo
I love you
scala> printInfo()
<console>:13: error: Unit does not take parameters
       printInfo()
scala>  def printlnfor1() = println("i love you")
printlnfor1: ()Unit
scala> printlnfor1()
i love you

scala> printlnfor1
i love you

6.3 带有默认参数的方法

scala> def printInfo = println("I love you")
printInfo: Unit

scala> print
print   printInfo   printf   println

scala> printInfo
I love you

scala> printInfo()

scala> def printInfo(Str:String= "hello Scala")
     | = println(str)
<console>:12: error: not found: value str
       = println(str)
                 ^

scala> def printInfo(Str:String= "hello Scala")
     | = println(Str)
printInfo: (Str: String)Unit

scala> printInfo()
hello Scala

scala> printInfo("i love scala")
i love scala

scala> def add(a:Int = 1 ,b:Int,c:Int = 3)= println("a="+a+"b+"+b+"c="+c)
add: (a: Int, b: Int, c: Int)Unit

scala> add(2)
<console>:13: error: not enough arguments for method add: (a: Int, b: Int, c: Int)Unit.
Unspecified value parameter b.
       add(2)
          ^

scala> add(1,2)
a=1b+2c=3

6.4 可变长参数方法

scala> def add(a:Int*)={}
add: (a: Int*)Unit

scala> def add(a:Int*)={
     | for(i <- a)
     | print(a+" ")}
add: (a: Int*)Unit

scala> add(1)
WrappedArray(1)
scala> add(5)
WrappedArray(5)
scala> add(1,2,3,4)
WrappedArray(1, 2, 3, 4) WrappedArray(1, 2, 3, 4) WrappedArray(1, 2, 3, 4) WrappedArray(1, 2, 3, 4)

6.5 方法的嵌套和多态

方法的嵌套:方法体中定义其他的方法

方法的多态:方法可以通过类型实现参数化,类似泛型

import sun.security.util.Length

object methodDemo extends  App {
  //阶乘
  def fatorial(x:Int):Int={
    def fact(x:Int,accumlator:Int):Int ={
      if (x<=1)accumlator
      else fact(x-1,x*accumlator)
    }
    fact(x,accumlator = 1)
  }
println("factorial of 5:"+fatorial((5)))
  def listOfDuplicates[A](x:A,length:Int):List[A]={
    if (length<1)
      Nil
    else
      x::listOfDuplicates(x,length-1)
  }
  println(listOfDuplicates(3,6))
}

7 函数的定义

scala> (x:Int,y:Int) => x+y
res40: (Int, Int) => Int = $$Lambda$1396/1305033560@7914c299 
scala> val fun=((x:Int,y:Int)=>x+y)
fun: (Int, Int) => Int = $$Lambda$1406/1080343347@4c890e2c

scala> val fun=(_:Int)+(_:Int)
fun: (Int, Int) => Int = $$Lambda$1408/715523797@39225e7c

scala> val fun:(Int,Int) => Int = (_+_)
fun: (Int, Int) => Int = $$Lambda$1409/904306267@2ffccbae

scala> val fun:(Int,Int)=>Int=(x,y)=>x+y
fun: (Int, Int) => Int = $$Lambda$1410/1456405574@4e352a0e

7.1 无参函数

  1. 小括号不能省略
  2. 调用时必须写小括号

scala> val fun1 = () => println("haha")
fun1: () => Unit = $$Lambda$1411/1675206863@16b6200

scala> fun1
res46: () &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值