scala入门(一)

scala入门(一)

数据类型 变量名;
数据类型 变量名 = 初始化值;
scala 定义变量
var 变量名 = 初始化值
var 变量名:数据类型=初始化值
var a=1
定义变量的时候需要初始化值
定义变量的时候可以不指定变量的数据类型,系统会根据变量的初始化值推断变量的数据类型
scala定义常量
val 变量 =初始化值
val 变量:数据类型=初始化值
val修饰的变量,相当于java中final修饰的变量
val 修饰的变量,变量的类型的值类型(相当于java的基本数据类型,Int DOUBLE);值是不可以修改的

  var a=10
  a=100//不可以
  val修饰的变量,变量的类型是引用类型,引用不可变,引用的内容可变
  val a1=Array(1,2,3)
  val a2=Array(4,5,6)
  a1=a2//不可以,引用不可变
  a1(0)=10 //可以,引用内容可变
  val的变量还可以用lazy修饰,值在需要获取或使用的时候赋值
  lazy val a =100
  
 

val ? var
官方推荐使用val
数据类型和操作符
数据类型
值类型和引用类型
值类型是类类型,相当于java的包装类,没有基本数据类型和包装类之分

操作符

数学运算符:±/* %
关系运算符:>>=<<=!
逻辑运算符:&&||
位运算符:&|^
比较对象:== !=
(1)scala中的运算符都是方法的重载,是方法的调用
(2)scala中没有++ --运算符,可以用+= -=来代替

表达式

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

特点

(1)表达式是有返回值得

(2)返回值是表达式中最后一条语句的执行结果、

条件表达式

含有if/else的语句块

scala> val res = if(a>0) "success" else -100
res: Any = success
scala> val res = if(a>0) "success" else "wqe"
res: String = success
//缺失else的表达式
scala> val res = if(a>0) 100
res: AnyVal = 100
scala> val res = if(a<0) 100
res: AnyVal = ()//unit类型
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 = ()
块表达式

{一条或多条语句}

scala> val res ={val a=10
     | var b =20
     | a+b
     | }
res: Int = 30
scala> val res ={var a=10
     | a =20 }
scala> println(res)
()
scala> val res ={println("asd")}
asd
scala> println(res)
()
循环语句

for:

for(i <- 表达式、数组、集合)
scala> for(i <- 1 to 10){println(i)}
1
2
3
4
5
6
7
8
9
10

scala> for(i <- 1 to 10)println(i)
1
2
3
4
5
6
7
8
9
10

scala> for(i <- 1 until 10)println(i)
1
2
3
4
5
6
7
8
9

scala> 1 to 10
res5: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> 1 until 10
res6: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
scala> for(i <- 0 until s.length)println(s(i))
s
c
a
l
a
scala> for(i <-  s)println(i)
s
c
a
l
a
scala> for(i <- 0 until s.length)println(s.charAt(i))
s
c
a
l
a
scala> for (i <- 1 to 3;j <- 1 to 3 if(i!=j))println(10*i+j)
12
13
21
23                                                                   
31
32
scala> var res=for (i <- 1 to 10 )yield i*10
res: scala.collection.immutable.IndexedSeq[Int] = Vector(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
scala> for (i <- 1 to 3){
     | if(i==3){
     | println(3)}
     | for (j <- 1 to 3){
     | if(i != j ){
     | println(i*10+j)}
     | }
     | }
12
13
21
23
3
31
32

while

while(条件语句){表达式}
scala> var i =1
i: Int = 1
scala> while(i < 3){println(i)
     | i+=1
     | }
1
2

do while

do {表达式}while{条件语句}
方法

定义语法

def 方法名 (参数列表): 返回类型(可省略,递归不可省略) = 方法体(表达式)

返回类型在方法是递归方法的时候,一定要指明,其他情况,可以省略

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

scala> add(1,2)
res1: Int = 3

scala> add(x=1,y=2)
res2: Int = 3

scala> var c = add(x=2,y=8)
c: Int = 10

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

scala> add(1,2)
3

带有参数列表的方法

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

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

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

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

scala> addAndMultiply(3)(4)(5)
<console>:9: error: not enough arguments for method addAndMultiply: (x: Int, y: Int, z: Int)Int.
Unspecified value parameters y, z.
              addAndMultiply(3)(4)(5)
                            ^

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

scala> addAndMultiply(3)(4)(5)
res6: Int = 35

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

scala> addAndMultiply(3,4,5)
res7: Int = 35

​ 无参方法

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

scala> printInfo
i love scala

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

scala> printInfo
i love scala

scala> printInfo()
i love scala

带有默认值参数的方法

scala> def printInfo(str:String="helo scala")=println(str)
printInfo: (str: String)Unit

scala> printInfo("asdsa")
asdsa

scala> printInfo()
helo scala
scala> def add(x: Int=1,y:Int,z:Int=3)=println("x="+x,"y="+y,"z="+z)
add: (x: Int, y: Int, z: Int)Unit

scala> add(1)
<console>:9: error: not enough arguments for method add: (x: Int, y: Int, z: Int)Unit.
Unspecified value parameter y.
              add(1)
                 ^

scala> add(1,2)
(x=1,y=2,z=3)

scala> add(2,2,2)
(x=2,y=2,z=2)

scala> add(y=2)
(x=1,y=2,z=3)

可变长参数方法

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

scala> add(1)
WrappedArray(1)

scala> add(1,2)
WrappedArray(1, 2)
WrappedArray(1, 2)
scala> def add(a:Int*)={
     | for(i <- a)
     | println(a(i-1))}
add: (a: Int*)Unit

scala> add(1)
1

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

scala>
函数

scala> (x:Int,y:Int)=>x+y
res18: (Int, Int) => Int = <function2>
scala> res18(1,2)
res22: Int = 3

scala> val fun = (x:Int,y:Int)=>x+y
fun: (Int, Int) => Int = <function2>

scala> fun(1,2)
res23: Int = 3
scala> val fun=((x:Int,y:Int)=>x+y)
fun: (Int, Int) => Int = <function2>

scala> val fun=(_:Int)+(_:Int)
fun: (Int, Int) => Int = <function2>
scala> val fun:(Int,Int)=>Int=(_+_)
fun: (Int, Int) => Int = <function2>

scala> val fun:(Int,Int)=Int=(x,y)=>x+y
<console>:7: error: reassignment to val
       val fun:(Int,Int)=Int=(x,y)=>x+y
                            ^

scala> val fun:(Int,Int)=>Int=(x,y)=>x+y
fun: (Int, Int) => Int = <function2>

scala> val fun =new Function2[Int,Int,Int]{
     | def apply (x:Int,y:Int)=if(x<y)x else y
     | }
fun: (Int, Int) => Int = <function2>

scala> fun(1,2)
res25: Int = 1

scala> val fun =(x:Int,y:Int)=>if(x<y) x else y
fun: (Int, Int) => Int = <function2>

scala> fun (1,2)
res26: Int = 1

无参函数

scala> val fun1 = () =>println("java and scala")
fun1: () => Unit = <function0>

scala> fun1()
java and scala

scala> fun1
res28: () => Unit = <function0>

多参函数

scala> val fun2=(x:Int,y:Int) => x*y
fun2: (Int, Int) => Int = <function2>

scala> fun2(2,3)
res31: Int = 6

scala> fun2(x=2,y=3)
<console>:9: error: not found: value x
              fun2(x=2,y=3)
函数与方法的区别于联系

区别:

1.方法和函数定义的语法不同

2.方法一般定义在类,特质,或者object中

3.方法可以共享所在类、特质、或者object中的属性

4,可以调用函数,也可以存在到一个变量中,作为参数传递给其他的方法或者函数,也可以作为返回值

联系:

1.可以把函数作为参数传递给方法

scala> def m(f:(Int,Int)=>Int)=f(5,1)
m: (f: (Int, Int) => Int)Int

scala> val f =(x:Int,y:Int)=>x-y
f: (Int, Int) => Int = <function2>

scala> m(f)
res36: Int = 4

2.方法可以转换成函数

a,把一个方法作为参数传递给其他方法或函数

b,使用方法名加空格加下划线把方法显示的转换成函数

scala> def m2(x:Int,y:Int) = x-y
m2: (x: Int, y: Int)Int

scala> m(m2)
res37: Int = 4

scala> m(m2 _)
res38: Int = 4

scala>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值