首页 > 其他分享 >02-Scala基础

02-Scala基础

时间:2024-07-24 15:52:52浏览次数:13  
标签:02 String val Scala Int 基础 println 返回值 def

2.1. 类型系统

2.2. 控制结构与函数

2.2.1. 条件表达式

  1. if/else语句可以返回一个值,但不用写return关键字
object CH_0201_ConditionalExpression {

  def main(args: Array[String]): Unit = {
    //if/else语句可以返回一个值,但不用写return关键字
    val x = 10
    val value = if (x > 10) 1 else 0
    println(value)
  }
}
  1. 返回值可以是不同的类型,但可以他们都有共同的父类Any
object CH_0201_ConditionalExpression {

  def main(args: Array[String]): Unit = {
    //返回值可以是不同的类型,但可以他们都有共同的父类Any
    val x = 10
    val value = if (x >= 10) "great" else 0
    println(value)
  }
}
  1. 如果没有返回值,则用()代替
object CH_0201_ConditionalExpression {

  def main(args: Array[String]): Unit = {
    //如果没有返回值,则用()代替
    val x = 10
    val value = if (x > 10) "great" else ()
    println(value)
  }
}

2.2.2. 块表达式与赋值语句

  1. 块表达式形式上表现为由{}包含的一系列表达式,块表达式的返回值是最后一个子表达式
object CH_0202_BlockExpressionAndAssignment {

  def main(args: Array[String]): Unit = {
    val x =10
    val x0 = 2
    val y = 5
    val y0 = 3
    val distance = {
      val dx = x - x0
      val dy = y - y0
      //块表达式的返回值是最后一个表达式,且没有return语句
      sqrt(dx * dx + dy * dy)
    }
    println(distance)
  }

}
  1. 块表达式的中的最后一个表达式若是一个赋值语句,则表示该块表达式没有返回值,Scala中没有返回值用Unit表示
object CH_0202_BlockExpressionAndAssignment {

  def main(args: Array[String]): Unit = {
    val x =10
    val x0 = 2
    val y = 5
    val y0 = 3
    //块表达式的中的最后一个表达式若是一个赋值语句,则表示该块表达式没有返回值,Scala中没有返回值用Unit表示
    val distance = {
      val dx = x - x0
      val dy = y - y0
    }
    println(distance)
  }
}

2.2.3. 循环

  1. while循环
object CH_02003_Loop {
  def main(args: Array[String]): Unit = {
    //while
    var n = 0
    while(n < 10){
      print(s"$n")
      n += 1
    }
  }
}
  1. for循环基本形式
object CH_02003_Loop {
  def main(args: Array[String]): Unit = {
    //for循环的基本形式
    var str = "Hello"
    for(i <- 0 to str.length - 1){
      println(str(i))
    }
  }
}
  1. 嵌套循环
object CH_02003_Loop {
  def main(args: Array[String]): Unit = {
    //嵌套循环
    for(i <- 1 to 9; j <- 1 to 9 if(i >= j)){
        print(s"$i * $j = ${i * j} ")
        if(i == j) {
          println()
        }
    }
  }
}
  1. yield转换
object CH_02003_Loop {
  def main(args: Array[String]): Unit = {
    //yield转换:收集集合中的元素并生成一个集合
    val value = for (i <- 1 to 10 if i % 2 == 0) yield i
    println(value)
  }
}

2.2.4. 函数

  1. 定义一个函数:参数类型需要指定值,且只要不是递归函数,需要为函数指定返回值类型
object CH_0204_Functions {

  def main(args: Array[String]): Unit = {
    val a = abs(-20)
    println(a)
  }

  //定义一个函数:参数类型需要指定值,且只要不是递归函数,需要为函数指定返回值类型
  def abs(x:Double)= if (x >= 0) x else -x
}
  1. 如果有多个表达式,则将其包含在{}内,代码块中最后一个表达式为函数的返回值
 def fac(n:Int)={
    var r = 1
    for(i <- 1 to n) {r = r * i}
    r
  }
  1. 使用return需要为函数指定返回值类型
def func01(x:Double):Int={
    var a = 10
    return a
  }
  1. 递归需要指定指定返回值类型
def func02(x:Int):Int = {
    if(x == 1){
      x
    } else {
      x * func02(x - 1)
    }
  }

5.默认值函数

//默认值函数调用方式:func03()/func03(a="World")
  def func03(a:String = "Hello",b:Int = 10) ={
    println(s"$a\t$b")
  }

6.匿名函数

  //函数签名:(String, Int) => Unit
  //匿名函数体:(a: String, b: Int) => { println(s"$a\t$b")}
  val func04: (String, Int) => Unit = (a: String, b: Int) => {
    println(s"$a\t$b")
  }
  1. 嵌套函数:嵌套内的函数的作用域要受限于外部函数的作用域
def func05(a:String)={
    def func()={
      println(a)
    }
    func()
  }
  1. 可变参数
