个人笔记之Scala(Temp)

26 篇文章 0 订阅
25 篇文章 0 订阅

个人笔记之Scala(更新中)

1.函数式编程

今天接触到了scala,说实话我很后悔没有早点接触这门语言,实在是很便利的语言,其核心概念——函数式编程真的惊艳到我了,废话不多说先上代码,说明我为何如此激动。
前言:Scala的基础类型和基础语法和JAVA有很多一样的地方,但是我在使用的时候就一个感觉——简单,真不愧是极致的极简主义,太适合我这样的懒癌患者了。

package com.cl

/**
 * @author: Corley cheng
 * @email: 981311938@qq.com
 * @date: 2020/12/3 19:55
 * @description:
 * @modifiedBy:
 * @version: 1.0
 */
 //objet下的内容均为静态(static)的,其意义就在于所有定义的函数方法等都可以直接点出来
object Demo03 {
//主函数的函数入口,省略了部分标签
  def main(args: Array[String]): Unit = {
  	//第一个,定义一个无参无返回的函数
    def func01() = {}
    
    //第二个,带参无返回值的函数
    def func02(name:String) = {}
    
    //第三个,带双参返回值为String类型的函数
    def func03(age:Int,name:String):String = {
    //等同于:"my name is " + name + " , and I'm "+ age + " now."
    //怎么样,是不是和xml中的${}有异曲同工之妙?
    //这里和Python中的Hole很像,具体语法有点忘记了,但Python中貌似是通过{}和[]的组合区分变量和字符,
    //这里用$符号表示后面会跟一个变量(实际上还可以跟函数名,但是这样就只能打印出地址空间)
      s"my name is $name , and I'm $age now."
    }
    //因为返回值为String类型,这里要接收一下再打印
    println(func03(18,"Corley"))
    
	//第四个,重点来了:在scala的语法中,函数的参数,返回值都可以是函数
	//这里的参数是一个带两参的函数,函数返回一个int类型的数据,返回值同参数
    def fun04(fun05:(Int,Int)=>Int):(Int,Int)=>Int ={
    //这里由于参数的参数列表和返回值的参数列表一样,所以直接用参数中的函数作为返回函数
    //如果这里看不懂下面还有一个例子
      fun05
    }
    //此时用到lambda表达式了,然后后面跟的是参数列表
    println(fun04((a, b) => a + b)(3, 4))
    //然后是今晚全场最佳,_,作用类似通配符,表示填入的参数,第几次出现就表示第几个填入的参数。
    //但是这里要小心只有当该参数只使用一次的时候才可以这么用,偷懒也不能一直偷懒对吧,这里匹配是严格按照填入顺序来的
    println(fun04((_+_))(3, 4))

    println("====================================")
    //第五个,算是一次失败的尝试,不过得到意料之外的结果,本来我是想来一个参数为两个函数,返回值为不同类型的函数
    //不过对第一次用的我来说有点,,,小失落,没有成功,但是让我注意到了传参的时候的一点小陷阱
    def fun06(fun07:(Int,Int)=>Int):(String,String,Int,Int)=>String ={
    //因为调用函数的时候,函数的参数列表里面填的是lambda表达式,而参数列表中填的是返回值函数的参数
      def fun08(firstName:String,lastName:String,age1:Int,age2:Int): String ={
      //所以第一次我在这里手动计算了一下fun07,但后来发觉不对劲,所以干脆重写了下面的
        s"my name is : $firstName$lastName and I'm " + fun07(age1,age2).toString
      }
      fun08
    }
    println(fun06((a,b)=>a+b)("zhang","san",9,9))
    println(fun06((_+_))("zhang","san",9,9))
    println("=========================================")

//最后一个例子,带双函数参数,返回值也是函数,我不敢保证这是唯一且正确的写法,但是它是能得到我想要的结果的写法
//fun09的参数两个为fun10和fun11,返回值为一个将四个参数返回回一个字符串类型的函数(其实这么写很笨我知道,但是为了练习还是这么写了)
    def fun09(fun10:(Int,Int)=>Int,fun11:(String,String)=>String):(Int,Int,String,String)=>String ={
    //毫无亮点的返回值函数,将四个参数传入
      def fun12(age1:Int,age2:Int,firstName:String,lastName:String): String ={
      //然后两个函数分别拿到对应的参数
        fun11(firstName,lastName) + fun10(age1,age2).toString
      }
      //返回出来
      fun12
    }
    //打印一下,这长度我心动了
    println(fun09((_+_),(_+_))(10,10,"zhang","san"))
  }
}

最终运行结果:在这里插入图片描述
但是学习scala确实需要JAVA基础,不然很容易懵。
举的例子只是练习时自己瞎想的,实际生产环境的话这么用应该会被打死吧,这不写注释估计第二天就不认识了。
还有一些关于Scala的语言特性等,回头有时间再整理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值