• 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
  • 相关阅读:
    Nacos是如何实现心跳机制和服务续约以及超时剔除服务机制的?
    Jenkins的存储主目录更改(5)
    配置nginx动静分离全步骤
    【Unity面试】 最全NGUI和UGUI优化 | 面试真题 | UI框架 | 全面总结 |建议收藏
    数字集成电路设计(一、Verilog HDL数字集成电路设计方法概述)
    判断文件为文本文件还是二进制文件
    Vue3 使用Element Plus表格单选带checkbox
    Java的日期与时间java.util.TimeZone简介说明
    不定积分(原函数)存在性定理、定积分存在性定理、变限积分存在性定理
    【C语言】递归问题(爬楼梯)
  • 原文地址:https://blog.csdn.net/jankin6/article/details/124598276