• scala函数


    函数/方法的定义

    def function_name(x:Int, y:Int):Int = {
      // 括号内的叫做方法体

      //Java: return "";
      //Scala: 方法体的最后一行作为返回值,不需要return
    }

    例子:
    def add(x:Int, y:Int):Int = {
      x + y
    }

    在Scala中执行:
    scala> def add(x:Int, y:Int):Int = {
    | x + y
    | }
    add: (x: Int, y: Int)Int

    scala> add(4,4)
    res0: Int = 8

    可以简写成:只有一行的话大括号可以不用写。
    scala> def four() = 1 + 3
    four: ()Int

    scala> four
    res1: Int = 4

    没有返回值的写法:

    def sayHello() {

      println("hello: xiaochun")
    }


    scala> def sayHello() {
    | println("hello: xiaochun")
    | }
    sayHello: ()Unit

    scala> sayHello
    hello: xiaochun

    标准的写法:
    def sayHello():Unit = {
      println("hello: xiaochun")
    }

    scala> def sayHello():Unit = {
    | println("hello: xiaochun")
    | }
    sayHello: ()Unit

    scala> sayHello
    hello: xiaochun


    默认参数:在函数定义时,允许指定参数的默认值

    def sayName(names:String = "PK"): Unit = {
      println(name)
    }

    // $SPARK_HOME/conf/spark-defaults.conf 配置文件的地址  

    def loadConf(conf:String = "spark-defaults.conf"): Uint = {
      println(conf)
    }

    调用loadConf 函数:
    loadConf()
    loadConf("spark-production.conf")


    调用函数sayName:
    sayName() //没有赋值,就使用默认值,上面sayName函数的默认值就是PK
    sayName("xiaochun") //给了什么参数就输出什么

    输出的结果是:
    PK
    xiaochun

    在IDEA里 ctrl + t 查看一个参数的详细信息


    命名参数 :就是在调用函数的时候可以不按照顺序传递,按照参数名字也可以。 不建议这么用。

    可变参数:
    JDK5+版本以上 : 可变参数

    def sum(a:Int, b:Int):Int = {
      a + b
    }

    def sum(a:Int, b:Int, c:Int):Int = {
      a + b + c
    }

    def sum2(number:Int*) = {    //*表示可以传多个同类型的参数,
      var result = 0
      for(number <- numbers) {
        result += number
      }
      result
    }

    调用sum2函数:

    println(sum2(1,2))
    println(sum2(1,2,3))
    println(sum2(1,2,3,4))




    条件表达式

    val x = 1
    if (x > 0) true else false


    循环表达式:
    to
    Range
    until


    to的练习: 左臂右臂的区间,也就是既包含左边的又包含右边的。
    scala> 1 to 10 也等价于 1.to(10)
    res8: scala.collection.immutable.Range.Inclusive = Range(1,2,3,4,5,6,7,8,9,10)


    Range的练习:是左臂右开的区间,也就是只包含左边不包含右边。
    scala> Range(1,10)
    res9: scala.collection.immutable.Range = Range(1,2,3,4,5,6,7,8,9)
    scala> Range(1,10,2) //更改步长,步长不能是0。
    res10: scala.collection.immutable.Range = Range(1,3,5,7,9)


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


    until的练习:
    scala> 1 until 10 也可以写成 1.until(10)
    res12: scala.collection.immutable.Range = Range(1,2,3,4,5,6,7,8,9)


    for 循环的写法:
    for(i <- 1 to 10){
      println(i)
    }

    for(i <- 1 to 10 if i%2 == 0){
      println(i)
    }

    数组for循环的写法:
    varl courses = Array("hadoop","Hive","HBase","Spark")

    遍历数组的第一种写法:
    for (course <- courses) {
      println(course)
    }
    遍历数组的第二种第二种写法:
    //course 其实就是courses 里面的每个元素
    //==> 就是将左边的course作用上一个函数,变成另外一个结果
    //println 就是作用到course上的一个函数
    courses.foreach(course => println(course))

    while的写法:
    var(num,sum)=(100,0)
    while(num > 0){ //出口
      sum = sum + num
      num = num - 1 //步长
    }
    println(sum)

  • 相关阅读:
    HDU 1730 类NIM模型
    HDU 4315 阶梯博弈变形
    HDU 3389 阶梯博弈变形
    HDU 1524 树上无环博弈 暴力SG
    HDU 3094 树上删边 NIM变形
    vim的安装与配置
    Apache Mysql 搭配详解
    [置顶] 博客转移
    “玲珑杯”线上赛 Round #15 河南专场 C 咸鱼魔法记
    “玲珑杯”线上赛 Round #15 河南专场 F 咸鱼文章
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11354230.html
Copyright © 2020-2023  润新知