当前位置: 首页 > wzjs >正文

自助建微网站各大网站推广平台

自助建微网站,各大网站推广平台,17网一起做网店普宁潮汕,asp.net做音乐网站函数和方法的区别 1) 核心概念 (1) 为完成某一功能的程序语句的集合,称为函数。 (2) 类中的函数称之方法。 2) 案例实操 (1) Scala 语言可以在任何的语法结构中声明…

函数和方法的区别

1) 核心概念

(1) 为完成某一功能的程序语句的集合,称为函数。

(2) 类中的函数称之方法。

2) 案例实操

(1) Scala 语言可以在任何的语法结构中声明任何的语法

(2) 函数没有重载和重写的概念;方法可以进行重载和重写

(3) Scala 中函数可以嵌套定义

object TestFunction {

 

// (2)方法可以进行重载和重写,程序可以执行def main(): Unit = {

 

}

 

def main(args: Array[String]): Unit = {

// (1)Scala 语言可以在任何的语法结构中声明任何的语法

import java.util.Date new Date()

 

// (2)函数没有重载和重写的概念,程序报错def test(): Unit ={

println("无参,无返回值")

}

test()

 

def test(name:String):Unit={ println()

}

 

//(3)Scala 中函数可以嵌套定义

def test2(): Unit ={

5.1.3 函数定义

1) 函数定义

(1) 函数 1:无参,无返回值

(2) 函数 2:无参,有返回值

(3) 函数 3:有参,无返回值

(4) 函数 4:有参,有返回值

(5) 函数 5:多参,无返回值

for {

i <- 1 to 3 j = 4 - i

} {

println("i=" + i + " j=" + j)

}

5.1.4 函数参数

1) 案例实操

(1) 可变参数

(2) 如果参数列表中存在多个参数,那么可变参数一般放置在最后

(3) 参数默认值,一般将有默认值的参数放置在参数列表的后面

(4) 带名参数

object TestFunction {

 

def main(args: Array[String]): Unit = {

 

// (1)可变参数

def test( s : String* ): Unit = { println(s)

}

 

// 有输入参数:输出 Array test("Hello", "Scala")

 

// 无输入参数:输出List() test()

 

// (2)如果参数列表中存在多个参数,那么可变参数一般放置在最后def test2( name : String, s: String* ): Unit = {

println(name + "," + s)

}

 

test2("jinlian", "dalang")

 

// (3)参数默认值

def test3( name : String, age : Int = 30 ): Unit = {

函数至简原则(重点)

函数至简原则:能省则省

1) 至简原则细节

(1) return 可以省略,Scala 会使用函数体的最后一行代码作为返回值

(2) 如果函数体只有一行代码,可以省略花括号

(3) 返回值类型如果能够推断出来,那么可以省略(:和返回值类型一起省略)

(4) 如果有 return,则不能省略返回值类型,必须指定

(5) 如果函数明确声明unit,那么即使函数体中使用 return 关键字也不起作用

(6) Scala 如果期望是无返回值类型,可以省略等号

(7) 如果函数无参,但是声明了参数列表,那么调用时,小括号,可加可不加

(8) 如果函数没有参数列表,那么小括号可以省略,调用时小括号必须省略

(9) 如果不关心名称,只关心逻辑处理,那么函数名(def)可以省略

 

高阶函数

在 Scala 中,函数是一等公民。怎么体现的呢? 对于一个函数我们可以:定义函数、调用函数

1) 函数可以作为值进行传递

object TestFunction {

 

def main(args: Array[String]): Unit = {

 

//(1)调用 foo 函数,把返回值给变量f

//val f = foo() val f = foo println(f)

2) 函数可以作为参数进行传递

 

def main(args: Array[String]): Unit = {

 

//(1)定义一个函数,函数参数还是一个函数签名;f 表示函数名称;(Int,Int)表示输入两个 Int 参数;Int 表示函数返回值

def f1(f: (Int, Int) => Int): Int = { f(2, 4)

}

 

// (2)定义一个函数,参数和返回值类型和f1 的输入参数一致

def add(a: Int, b: Int): Int = a + b

 

// (3)将 add 函数作为参数传递给 f1 函数,如果能够推断出来不是调用,_ 可以省略

println(f1(add)) println(f1(add _))

//可以传递匿名函数

}

 

3) 函数可以作为函数返回值返回

 

 

 

def main(args: Array[String]): Unit = { def f1() = {

def f2() = {

 

}

f2 _

}

 

val f = f1()

// 因为f1 函数的返回值依然为函数,所以可以变量f 可以作为函数继续调用

f()

// 上面的代码可以简化为

f1()()

匿名函数
1) 说明

没有名字的函数就是匿名函数。

(x:Int)=>{函数体}

x:表示输入参数类型;Int:表示输入参数类型;函数体:表示具体代码逻辑2)案例实操

需求 1:传递的函数有一个参数传递匿名函数至简原则:

(1) 参数的类型可以省略,会根据形参进行自动的推导
(2) 类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参数超过 1 的永远不能省略圆括号。
(3) 匿名函数如果只有一行,则大括号也可以省略

 

