scala基础

发布于:2025-03-30 ⋅ 阅读:(34) ⋅ 点赞:(0)

变量的定义

强类型语言:Java

int num=10;

char ch=”a”;

Double num2=11.11;

 

弱类型语言:JS、Scala

var x=111;

var y=11.11;

var z=”hello”;

 

val f=58;

var定义变量;val定义常量

 

object VariableTest {

 def main(args: Array[String]) {

   //使用val定义的变量值是不可变的,相当于java里用final修饰的变量

   val i = 1

   //使用var定义的变量是可变的,在Scala中鼓励使用val

   var s = "hello"

   //Scala编译器会自动推断变量的类型,必要的时候可以指定类型

   //变量名在前,类型在后

   val str: String = "world"

 }

条件表达式

If

If else(单分支)

If   else if  else(多分支)

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

   val x = 1

   //判断x的值,将结果赋给y

   val y = if (x > 0) 1 else -1

   //打印y的值

   println("y=" + y)

 //支持混合类型表达式

   val z = if (x > 1) 1 else "error"

   //打印z的值

   println("z=" + z)

   //如果缺失else,相当于if (x > 2) 1 else ()

   val m = if (x > 2) 1

   println("m=" + m)

//在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void

   val n = if (x > 2) 1 else ()

   println("n=" + n)

scala> val y = if(1>1) 1 else "error"

y: Any = error

当y的值类型既可能为Int又可能为String时,它的类型被定义为Any,是Int和String的父类。

scala> val y = if(x>1) 1

y: AnyVal = ()

没有else时,会默认为else (),

y的类型被定义为AnyVal

 

类型的转换

val num = "11"

val num_int = num.toInt

println(num_int+22)

 

块表达式

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

   val x = 0

   val result = {

     if(x < 0)

       1

     else if(x >= 1)

       -1

     else

       "error"

   }

   println(result)

}

 

for循环

scala>for (i <- 1 to 10) println(i)

打印1到10

scala> 1 to 10

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

scala>for (i <- 1 until 10) println(i)

打印1到9

//包含开头不包含结尾

scala> 1 until 10

res0: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)

 

遍历字符串:

相当于java中的fore

scala> val str = "hello"

str: String = hello

scala> for(c <- str) println(c)

h

e

l

l

通过下标遍历字符串:

scala> for (i <- 0 until str.length) println(str.charAt(i))

h

e

l

l

o

遍历数组:

scala> val arr = Array(1,2,3,4,5,6)

arr: Array[Int] = Array(1, 2, 3, 4, 5, 6)

scala> for(a <- arr) println(a)

1

2

3

4

5

6

通过下标遍历数组:

scala> for(i <- 0 until arr.length) println(arr(i))

1

2

3

4

5

6

while循环

while循环:基本语义与Java相同。

var n = 10

while(n > 0) { 

println(n)

n -= 1

}

 

do while循环

至少被执行一次。

var n =1

do{

 println(n)

 n+=2

}while(n<10)

方法的定义

定义一个m方法:

scala> def m(x : Int,y : Int):Int = { x + y }

m: (x: Int, y: Int)Int

 

scala> m(10,20)

res14: Int = 30

   

可以不写返回值类型,会自动将方法体的最后一行作为返回值,并推导出其类型。

但是递归方法一定要写返回值类型。

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

add: (x: Int, y: Int)Int

scala> add(20,20)

res16: Int = 40

 

如果显示的指明了没有返回值,即使方法体的最后一行有返回值,也不会有值返回。

def func1(x:Int,y:Int):Unit = {

  x+y

}

 

定义无参的方法:

scala> def sayHi(){println("Hi~")}

sayHi: ()Unit

方法名 参数 返回值类型

scala> sayHi()

Hi~

scala> sayHi

Hi~

 

无返回值的三种定义方法:

scala> def sayHi():Unit = {println("Hi~")}

sayHi: ()Unit

可以不用写Unit 

scala> def sayHi() = {println("Hi~")}

sayHi: ()Unit

可以不写=

scala> def sayHi(){println("Hi~")}

sayHi: ()Unit

 

如果方法中没有参数的话。那么小括号是可以省略的,但是调用的时候,不能加括号了

def m = println("hello world!")

 

变长参数:

在Scala中,有时我们需要将方法定义为参数个数可变的形式,则此时可以使

用变长参数定义方法。

def sum(nums: Int*) = {

var res = 0

for (num <- nums)

​res += num 

res

}

sum(1, 2, 3, 4, 5)

函数的定义

函数里的参数最多只能放22个。要使用更多的话,可以使用变长参数。

scala> val f1 = (x:Int,y:Int) => x+y

f1: (Int, Int) => Int = <function2>

scala> f1(10,10)

res19: Int = 20

 

匿名函数:

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

res20: (Int, Int) => Int = <function2>

匿名函数用的最多的就是直接放在方法里面

 

无参函数

scala> () => 2

res12: () => Int = <function0>

 

定义函数的方式:

scala> val f1 = (x:Int,y:Int) => x+y  // =>左边是参数,右边是函数体

f1: (Int, Int) => Int = <function2>

 

 

scala> val f2:(Int,Int) => Int = {(x,y) => x+y} //参数类型,返回值类型,参数,函数体

f2: (Int, Int) => Int = <function2>

 

一个参数的函数

scala> val f1 : Int => Double = { x => x.toDouble }

f1: Int => Double = <function1>

 

scala> val f2 = (x:Int) => x.toDouble

f2: Int => Double = <function1>

 

空参函数

scala> val f1 = () => println("hello")

f1: () => Unit = <function0>

scala> f1()

hello

函数的说明

scala> val f = (x:Int) => x*x

f: Int => Int = <function1>

 

scala> f(5)

res22: Int = 25

 

scala> val arr = Array(1,2,3,4,5,6)

arr: Array[Int] = Array(1, 2, 3, 4, 5, 6)

 

scala> arr.map(f)

res23: Array[Int] = Array(1, 4, 9, 16, 25, 36)

 

传入匿名函数:

scala> arr.map((x : Int) => x*x)

res24: Array[Int] = Array(1, 4, 9, 16, 25, 36)

简单的函数:

scala> arr.map(x => x*x)

res25: Array[Int] = Array(1, 4, 9, 16, 25, 36)

更简单的函数:

scala> arr.map(_ * 10)

res26: Array[Int] = Array(10, 20, 30, 40, 50, 60)

 

求奇数

scala> val f = (x:Int) => x%2!=0

f: Int => Boolean = <function1>

scala> arr.filter(f)

res27: Array[Int] = Array(1, 3, 5)

简单的:

scala> arr.filter(x => x%2!=0)

res28: Array[Int] = Array(1, 3, 5)

更简单的:

scala> arr.filter(_%2!=0)

res29: Array[Int] = Array(1, 3, 5)

 

object HelloScala {

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

   val arr = Array(1,2,3,4,5,6)

   val r = arr.map(x => x*x)

   println(r.toBuffer)

 }

}

 

 


网站公告

今日签到

点亮在社区的每一天
去签到