函数式编程,今天我们来说一说如何在函数式编程中将控制结构抽象出来,我们先简单说一下函数式编程。函数返回值是由其参数决定的,而且返回值是确定的,也就是说只要我们使用相同的参数调用函数,他的返回值是确定的不变的。
大家在开发中,少不了流程控制,我们开发前都会先画一个流程图,然后把流程图变成 code。那么在函数式编程我们怎么来实现对流程控制呢。好,我们一切从实际出发,我们想象一个场景吧,当用户登录时候,用户需要输入密码和用户名,用户名可以是邮件或是电话号码,在服务端或前端我们需要对用户输入的用户名进行校验看是否合法,而后根据校验结果给出友好提示,整个场景太常见不过了,我们校验用户名会返回一个表示真假的值,根据这个值来进行流程控制…不说了,这个太简单。
这个我们在 OOP 中常见做法吧,今天我们看一看怎么用 FP 对这个代码进行重构,默认您对 java8 的 api 不仅是了解而是熟悉,所以有关代码中出现 java8 的 api 在这里我就不进行赘述了。看一看我们校验是输入字符串,输出是 boolean 值,我们第一时间应该想到用 Function 来解决。
运行一下,我们想象一下会有什么结果,第二会报异常 java.lang.NullPointerException。根据输入我们需要定义结果与输入对应,函数式编程意识用表达式将定义域和值域关联起来,这句好很重要,随后大家可以慢慢体味。所以我们定一个接口 Result 来对应可能出现出来情况。
校验结果无非是成功和失败两种,所以我们将成功失败分别对应不同的类。
那么我们 checker 返回值也就不再是
看起来像那么一回事了,但是看一下 Instance of 有点奇怪。这里我们说一个概念就是函数和作用,作用就是我们方法做了一些事,现在的方法就是作用,没有返回值这个我们是无法测试的。注意这是 void 而是不返回值,表明我们还没有走出OOP呀,
public static void evauluateUsernameFP(String s)
看了看时间,估计今天是写不完了,我们还是惯例先弄(上)吧。今天就到这吧
代码已经上传
https://github.com/zideajang/DemoE/commits/master
请大家多多支持我的微信公众号,这里有更多更快的文章