//可变参数
  def func07(a:Int*)={
    for(e <- a){
      println(e)
    }
    //scala迭代语法
    //a.foreach((x:Int) => {println(x)})
    a.foreach(println(_)) //由于传入的参数只有一个,因此X可以用_代替
    a.foreach(println) //println本身也是接受一个传参且不返回值,所以可以直接传入函数
}

9.函数作为参数

def func08(a:Int,b:Int,f:(Int,Int) => Unit)={
    val res = f(a,b)
    println(res)
}

10.函数作为返回值

//函数作为返回值
  def func09(a:String):(Int,Int) => Unit ={
    if(a.equals("+")){
        _ + _
    } else if (a.equals("-")) {
      (x:Int,y:Int) => {
        x - y
      }
    } else if (a.equals("*")) {
      (x:Int,y:Int) => {
        x * y
      }
    } else {
      (x:Int,y:Int) => {
        x / y
      }
    }
  }

标签:02,String,val,Scala,Int,基础,println,返回值,def
From: https://www.cnblogs.com/crispy-bro/p/18316437

相关文章

  • 题解:2024牛客多校第三场 B
    BCrashTestheader时间限制:C/C++2秒,其他语言4秒空间限制:C/C++1048576K,其他语言2097152K64bitIOFormat:%lld题目描述Afterfiveyears,themosthigh-profileeventinmotorracing,Formula1,returnstoChina.TheChineseGrandPrixwasrecentlyheldatthe......
  • python基础理论小总结
    1.python语言的特性Python是一门解释型语言,简单清晰,开源免费,跨平台,有大量第三方库辅助开发,支持面向对象与自动垃圾回收,方便与其他编程语言相互调用。Python在数据采集、人工智能、WEB后台开发、自动化运维、测试等方向应用广泛。2.解释型语言和编译型语言的区别执行方式不......
  • Java基础编程500题——综合练习
    ......
  • Failed to create JVM.JVM Path:D:\IntelliJ IDEA 2024.1.4\jbr Error launching I
     IDEA修改启动参数掉大坑!情况说明:在Help>EditCustom VMOptions修改IDEA的VM产生之后无法打开(重启/重装多次依然无法打开),修改C盘的idea64.exe.vmoptions和安装目录的idea64.exe.vmoptions依然无法启动!,后面把IDEA安装目录的jar文件夹删了,又重装JDK。由于我有多个JDK环境,......
  • 逆向分析学习入门教程(非常详细)零基础入门到精通,看这一篇就够了!_逆向都要学啥
    前沿从本篇起,逆向工厂带大家从程序起源讲起,领略计算机程序逆向技术,了解程序的运行机制,逆向通用技术手段和软件保护技术,更加深入地去探索逆向的魅力。一、程序如何诞生?1951年4月开始在英国牛津郡哈维尔原子能研究基地正式投入使用的英国数字计算机“哈维尔·德卡特伦”,是......
  • YC322A [ 20240724 CQYC NOIP 模拟赛 T3 ] 小 M 的字符串(string)
    题意给定一个\(0/1\)字符串,你需要从中选出尽可能多的不相交的子串使得按顺序字典序单调递增。\(n\le25000\)。Sol先考虑能最多选出多少个不相交的子串,这个是\(\frac{n}{\logn}\),但是这个没用。考察一下子串的长度,由于字典序的限制,最劣的情况下就是一个子串比上一个子串......
  • 【学术会议征稿】第九届计算机技术与机械电气工程国际学术论坛(ISCME 2024)
    第九届计算机技术与机械电气工程国际学术论坛(ISCME2024)20249th InternationalSeminaronComputerTechnology,MechanicalandElectricalEngineering第九届计算机技术与机械电气工程国际学术论坛(ISCME2024)将于2024年11月8-10日在中国南京隆重召开。本次论坛将围绕“......
  • 【学术会议征稿】第五届人工智能与计算工程国际学术会议(ICAICE 2024)
    第五届人工智能与计算工程国际学术会议(ICAICE2024)The5thInternationalConferenceonArtificialIntelligenceandComputerEngineering为了在人工智能技术应用与计算工程领域进一步的探索,与国内外学界和业界相关人员交流新问题、新发现、新成果、新应用,第五届人工智能......
  • 【学术会议征稿】第六届信息与计算机前沿技术国际学术会议(ICFTIC 2024)
    第六届信息与计算机前沿技术国际学术会议(ICFTIC2024)20246th InternationalConferenceonFrontierTechnologiesofInformationandComputer   第六届信息与计算机前沿技术国际学术会议(ICFTIC2024)将在中国青岛举行,会期是2024年11月8-10日,为期三天,本次会议是......
  • 五、IPv6基础知识-NDP
    NDP:IPv6邻居发现协议,主要通过ICMPv6报文来实现其功能。1.主要功能 NDP功能对应实现的ICMPv6报文如下:2.路由发现功能 1.路由器发现是指主机发现本地链路上路由器和确定其配置信息的过程。2.路由器发现可以同时实现以下3个功能:路由器发现(RouterDiscovery):主机定位邻......