(1)return 可以省略,Scala 会使用函数体的最后一行代码作为返回值
(2)如果函数体只有一行代码,可以省略花括号
(3)返回值类型如果能够推断出来,那么可以省略(:和返回值类型一起省略)
(4)如果有 return,则不能省略返回值类型,必须指定
(5)如果函数明确声明 unit,那么即使函数体中使用 return 关键字也不起作用
(6)Scala 如果期望是无返回值类型,可以省略等号
(7)如果函数无参,但是声明了参数列表,那么调用时,小括号,可加可不加
(8)如果函数没有参数列表,那么小括号可以省略,调用时小括号必须省略
(9)如果不关心名称,只关心逻辑处理,那么函数名(def)可以省略

 1 package com.atguigu.function
2
3 object TestFunction {
4 def main(args: Array[String]): Unit = {
5 // (0)函数标准写法
6 def f( s : String ): String = {
7 return s + " jinlian"
8 }
9 println(f("Hello"))
10 // 至简原则:能省则省
11 //(1) return 可以省略,Scala 会使用函数体的最后一行代码作为返回值
12 def f1( s : String ): String = {
13 s + " jinlian"
14 }
15 println(f1("Hello"))
16 //(2)如果函数体只有一行代码,可以省略花括号 类似数学上的f(x)=x+1
17 def f2(s:String):String = s + " jinlian"
18 //(3)返回值类型如果能够推断出来且省略了return,那么可以省略返回值类型的指定(:和返回值类型一起省略)
19 def f3( s : String ) =
20 {
21 s + " jinlian"
22 }
23 println(f3("Hello3"))
24 //(4)如果有 return,则不能省略返回值类型,必须指定。
25 def f4() :String = {
26 return "ximenqing4"
27 }
28 println(f4())
29 //(5)如果函数明确声明 Unit,那么即使函数体中使用 return 关键字也不起作用
30 def f5(): Unit = {
31 return "dalang5"
32 }
33 println(f5())
34 //(6)Scala 如果期望是无返回值类型,可以省略等号,将无返回值的函数称之为过程
35 def f6() {
36 "dalang6"
37 }
38 println(f6())
39 //(7)如果函数无参,但是声明了参数列表,那么调用时,小括号,可加可不加
40 def f7() = "dalang7"
41 println(f7())
42 println(f7)
43 //(8)如果函数没有参数列表,那么小括号可以省略,调用时小括号必须省略
44 def f8 = "dalang"
45 //println(f8())
46 println(f8)
47 //(9)如果不关心名称,只关心逻辑处理,那么函数名(def)可以省略
48 def f9 = (x:String)=>{println("wusong")}
49 def f10(f:String=>Unit) = {
50 f("")
51 }
52 f10(f9)
53 println(f10((x:String)=>{println("wusong")}))
54 //匿名函数 :没有名字的函数,通过lambda表达式实现 (参数)=>{函数体}
55
56 //f9((s:String)=>{println(s)})
57 //(1)参数的类型可以省略,会根据形参进行自动的推导
58
59 //f9((s)=>{println(s)})
60 //(2)类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参数超过1的永远不能省略圆括号。
61
62 //f9(s =>{println(s)})
63 //(3)匿名函数如果只有一行,则大括号也可以省略
64
65 //f9(s =>println(s))
66 //(4)如果参数只出现一次,则参数省略且后面参数可以用_代替
67
68 //f9(println(_))
69 // (5) 如果可以推断出,println是一个函数体,而不是调用语句,那么(_)可以省
70
71 // f9(println)
72 //反推导 f9((s:String)=>println(s))
73 //加深大家理解
74
75 //定义一个函数,接受一个函数类型的参数,该函数类型有两个参数
76
77 def f11(fun:(Int,Int)=>Int):Int={
78
79 fun(1,2)
80
81 }
82 //println(f11((x:Int,y:Int)=>{x + y}))
83
84 //println(f11((x,y)=>x + y))
85
86 println(f11(_ + _))
87 }
88 }