(4) 如果参数只出现一次,则参数省略且后面参数可以用_代替
def main(args: Array[String]): Unit = {

 

// (1)定义一个函数:参数包含数据和逻辑函数

def operation(arr: Array[Int], op: Int => Int) = { for (elem <- arr) yield op(elem)

}

 

// (2)定义逻辑函数

def op(ele: Int): Int = { ele + 1

}

 

// (3)标准函数调用

val arr = operation(Array(1, 2, 3, 4), op) println(arr.mkString(","))

 

// (4)采用匿名函数

val arr1 = operation(Array(1, 2, 3, 4), (ele: Int) => { ele + 1

})

 

需求 2:传递的函数有两个参数

 

object TestFunction {

 

def main(args: Array[String]): Unit = {

 

def calculator(a: Int, b: Int, op: (Int, Int) => Int): Int

= {

op(a, b)

}

 

// 1)标准版

println(calculator(2, 3, (x: Int, y: Int) =>{x +y}))

 

// 2)如果只有一行,则大括号也可以省略

println(calculator(2, 3, (x: Int, y: Int) =>x + y))

 

// 3类型参进; println(calculator(2, 3, (x , y) =>x +y))

 

// 4)如果参数只出现一次,则参数省略且后面参数可以用_代替

println(calculator(2, 3, _ + _))

}

}

 

高阶函数案例

需求:模拟 Map 映射、Filter 过滤、Reduce 聚合

 

object TestFunction {

 

def main(args: Array[String]): Unit = {

 

// 1map 映射

def map(arr: Array[Int], op: Int => Int) = { for (elem <- arr) yield op(elem)

}

 

val arr = map(Array(1, 2, 3, 4), (x: Int) => { x * x

})

println(arr.mkString(","))

 

// 2filter 过滤。有参数,且参数再后面只使用一次,则参数省略且后面参数用_表示

def filter(arr:Array[Int],op:Int =>Boolean) ={

var arr1:ArrayBuffer[Int] = ArrayBuffer[Int]() for(elem <- arr if op(elem)){ arr1.append(elem)

}

arr1.toArray

}

var arr1 = filter(Array(1, 2, 3, 4), _ % 2 == 1) println(arr1.mkString(","))

 

// 3reduce 聚合。有多个参数,且每个参数再后面只使用一次,则参数省略且后面参数用_表示,第n _代表第n 个参数

def reduce(arr: Array[Int], op: (Int, Int) => Int) = {

 

var init: Int = arr(0)

 

for (elem <- 1 until arr.length) { init = op(init, elem)

}

init

}

 

//val arr2 = reduce(Array(1, 2, 3, 4), (x, y) => x * y) val arr2 = reduce(Array(1, 2, 3, 4), _ * _) println(arr2)

}

}

 控制抽象

) 值调用:把计算后的值传递过去

 

object TestControl {

def main(args: Array[String]): Unit = { def f = ()=>{

println("f...")

 

 

object TestControl {

def main(args: Array[String]): Unit = { def f = ()=>{

println("f...")

10

}

 

foo(f())

}

 

//def foo(a: Int):Unit = {

def foo(a: =>Int):Unit = {

println(a)

}

}

输出结果:

f... 10 f...

10

 

注意:Java 只有值调用;Scala 既有值调用,又有名调用。

package com.zpark.chapter05 object TestFunctionDeclare {

def main(args: Array[String]): Unit = {

 

// 函数 1:无参,无返回值def test1(): Unit ={

println("无参,无返回值")

}

test1()

 

// 函数 2:无参,有返回值def test2():String={

return "无参,有返回值"

}

println(test2())

 

// 函数 3:有参,无返回值

def test3(s:String):Unit={ println(s)

}

 

test3("scala")

自定义一个 While 循环

 

object TestFunction {

def main(args: Array[String]): Unit = { var i:Int = 1

myWhile(i <= 10){ println(i)

i +=1

}

}

def myWhile(condition: =>Boolean)(op: =>Unit):Unit={ if (condition){

op myWhile(condition)(op)

}

}

}

 

http://www.dtcms.com/wzjs/78660.html

相关文章:

  • 免费网站建设模板下载宁波正规优化seo软件
  • 门户网站是如何做引流的西安网站优化公司
  • 广州网站建设维护河南制作网站
  • 怎样用网站做单笔外贸近期国际新闻热点大事件
  • 网站建设-上寻模板百度词条优化工作
  • 市总工会网站建设经验材料seo按天计费系统
  • 澳大利亚网站后缀怎么用网络推广业务
  • 生态建设研究所网站百度推广客户端下载安装
  • 武汉网站建设哪里找意向客户seo对网站优化
  • 网站空间信息查询如何自己创建网址
  • wordpress post_content品牌seo推广咨询
  • 电脑手机网站相互跳转电商网站开发平台
  • 网站的推广等内容百度大搜数据多少钱一条
  • 让别人做网站如何防止后门免费发布推广的平台有哪些
  • 水果网站首页设计美国站外推广网站
  • 四川聚顺成网络科技有限公司个人seo怎么赚钱
  • 上海注册公司核名网站东莞网络营销全网推广
  • 河南建达工程建设监理公司网站百度推广做二级域名
  • 做商城网站那个好seo监控
  • 陕西找人做网站多少钱google chrome 网络浏览器
  • 云南省和城乡建设厅网站百度指数网页版
  • 北京别墅设计网站网站提交百度收录
  • 网站建设策划书怎么写搜索优化是什么意思
  • 工业设计网站下载萧山市seo关键词排名
  • 如何建设公司网络营销网站优化关键词怎么做
  • 可以做头像的网站seo是什么
  • 有需要做网站的吗网店推广方式
  • 创建一个网站需要怎么做品牌策划方案
  • 招聘公司怎么做网站网络推广策划案
  • 框架网站怎么做广州30万人感染