(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. centos7安装postgresql9.6

    1.安装yum源 yum install -y https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg- ...

  2. JS实现提示文本框可输入剩余字数

    最近在设计写博客功能时,涉及到留言框输入字数限制,需要给用户剩余数字提示. 参考文章:https://www.cnblogs.com/crazytrip/p/4968230.html 实现效果: 源码 ...

  3. Frogger题解

    Frogger 法一:floyd #include<iostream> #include<cstring> #include<algorithm> #include ...

  4. java基础集合类之ArrayList---01

    集合类之ArrayList ArrayList<E>: 1.可调整大小的数组实现 2.<E>:是一种特殊的数据类型,泛型 3.在出现E的地方我们使用引用数据类型替换即可:Arr ...

  5. Elasticsearch-Mapping(映射)

    Elasticsearch-Mapping(映射) Mapping是用来定义一个文档(document),以及它所包含的属性(field)是如何存储和 索引的. 哪些字符串属性应该被看做全文本属性(f ...

  6. Jupyter Notebook 遇上 NebulaGraph,可视化探索图数据库

    在之前的<手把手教你用 NebulaGraph AI 全家桶跑图算法>中,除了介绍了 ngai 这个小工具之外,还提到了一件事有了 Jupyter Notebook 插件: https:/ ...

  7. 别再低效筛选数据了!试试pandas query函数

    数据过滤在数据分析过程中具有极其重要的地位,因为在真实世界的数据集中,往往存在重复.缺失或异常的数据.pandas提供的数据过滤功能可以帮助我们轻松地识别和处理这些问题数据,从而确保数据的质量和准确性 ...

  8. Jmeter+Influxdb+Grafana搭建

    背景 在无界面压测情况下,我们需要去额外搭建可视化观测平台.借助于Influxdb+Grafana,我们可以轻松让Jmeter的结果自动写入Influxdb,Influxdb实时存储运行结果,最后由G ...

  9. Codeforces Round 920 (Div. 3)(A~F)

    目录 A B C D E F A 按题意模拟即可 #include <bits/stdc++.h> #define int long long #define rep(i,a,b) for ...

  10. php本地上传文件类

    /** * Class UploadFile * @author fengzi */ class UploadFile { public $error = array(); //上传前的error信息 ...