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)
相关推荐
学传打活3 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
fangzhanpeng16811 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心13 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552719 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552720 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝21 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552721 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552722 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552724 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552725 天前
Java I/O核心操作实战
人工智能·1024程序员节