scala类,循环,8种方法函数

本文详细介绍了Scala编程中的类和对象,包括规则、构造方法和伴生类的概念。在循环部分,讲解了if-else、for和do-while的用法。接着探讨了方法定义的各种规则,如递归、默认参数、可变长参数、匿名函数、嵌套方法、偏应用函数以及高阶和柯里化函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scala类,循环,8种方法函数

类和对象

规则:

1 Scala object相当与Java中的单例,object中定义的全是变量,因此执行时先被加载执行

2 Scala中定义变量使用var,定义常量使用val,变量和常量类型可以省略不写,会自动推断

3 Scala中每行后都会有分号自动推断机制,不需要显式写出 “;”

4 建议在Scala中使用驼峰命名法

5 Scala类中可以传参,传参一定要指定类型,有了参数就有了默认构造,类中的属性默认有getter和setter方法

6 类中重写构造时,构造中第一行必须先调用默认的构造,def this(…)(…)

7 Scala中当new class时,类中除了方法不执行(除了构造方法)没其他都执行

8 在同一个Scala文件中,class每次和object名称一样时,这个类叫这个对象的伴生类,这个对象叫做这个类的伴生对象,他们之间可以相互访问

循环

if-else

​ 和java用法一样

for

​ 几种常见用法

  /**
   *for  循环
   */
   
//    var r = 1 to 10
//    var r1 = 1 to 10
//    for (i <- 1 until 10){
//      for (j <- 1 until 10){
//        if(i >= j){
//          print(i+"*"+j+"="+i*j+"\t")
//        }
//        if (i ==j ){
//          println()
//        }
//      }
//    }

//    for (i <- 1 until 10;j <- 1 until 10){
//        if(i >= j){
//          print(i+"*"+j+"="+i*j+"\t")
//        }
//        if (i ==j ){
//          println()
//        }
//    }

//    for(i <- 1 to 1000;if(i>500);if(i%2 == 0)){
//      println(i)
//    }

//    for(i <- 1 to 1000 if(i>500) if(i%2 == 0)){
//      println(i)
//    }

    //将数据放在集合中  Vector
//    val a = for(i <- 1 to 100;if(i>50);if(i%2 == 0)) yield i
//      println(a)

do-while

/**
  * while
  * do-while  循环
  */
  
var i = 0
while (i<100){
  println(s"第 $i 次执行。。。")
  i += 1
}

do {
  println(s"第 $i 次执行。。。")
  i += 1
}while(i<100)

方法定义

规则:

1 方法体中最后返回值可以使用return,如果使用return,那么方法体的返回值类型一定要指定

2 如果方法体中没有return,默认将方法体中最后一行计算的结果当做返回值返回,方法体的返回值类型可以省略,会自动推断返回值的类型

3 定义方法传入的参数一定要指定类型

4 方法的方法体如果可以一行ko,那么方法体的“{…}”逻辑关系产生的{},可以省略

5 如果定义方法时,省略了方法名称和方法体之间的“=”,那么无论方法体最后一行计算的结果是什么,都过会被丢弃,返回Unit

def main(args: Array[String]): Unit = {
  def max(a:Int,b:Int):Int={
    if(a>b){
      return a
    }else{
      return b
    }
  }
  val c : Int = max(2,3)
  println(c)

  def max(a:Int,b:Int):Int = if(a>b) a else b
  val d : Int = max(2,3)
  println(d)
}

递归方法

​ 递归方法要显式声明函数的返回值类型

/**
  * 递归方法
  */
def fun(num:Int):Int={
  if (num == 1){
    1
  }else{
    num*fun(num-1)
  }
}
println(fun(num = 5))

参数有默认值的方法

​ 想使用默认值就忽略,不行使用就调用时赋值

/**
  * 参数有默认值的方法
  */
def fun(a:Int=10,b:Int=20)={
  a+b
}
println(fun(b=200))

可变长参数的方法

​ 定义数据类型后加 *

   /**
      * 可变长参数的方法
      * 定义数据类型后加 *
      */
    def fun(s:String*)={
//        for(elem<-s){
//          println(elem)
//      }

      // =>前是匿名函数
     // s.foreach(elem => {println(elem)})
     
     //简化版匿名函数
     //s.foreach(println(_))
     s.foreach(println)
    }
    fun("a","b","dfdf")

//传任意类型用 Any*

匿名函数

​ => 就是匿名函数,多用于方法中

​ 匿名函数在遍历中如果只使用一次,匿名函数内部的别名则可以用 _ 表示(详述看上例)

  /**
    *匿名函数
    */
  def fun=(a:Int,b:Int)=>{
    a+b
  }

}

嵌套方法

/**
  * 嵌套方法
  */
def fun(num:Int)={
  def fun1(a:Int):Int={
    if (a==1){
      1
    }else{
      a*fun1(a-1)
    }
  }
  fun1(num)
}
println(fun(num = 5))

偏应用函数

​ 某些情况下,方法中参数非常多,调用这个方法非常频繁,每次调用只有固定的某个参数变化,其他的都不变,可以定义偏应用函数来实现,进而达到简化代码目的

/**
  * 偏应用函数
  */
def showLog(date:Date,log:String)={
  println(s"date is $date , log is $log")
}
val date = new Date()
showLog(date,log = "a")
showLog(date,log = "b")
showLog(date,log = "c")

def fun= showLog(date,_:String)
fun("aaa")
fun("bbb")
fun("ccc")

高阶函数

/**
  * 高阶函数
  * 1 方法的参数是函数
  * 2 方法的返回是函数			必须显式的声明返回函数类型(2-1),加_不用显式(2-2)
  * 3 方法的参数和返回都是函数
  */
  
//方法的参数是函数
//1-1 
def fun(a:Int,b:Int):Int = {
  a+b
}
def fun1(f:(Int,Int)=>Int,s:String):String = {
  val i :Int = f(100,200)
  i + "#" +s
}
val result = fun1(fun,"scala")
println(result)

//1-2
def fun3(f:(Int,Int)=>Int,s:String):String = {
  val i :Int = f(100,200)
  i + "#" +s
}
val result2 = fun3((a:Int,b:Int)=>{a*b},"scala")
println(result2)


    //方法的返回是函数
	//2-1
//    def fun(s:String):(String,String)=>String = {
//      def fun1(s1:String,s2:String):String = {
//        s1+"----"+s2+"~~~"+s
//      }
//      fun1
//    }
	
	//2-2
    def fun(s:String)= {
      def fun1(s1:String,s2:String):String = {
        s1+"----"+s2+"~~~"+s
      }
      fun1 _
    }
    println(fun("a")("b","c"))
    
    
    //方法的参数和返回都是函数
//    def fun(f:(Int,Int)=>Int):(String,String)=>String = {
//      val i :Int = f(1,2)
//      def fun1(s1:String,s2:String):String = {
//        s1+"---"+s2+"---"+i
//      }
//      fun1
//    }
//    println(fun((a,b)=>{a+b})("a","b"))

柯里化函数

/**
  * 柯里化函数
  */
def fun(a:Int,b:Int)(c:Int,d:Int)={
  a+b+c+d
}
println(fun(1,2)(3,4))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值