欢迎访问尚贤官网,我们提供网站建设与推广服务!
全国热线:18537972228

扫码领取大额优惠劵

您当前位置: 技术开发 - 函数式编程思想

函数式编程思想

时间:2023-10-13 08:59:48 来源:洛阳尚贤科技

适用性:多个函数,主体逻辑相同,但核心算法不同。比如都是for遍历列表这叫主体逻辑相同,一个是加一个是减这叫核心算法不同。

步骤:

封装(分):将变化点单独定义在函数中。

继承(隔):用参数抽象变化点,在公共函数中统一用法。从而隔离公共函数与变化点函数。

多态(做):对于面向对象来说多态意思是重写。在函数比编程里,重写意思就是可以制作多个变化点函数。 但是新增的变化点函数一定要符合在公共函数中的用法,否则调不了。


*步: 封装(分) " 主体逻辑相同,核心算法不同 “

1、封装变化点,将变化点单独定义在函数中。  变化点是 item > 10 (不带if)。

2、建个变化点函数,加上形参,把 item > 10 放进去,前面加上return。这相当于让这个函数返回 item > 10 这个变化点

3、然后,这个函数用在哪儿呢? 用在主体逻辑中,也就是封装相同点的公共函数里。

4、封装相同点,写公共函数把找数字的逻辑写出来。

5、在 if 后面, 放变化点函数,此时变化点函数替代了传统的 item < 50 这种表达式。 因为变化点函数返回的本身就是 item < 50.

6、那么还要找大于10的数字,那就把上面的过程再来一遍,最后在封装共同点的函数里再加个 if 后面放第二个条件函数。再有就放第三个…..

7、现在就会发现多个变化点函数就得放多个,各自也都写死了,为解决这一问题,所以此时就需要开启第二步:继承。


第二步:继承(隔)

1、所谓隔,也就是要抽象出一个相同点成为父类,抽象的目的是统一,统一的目的是隔离。

2、假设有两个if condition01(item)  if condition02(item) 

3、抽象出相同点,就是 condition(item),那就把 condition 做为函数的形参,condition名字可随便定。于是乎就可以只留一行 if condition(item)

4、这是什么意思??? 答:  面向对象靠的是 "爸爸" 做抽象, 函数式编程靠的是 "参数" 做抽象。

5、所以把 "参数" 理解为父类这是抽象,也就是说随便定个名字反正它是形参,这个形参接收的是传过来的变化点函数, 所有传过来的变化点函数都用这一个参形代表, 所以从某种意义上来说它有点父类的意思。可以把 if condition(item) 理解为统一,统一就是确定用法。用这个形参括弧item就相当于是被调过来的函数在执行item的判断。

6、统一了用法以后,如果以后再增加了需求,比如找偶数、奇数、运算等等无穷无尽增加,都不影响这个统一的用法。从而起到了隔离的效果。


第三步:多态(做)
1、比如找偶数、奇数、运算等等无穷无尽增加变化点函数,这就是函数式编程的多态表现。但新增的变化点函数必须符合公共函数的要求。


步骤演示:

需求1:在列表中查找大于10的数字
需求2:在列表中查找小于50的数字

list01 = [34, 5, 56, 7, 67, 89]

# def find_all01():
#     for item in list01:
#         if item > 10:
#             yield item
#
# def find_all02():
#     for item in list01:
#         if item < 50:
#             yield item

将以上代码转变为——函数式编程,注释看左边

# 变化点函数,封装不同
def condition01(item):
    return item > 10

def condition02(item):
    return item < 50

# 公共函数,封装相同


def find_all(condition):
    for item in list01:
        if condition(item):
            yield item

for item in find_all(condition01):   # 这里进行了间接调用,因为要调的函数没加括号
    print(item)

如果觉得上面的说明太复杂,说人话简单讲就是把算法放在变化点函数里,再把变化点函数当成参数传给公共函数,在公共函数里做判断和返回。就这么简单。

我们提供整套的互联网整合营销托管服务,深度研究SEO技术在网络营销中的创新和运用,为内贸与外贸企业
量身定制高转化率的网站设计开发与SEO营销解决方案。
了解更多
领取优惠 电话咨询