Scala 函数至简原则的更多相关文章

  1. scala函数至简原则是什么?

    1.return可以省略,Scala会使用函数体的最后一行代码作为返回值 2.如果函数体只有一行代码,可以省略花括号 3.返回值类型如果能够推断出来,那么可以省略(:和返回值类型一起省略) 4.如果有 ...

  2. Scala函数高级篇

    一.匿名函数 没有名字的函数就是匿名函数,格式:(x:Int)=>{函数体} x:表示输入参数类型:Int:表示输入参数类型:函数体:表示具体代码逻辑 传递匿名函数至简原则: 参数的类型可以省略 ...

  3. Scala 函数(五)

    函数是一组一起执行一个任务的语句. 您可以把代码划分到不同的函数中.如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的. Scala 有函数和方法, ...

  4. Scala:函数和闭包

    http://blog.csdn.net/pipisorry/article/details/52902271 Scala函数 Scala 有函数和方法,二者在语义上的区别很小.Scala 方法是类的 ...

  5. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  6. Spark记录-Scala函数

    Scala函数 Scala有函数和方法. Scala方法是一个具有名称和签名的类的一部分. Scala中的函数是一个可以分配给变量的完整对象. 函数定义可以出现在源文件中的任何位置. 不带参数的函数 ...

  7. Spark记录-Scala函数与闭包

    函数声明 Scala函数声明具有以下形式 - def functionName ([list of parameters]) : [return type] Scala 如果不使用等号和方法体,则隐式 ...

  8. [scala] scala 函数 (⑦)

    1.scala 函数定义 2.scala 高阶函数 3.匿名函数 4.柯里化 import scala.math._ /** * @author xwolf * @date 2017-04-24 9: ...

  9. ORACLE时间函数(SYSDATE)简析

    ORACLE时间函数(SYSDATE)简析 分类: 原文地址:ORACLE时间函数(SYSDATE)简析 作者:skylway 加法 select sysdate,add_months(sysdate ...

  10. Scala函数字面量简化写法

    Scala提供了多种方法来简化函数字面量中多余的部分,比如前面例子中filter方法中使用的函数字面量,完整的写法如下: (x :Int ) => x +1 首先可以省略到参数的类型,Scala ...

随机推荐

  1. Kafka集群搭建与SpringBoot项目集成

    本篇文章的目的是帮助Kafka初学者快速搭建一个Kafka集群,以及怎么在SpringBoot项目中使用Kafka. kafka集群环境包地址:https://pan.baidu.com/s/1Mar ...

  2. ADVMP 三代壳(vmp加固)原理分析(加壳流程)

    开源项目地址 https://github.com/chago/ADVMP vmp 加固可以说时各大加固厂商的拳头产品了,这个开源项目虽然不是十分完善,让我们可以一览vmp加固的原理,是十分好的学习资 ...

  3. gitee配置SSH公钥

    第一步,找个地方打开"git bash",然后输入生成ssh公钥的命令: ssh-keygen -t rsa -C 'your-email' 然后敲四次回车生成公钥: 第二步,输入 ...

  4. 项目实战:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、支持大量实时显示下位机数据)

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/111660400长期持续带来更多项目与技术分享, ...

  5. Flutter学习

    常用网址 免费下载 !<AliFlutter 体系化建设和实践> Flutter 开发文档 Flutter实战 Dart 编程语言概览 pub仓库 main函数使用了(=>)符号, ...

  6. Ubuntu虚拟机开机显示initramfs

    因为我的虚拟机路径放在了移动硬盘当中,所以连接有点失常就断开了,紧接着虚拟机也异常关闭了. 重启后进入了initramfs界面 查看出错的分区,如下图所示,是/dev/sda5分区有损坏 解决方法: ...

  7. Java面向对象之接口和抽象类的区别一目了然

    介绍 相信对于Java面向对象部分,很多人很长一段时间对于接口和抽象类的区别,使用场景都不是很熟悉,同是作为抽象层重要的对象,工作中到底什么情况下使用抽象类,不是很清楚.本文就一次性把这些概念一次性说 ...

  8. 无法加载 DLL“librdkafka”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)

    我这个错误是在引用了封装kafka项目的情况下提示的. 解决方案:在本项目里面安装 RdKafka ,再次运行就好了.

  9. 【Azure Logic App】在Logic App中使用 Transfer XML组件遇见错误 undefined

    问题描述 在Azure Logic App中,使用Transform XML组件进行XML内容的转换,但是最近这个组件运行始终失败. 问题解答 点击Transform XML组件上的错误案例,并不能查 ...

  10. 360 数科实践:JanusGraph 到 NebulaGraph 迁移

    摘要:在本文中 360 数科的周鹏详细讲解了业务从 JanusGraph 迁移到 Nebula Graph 带来的性能提升,在机器资源不到之前 JanusGraph 配置三分之一的情况下,业务性能提升 ...