-
函数式编程-04-让 java 更加函数式
从邮箱验证说起
验证邮箱的合法性,是一个非常常见的需求。
如果邮件格式合法,就发送对应的验证邮件;如果非法,则提示错误信息。
我们一般的实现方式如下:
import java.util.regex.Pattern;
/**
* @author 老马啸西风
* @since 1.0.0
*/
public class EmailValid {
private fina...
2020-06-05 09:42:59 |
Pattern
-
函数式编程-03-java 中的函数式接口和 lambda 简介
Java 8 的函数式接口
lambda 被用于接收特定接口的地方, Java 正是以此来决定调用哪个方法的。
Java 并不对命名加以限制,有些语言则不然。
唯一的限制是所用的接口必须要明确,这通常意味着它应该有且仅有一个抽象方法。(实际上会更复杂一些,因为有些方法不算在内。)
这样的接口就是SAM (single abstract method, 单一抽象方法)类型,被称为函数式...
2020-06-05 09:42:59 |
Pattern
-
函数式编程-02-函数中的方法
Java 中的函数
在第1 章中,你用了我称之为函数的东西,但实际上它们是方法。
方法是一种在传统的Java 里在某种程度上表示函数的方式。
函数式的方法
一个方法可以是函数式的,只要它满足纯函数的要求:
它不能修改函数外的任何东西。外部观测不到内部的任何变化。
它不能修改自己的参数。
它不能抛出错误或异常。
...
2020-06-05 09:42:59 |
Pattern
-
函数式编程-01-什么是函数?
本章要点
理解现实世界中的函数
在 Java 中表示函数
使用lambda
使用高阶函数
使用柯里化函数
用函数式接口编程
学习目标
为了理解函数式编程是如何工作的, 我们会使用一些函数式库提供的函数式组件,还有Java 8 标准库里可用的少许组件。
不仅如此,...
2020-06-05 09:42:59 |
Pattern
-
函数式编程-00-什么是函数式编程
序言
学习 java 函数式编程的目的主要有 2 个:
(1)运用下 jdk8
(2)重新理解这种编程思想
实际上很多东西都要反复学些。
准备工作
你可以同时阅读下列内容:
java8 系列学习
本系列学习方式
(1)以书本为核心,做发散式学习。
统计 10 篇左右博客,直到没有特别新颖的内容为止。
(2)笔记
本系列博客就是一个笔记。
同时源码也会做备份,...
2020-06-05 09:42:59 |
Pattern
-
编译原理系列-06-LR
3.3 LR分析
LL(k)预测法的弱点是它必须预测下一个将被使用的产生式,并且需要向前查看一个字符、LR(k)是一个更有效的分析法,它可以在看见与整个产生式相关的所有输人记号以后再做出决定(多于k个记号)。
LR(k)分别代表由左自右的分析、最右推导、向前查看k个记号。最右推导的使用看起来有些奇怪,怎样用最右推导进行由左向右的分析呢?
图3.18说明了在文法3.1程序中的LR分析过程...
2020-06-04 05:34:28 |
Java
-
编译原理系列-05-Predictive analysis 预测分析
3.2 预测分析
有些文法使用了像递归下降这样的简单算法来简化分析。
实际上,就是把每个文法产生式转换成一个递归函数的子句。
如文法3.11所示。
文法3.11
S→if E then S else S L→end
S→beginS L L→;SL
S→print E
E→num=num
这...
2020-06-04 05:34:28 |
Java
-
编译原理系列-04-parsing 语法分析之上下文无关文法
语法分析
前儿章讨论过了用符号代替正则表达式的简化机制,这种机制在使用时是很方便的:
digits=[0-9] +
sum=(digits“+") *digits
这些正则表达式定义了28+301+9的和。又如:
digits=[0-9] +
Sum=expr“+"expr
expr="("sum") " | digits
所定义的表达形式如下所示:
(109+23)
61
...
2020-06-04 05:34:28 |
Java