目录

Scala入门到放弃—02—函数

文章目录

函数

方法定义

scala 复制代码
def 方法名(参数: 参数类型): 返回值类型 = {
	//方法体
	//最后一行作为返回值(不需要使用return)
}
def max(x: Int, y: Int): Int = {
	if(x > y)
		x
	else 
		y
}
scala 复制代码
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

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

无返回值 自动加Unit

默认参数

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

scala 复制代码
 //参数
 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

命名参数

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

scala 复制代码
def speed(destination: Float, time: Float): Float {
	destination / time
}
println(speed(100, 10))
println(speed(time = 10, destination = 100))

可变参数

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

scala 复制代码
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

三种循环遍历结构:

scala 复制代码
   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

bash 复制代码
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
scala 复制代码
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
scala 复制代码
var (num, sum) = (100, 0)
while(num > 0){
	sum = sum + num
	num = num - 1
}
println(sum)
本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
jamison_112 天前
文心一言与 DeepSeek 的竞争分析:技术先发优势为何未能转化为市场主导地位?
人工智能·ai·chatgpt·gpt-3·1024程序员节
NaZiMeKiY12 天前
HTML5前端第六章节
前端·html·html5·1024程序员节
jamison_116 天前
颠覆未来:解锁ChatGPT衍生应用的无限可能(具体应用、功能、付费模式与使用情况)
ai·chatgpt·1024程序员节
NaZiMeKiY21 天前
HTML5前端第七章节
1024程序员节
earthzhang202125 天前
《Python深度学习》第四讲:计算机视觉中的深度学习
人工智能·python·深度学习·算法·计算机视觉·numpy·1024程序员节
明明真系叻1 个月前
2025.3.2机器学习笔记:PINN文献阅读
人工智能·笔记·深度学习·机器学习·1024程序员节·pinn
bitenum1 个月前
【C++/数据结构】队列
c语言·开发语言·数据结构·c++·青少年编程·visualstudio·1024程序员节
IT学长编程1 个月前
计算机毕业设计 基于SpringBoot的智慧社区管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·后端·毕业设计·课程设计·论文笔记·1024程序员节
qq_382391332 个月前
WPF框架学习
学习·wpf·1024程序员节
✿ ༺ ོIT技术༻2 个月前
Linux:TCP和守护进程
linux·运维·服务器·网络·tcp/ip·1024程序员节