zoukankan      html  css  js  c++  java
  • Scala 函数至简原则

    (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 }
  • 相关阅读:
    学习C#的一些笔记
    SQL高级应用
    SQL SERVER 视图
    ES5 Study
    面试官技巧
    WebServicexml操作
    用JS和HTML写自己的文本编辑器
    解决Win7 x64 VS2010调试网站出现 vs2010 未能将脚本调试器附加到计算机上的进程。已附加了一个调试器
    Microsoft.Practices.Unity实现代码依赖注入、XML依赖注入和AOP切面编程
    无法对数据库'XXX' 执行删除,因为它正用于复制"的解决方法
  • 原文地址:https://www.cnblogs.com/rainbow-1/p/15762707.html
Copyright © 2011-2022 走看看