scala之函数入门

scala语法 专栏收录该内容
19 篇文章 1 订阅

目录

一:函数构成

(1)带返回值

(2)过程:(不带返回值)

二:单行函数

三:函数调用

(1)递归调用函数时:需明确声明

(2)默认参数

(3)带名参数

(4)变长参数

(5)运算符与函数的相互转化

(6)不传参的函数调用

(7)apply函数(Object类型自带)


一:函数构成

(1)带返回值


            def关键字 + 函数名 + 参数 + (:返回值类型 ) +  “=” + 函数体
            
            返回值:默认解析  
            (可以没有返回值 —— Unit 表示空,如何理解)    

例子:
def sayHello(name:String,age:Int)={if(age>18){printf("hi %s,you are a big boy,you age is %d\n",name,age);}else{printf("hi %s,you are a little boy,you age is %d\n",name,age);}}
var age2 = sayHello("Tom",23)

(2)过程:(不带返回值)


        函数分类中: 没有返回值的函数被称为过程
        方法:手动赋予 Unit 返回值类型
                      声明时,不使用 “=” 号
                      
        例子:
            def sayHello(name: String) { print("Hello, " + name); "Hello, " + name }
            def sayHello(name: String): Unit = "Hello, " + name

 

二:单行函数

含义:表明scala中函数的声明与代码块儿无关 “{ }” 的使用

def sayHello(name:String) = print("Hello,"+name);

 

三:函数调用

(1)递归调用函数时:需明确声明

 

def fab(n: Int): Int = {
  if(n <= 1) 1
  else fab(n - 1) + fab(n - 2)
}

计算过程:
         换算成平行的并列算子即可

(2)默认参数

 

效果:
            调用参数时,不用传递非必要参数,不用与声明的参数个数一致
            从左向右依次插入

例子:
def sayHello(firstName:String,middleName:String="William",lastName:String="Tom")=firstName+" "+middleName+" "+lastName;
sayHello("Hello")

好处: 与java对比,代码更简洁
               更灵活

(3)带名参数


构成: 变量名称 + “=” + 值
例子: 
sayHello(firstName = "Mick", lastName = "Nina", middleName = "Jack") 


(4)变长参数


1》思考:变长函数和直接传递数组的区别

方法体构造:将 nums 当成Array 集合去遍历
传递参数时:不受参数长度的影响,任意添加数值
                            省去了构建数组的过程
                            
例子:
def sum(nums:Int*)={
var res = 0;
for(num <- nums) res += num
res;
}

2》使用序列调用变长参数:

序列 +  特殊语义  ————》 构成调用该方法的参数

例子: val s = sum(1 to 5: _*)

3》序列:的含义
 
 * List序列
 * 分为变长和不可变长序列,底层是链表
 * 特点:有序,可重复,增删快,查询慢
 * 不可变长序列:长度和角标都不可变
 
 val list1 = List(1, 2, 3, 4)

 不能使用 val s = sum(list1)          不可行
                   val s = sum(list1:_*)    可行

对特殊语义的理解::_*
作用:现阶段作用: 将序列参数化

4》使用递归函数实现累加:
def sum2(nums: Int*): Int = {
  if (nums.length == 0) 0
  else nums.head + sum2(nums.tail: _*)
}

 tail:英 [te?l] 尾巴 
 head:头部         序列的第一个元素


 
(5)运算符与函数的相互转化

 

1》运算符的改变: 本身当成函数去使用
            运算符:+、-、*、/  等等 
 例子:1.+(1)
               res1: Int = 2
               
2》函数本身亦可以当成符号去使用
例子: 1.to(10) ————》 1 to 10


(6)不传参的函数调用


            可以省略 括号
例子:"Hello World".distinct
——》 "Hel Wrd"

(7)apply函数(Object类型自带)


调用时的缩写:
        "Hello World"(6),实际上是"Hello World".apply(6)

例子:Array(1,2,3,4)

 

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:白松林 返回首页

打赏

威少SOS

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值