• Scala入门到放弃—02—函数


    函数

    方法定义

    def 方法名(参数: 参数类型): 返回值类型 = {
    	//方法体
    	//最后一行作为返回值(不需要使用return)
    }
    def max(x: Int, y: Int): Int = {
    	if(x > y)
    		x
    	else 
    		y
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    package org.example
    object App {
      def main(args: Array[String]): Unit = {
        println(add(2,5))
      }
      def add(x:Int,y:Int):Int={
      x+y
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    7

    package org.example
    object App {
      def main(args: Array[String]): Unit = {
        println(three())
        //没有入参的时候可以不用写
        println(three)
      }
      def three()=1+2
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    无返回值 自动加Unit

    默认参数

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

     //参数
     def sayName(name: String ) = {
       println(name)
     }
     //默认参数
     def sayName1(name: String ="sunzhongming.com") = {
       println(name)
     }
     //main调用
       sayName("hiszm.cn")
       sayName1()
       sayName1("haha")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    hiszm.cn
    sunzhongming.com
    haha

    命名参数

    可以修改参数的传入顺序 ; 可以通过参数的名字来进行传参

    def speed(destination: Float, time: Float): Float {
    	destination / time
    }
    println(speed(100, 10))
    println(speed(time = 10, destination = 100))
    
    • 1
    • 2
    • 3
    • 4
    • 5

    可变参数

    可变参数(可传入任意多个相同类型的参数)

    def sum(number: Int*) =  {
    	var result = 0
    	for(num <- number) {
    		result += num
    	}
    	result
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    阅读相关源码:org.apache.spark.sql.Dataset中的select方法

    条件语句

    循环表达式

    这个脚本从变量定义开始:var i = 0。类型推断将i判定为scala.Int,因为这是初始值0的类型。下一行的while语法结构使得代码块(即花括号中间的部分)被不断地重复执行,直到boolean表达式i < args.length的值为false。其中args.length给出的是数组args的长度。代码块包含了两个语句,各缩进2个空格(这是Scala推荐的缩进风格)。其中第一个语句println(args(i))打印出第i个命令行参数。而第二个语句i += 1让变量i自增1
    注意Java++ii++Scala中并不工作。要想在Scala中让变量自增,要么用i = i + 1,要么用i += 1

    三种循环遍历结构:

       val arrs="hsizm.cn"
       var i =0;
       while (i<arrs.length){
         println(arrs(i));
         i+=1
       }
       arrs.foreach(arr=>println(arr));
       for(arr<-arrs){
         println(arr)
       }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • to1 to 10 (左闭右闭) 1.to(10)
    • rangeRange(1,10) (左闭右开的) Range(1,10,2) (2为步长)
    • until1 until 10 (左闭右开)

    tountil的底层调用都是Range

    scala> 1 to 10
    res1: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    
    scala> Range(1,10)
    res2: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
    
    scala> 1.to(10)
    res3: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    
    scala> Range(1,10,2)
    res4: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9)
    
    scala> Range(1,10,5)
    res5: scala.collection.immutable.Range = Range(1, 6)
    
    scala> Range(10,1,-1)
    res8: scala.collection.immutable.Range = Range(10, 9, 8, 7, 6, 5, 4, 3, 2)
    
    scala> 1 until 10
    res9: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • for
    for(i <- 1.to(10)) {
    	println(i)
    }
    for(i <- 1.until(10, 2)) {
    	println(i)
    }
    for(i <- 1 to 10 if i % 2 == 0) {
    	println(i)
    }
    val courses = Array("Hadoop", "Spark SQL", "Spark Streaming", "Storm", "Scala")
    for(x<- courses) {
    	println(x)
    }
    //x其实就是courses里面的每个元素
    // => 	 就是将左边的x作用上一个函数,变成另外一个结果
    courses.foreach(x=> println(x))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • while
    var (num, sum) = (100, 0)
    while(num > 0){
    	sum = sum + num
    	num = num - 1
    }
    println(sum)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    中英文说明书丨艾美捷无内毒素卵清蛋白参数和应用
    Java调用命令行并返回打印的内容
    卷积神经网络的发展历史-ResNet
    算法学习 【第一周】 Ⅲ
    Spring源码篇(十)@Bean怎么注册一个bean
    windows下C++管道通信
    【Linux】命名管道
    VMware vSphere 中的 DRS(分布式资源调度)、HA(高可用性)和Fault Tolerance(FT,容错)区别
    R语言缺失时间序列的填充及合并:补齐时间序列数据中所有缺失的时间索引、使用merge函数合并日期补齐之后的时间序列数据和另外一个时间序列数据(补齐左侧数据)
    【操作系统学习笔记】文件管理3.5
  • 原文地址:https://blog.csdn.net/jankin6/article/details/124598276