首页 > 其他分享 >Scala入门到放弃—02—函数

Scala入门到放弃—02—函数

时间:2023-05-11 23:32:57浏览次数:29  
标签:02 10 入门 scala Scala Range 参数 println def

函数

方法定义

def 方法名(参数: 参数类型): 返回值类型 = {
	//方法体
	//最后一行作为返回值(不需要使用return)
}
def max(x: Int, y: Int): Int = {
	if(x > y)
		x
	else 
		y
}

package org.example
object App {
  def main(args: Array[String]): Unit = {
    println(add(2,5))
  }
  def add(x:Int,y:Int):Int={
  x+y
  }
}

7

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

无返回值 自动加Unit

默认参数

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

 //参数
 def sayName(name: String ) = {
   println(name)
 }
 //默认参数
 def sayName1(name: String ="sunzhongming.com") = {
   println(name)
 }
 //main调用
   sayName("hiszm.cn")
   sayName1()
   sayName1("haha")

hiszm.cn sunzhongming.com haha

命名参数

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

def speed(destination: Float, time: Float): Float {
	destination / time
}
println(speed(100, 10))
println(speed(time = 10, destination = 100))

可变参数

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

def sum(number: Int*) =  {
	var result = 0
	for(num <- number) {
		result += num
	}
	result
}

阅读相关源码: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)
   }
  • 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)

  • 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))
  • while
var (num, sum) = (100, 0)
while(num > 0){
	sum = sum + num
	num = num - 1
}
println(sum)

标签:02,10,入门,scala,Scala,Range,参数,println,def
From: https://blog.51cto.com/hiszm/6268066

相关文章

  • C/C++折半查找与哈希查找[2023-05-11]
    C/C++折半查找与哈希查找[2023-05-11]4、折半查找与哈希查找(难度等级A)[问题描述]查找是通过在查找表中做比较来完成的操作。折半查找与哈希查找都是利用数组实现的查找算法。通过本题,可以观察两种查找算法的性能。一般我们用平均查找长度ASL来表示一种查找算法的性能。ASL......
  • SemiEng20230413-What Designers Need To Know About GAA
    Nanowire与nanosheet争议仍然存在,业界还没确定谁更适合作下一代主流逻辑器件。对任何新器件,第一代都是用来学习试验的,后面再迭代升级。FinFET不能继续缩微的原因:fin之间要填栅和功函数堆叠层,fin之间15-20nm的距离是必要的。“So,youhavethiscliff.”工艺(Foundry)......
  • 2023.5.11
    1//例6-162#include<iostream>3usingnamespacestd;4classPoint5{6public:7Point():x(0),y(0)8{9cout<<"DefaultConstructorcalled."<<endl;10}11Point(intx,inty):x(x),y......
  • 使用IDEA2022.3创建web工程~
    为什么突然记录这么一篇博客呢?以前都是用2019IDEA的,突然换成了IDEA2022懵逼了,所以记录一下~具体步骤1、创建一个新的Project2、注意选择BuildSystem3、在当前工程上鼠标右键,选择AddFrameworkSupport4、选择WebApplication5、配置JDK6、配置tomcat7、测试一......
  • 2023.5.11 再上车 春天开始落叶
    「AGC039E」PairingPoints在\(n>1\)时,有一个很好的性质:一条边至少要与一条边相交,不然就会有不止一个连通块。考虑圆上\(1\)号点的连边将圆分割成了两半,有两种情况:所有边均为二部间的连边,这是简单处理的。一条边跨越二部,剩下的边均是内部的边。(如果不止一条,则会连出环......
  • 2023.5.11
    python大作业    ......
  • 2023-05-11:给你一个 m x n 的二进制矩阵 grid, 每个格子要么为 0 (空)要么为 1 (被占据), 给
    2023-05-11:给你一个mxn的二进制矩阵grid,每个格子要么为0(空)要么为1(被占据),给你邮票的尺寸为stampHeightxstampWidth。我们想将邮票贴进二进制矩阵中,且满足以下限制和要求:覆盖所有空格子,不覆盖任何被占据的格子,可以放入任意数目的邮票,邮票可以相互有重叠部分,邮......
  • 2023 SMU RoboCom-CAIP 选拔赛
    2023SMURoboCom-CAIP选拔赛A-小斧头思路:70分由于区间范围越大,最大值越大,st表存区间最大值,枚举bi的值作为[l,r]内最大值,可用二分求出l,r的范围(左边求小于bi,右边求小于等于bi,这样可以得到所有的可能)#include<bits/stdc++.h>usingnamespacestd;typedefpair<int,int>......
  • 2023冲刺国赛自测1
    T1fun\(\sum_{B}\prod_{i=1}^n\binom{B_i}{A_i}\),设\(B\)序列的长度为\(T\),考虑这个式子的组合意义,首先枚举\(B\)是将长度为\(T\)的序列划分为\(n\)段,\(\binom{B_i}{A_i}\)是在第\(i\)段内选出\(A_i\)个位置,考虑简化这个选择的过程,在原序列中加入\(n-1\)个位......
  • 2023.5.11每日总结
    packageget;importorg.apache.commons.fileupload.FileItem;importorg.apache.commons.fileupload.FileUploadException;importorg.apache.commons.fileupload.disk.DiskFileItemFactory;importorg.apache.commons.fileupload.servlet.ServletFileUpload;importj......