《scala函数式编程》之函数入门

本文深入探讨Scala中的函数特性,包括参数列表、返回值类型、递归函数、变长参数及异常处理等内容。通过具体示例介绍了如何定义和使用不同类型的函数。

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

参看博客:https://www.cnblogs.com/spring87/p/4947871.htmlhttps://www.cnblogs.com/spring87/p/4947871.html
package lyzx.com.basic.day01

class T2 {

  /**
    * name和age是参数列表
    * f1是函数名
    * 参数列表的括号后的String表示返回值
    * @param name
    * @param age
    * @return
    */
  def f1(name:String,age:Int):String ={
    if(age >= 18)
      name+",你"+age+"岁了,是一个成年人了"
    else
      name+",你才是一个"+age+"岁的小屁孩"
  }


  /**
    * 返回值可以省略不写
    * @param info
    * @return
    */
  def f2(info:String)={
    "你好,"+info
  }

  /**
    * 如果是递归函数则必须手动指定返回值类型
    * @param init
    * @return
    */
  def f3(init:Int): Int ={
    if(init <= 1)
      1
    else
      init * f3(init-1)
  }

  /**
    *带有默认值的函数
    */
  def f4(first:String="lady",second:String="gaga"):String ={
      first+","+second
  }

  //*代表可变参
  def f5(args:Int*):Int ={
    println(args.getClass.getName)
    var sum = 0
    for(item <- args){
      sum += item
    }
    sum
  }


  /**
    * 但是在调用变长参数函数时,并不能直接使用Seq类型的参数。要将一个Seq类型打散成单个的参数序列,使用 : _*
    * @param args
    * @return
    */
  def f6(args:Int*):Int ={
    if(args.length == 0 ) 1
    else
      args.head * f6(args.tail:_*)
  }

  //没有返回值的函数就是过程,通常调用过程只是为了副作用例如只是为了改变某个集合里面的值
  def f7(procedure:String){
    println("hello,"+procedure+" i am a procedure")
  }

  //使用lazy 实现懒加载
  def f8(): Unit ={
    lazy val f =   123

    println(f)
  }

  //Scala中异常机制与Java和C++中一样。但Scala中并没有受检异常,也就是不需要说明函数方法可能会抛出什么异常。
  //使用throw来抛出一个异常。throw表达式的类型是Nothing。
  def f9(): Unit ={
    try{
//      new URL("https://www.baidu.com/fred-tiny.gif")
      println("程序开始")
      val r = 10 /0
      println("程序结束")
    }catch {
      case _ : MalformedURLException =>{
        println("错误的url")
      }

      case ex: IOException => {
        println("io异常")
        ex.printStackTrace()
      }

      case ex1:Exception=>{
        println("未知异常:::")
        ex1.printStackTrace()
      }
    }
  }
}

object T2{

  def main(args: Array[String]): Unit = {
    val t = new T2

//    println(t.f1("lyh",2))
//    println(t.f2("索尔"))
//
//    println(t.f3(5))
//
//    println(t.f4("lyh"))
//
//    //调用时可以不按照函数定义时的参数顺序
//    println(t.f4(second = "yaohui",first = "li"))
//
//    println(t.f5(1,2,3,4,5))
//
//    println(t.f6(1,2,3,4,5))
//
//    //1 to 10 => 通过:_*  将集合其转换为序列
//    println(t.f6(1 to 10 :_*))
//
//    t.f7("过程")

    println("=================================================")
    t.f8()
    t.f9()
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值