(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. Java压缩和解压缩zip文件

    介绍 Java提供的java.util.zip包只支持zip和gzip.至于更多格式的压缩可以选择apache的Commons Compress. 参考:https://o7planning.org/ ...

  2. 自古以来,JSON序列化就是兵家必争之地

    上文讲到使用ioutil.ReadAll读取大的Response Body,出现读取Body超时的问题. 前人引路 Stackoverflow的morganbaz的看法是: 使用iotil.ReadA ...

  3. 无 dmp 文件的情况下使用 windbg

    项目线上出现了闪退问题,查看日志发现是 sentry 模块出问题了 因为用户电脑上没有 pdb 文件,所以无法加载具体函数的调用位置,只能手动去计算 具体步骤是:在 windbg.exe 中加载 se ...

  4. win32 - 关于GDI的RGB的数据分析

    此文章为小结,仅供参考. 第一种情况,从桌面DC获取RGBA的数据. 32位 HDC hdc, hdcTemp; RECT rect; BYTE* bitPointer; int x, y; int ...

  5. golang常用库包:redis操作库go-redis使用(01)-Redis数据类型简介和连接Redis的几种方式

    第一篇:go-redis使用,介绍Redis基本数据结构和其他特性,以及 go-redis 连接到Redis(本篇) https://www.cnblogs.com/jiujuan/p/1720716 ...

  6. 硬件开发笔记(十二):RK3568底板电路电源模块和RTC模块原理图分析

    前言   做硬件做系统做驱动,很难从核心板做起,所以我们先依赖核心板,分析底板周围的电路,然后使用AD绘制原理图和设计PCB,打样我司测试底板,完成硬件测试,再继续系统适配,驱动移植,从而一步一步完善 ...

  7. 分发函数singledispatch

    import functools @functools.singledispatch() def myfunc(arg): print("default myfunc({!r})" ...

  8. linux虚拟机初始配置

    1- CentOS7配置静态IP地址: iface="网络接口名"cd /etc/sysconfig/network-scripts/; sed -i 's/^/#/' ifcfg ...

  9. C++ 模板的笔记1

    C++模板的笔记1 C++ 函数模板 函数模板的定义 函数模板是一种可以生成不同类型函数的函数声明.函数模板的参数类型不是固定的,而是在调用时由实参类型推导出来. 语法: template <t ...

  10. Ansible 基础入门

    2)Ansible 介绍 Ansible 基本概念 Ansible 是一种自动化运维工具,基于 Paramiko 开发的,并且基于模块化工作,Ansible 是一种集成 IT 系统的配置管理.应用部署 ...