robot keyword 开发中如何结合clean code open close principle

本文探讨了CleanCode的概念,强调了其在软件开发中的重要性,通过对比重构前后的计算器代码,展示了面向对象设计如何简化代码结构,提高代码的可读性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:

clean code是精心设计的、编写良好的软件。clean code能够很好地与外部客户和内部客户进行沟通,也就是说,能够很好地与希望用它完成任务的用户以及开发人员、维护人员简单地理解它, 很好与开发人员进行沟通。更多详情可访问官网: clean code website

 

小的demo

为了浅显易懂, 我还是以之前的计算器keyword代码做为例子, 我们先来看看之前的代码

def operate_fun(a, b, oper):
    a = float(a)
    b = float(b)
    if oper == '+':
        return a + b
    elif oper == '-':
        return a - b
    elif oper == '*':
        return a * b
    elif oper == '/':
        return a / b
    else:
        raise Exception("operation not supported!")

上面的代码匆匆一瞥也没什么不妥, 但当我们增加任何的需求时,都在一个函数里面改动, 就意味着需要测试+-*/所有的分支.比如说我们需要增加求幂的需求, 我们的代码会变成如下:

def operate_fun(a, b, oper):
    a = float(a)
    b = float(b)
    if oper == '+':
        return a + b
    elif oper == '-':
        return a - b
    elif oper == '*':
        return a * b
    elif oper == '/':
        return a / b
    elif oper == '**'
        return a**b
    else:
        raise Exception("operation not supported!")

 当用户比如要求除法小数点后取2位有效位时, 我们又会在elif中的 a/b 中 做文章, 如果是要求+-/* 都增加取有效位时, 明显我们需要更改所有的if 或者elif分支(而实则这里有共性)

open close

我们把上面的方法用面向对象的方法重写一些, 每种算法一个类, 由于他们都是算法类, 所以可以提取一个base的公共基类, 如果有求幂或者求根等新的算法要求, 我们只需要重新写写一个类即可, 所以扩展是开放的, 而在组装的接口处, 我们明显去掉了if -else逻辑, 只用到了字典的隐射, 在代码中, 我们要新增加一种算法, 只需要在字典中增加元素即可, 这个地方我们又是封闭的, 避免新需求导致这个地方引入if -else逻辑, 也就是新的算法引进时我们不需要测试之前的所有功能, 而且我们只需要保证新增加的类是正常可工作的,加入我们已测试过的"调度"模块它就能正常工作

class base(object):

   def __init__(self, a, b, oper):
       self.a = float(a)
       self.b = float(b)
       self.oper = oper

   def operate(self):
       pass

class add(base):

    def operate(self):
        return self.a + self.b


class sub(base):

    def operate(self):
        return self.a - self.b

class mult(base):

    def operate(self):
        return self.a * self.b

class div(base):

    def operate(self):
        ret = self.a / self.b
        ret = '%0.2f'%ret
        return float(ret)

class square(base):

    def operate(self):
        return self.a ** self.b

def operate_fun(a, b, oper):
    operation_dict = {"+":add, "-":sub, "*":mult, "/":div}
    operation_dict['**'] = square
    return  operation_dict[oper](a, b, oper).operate()

如果我们是要增加一个common的需求, 比如小数点后取2位,这个需要对所有的算法都生效, 之前的代码, 只能去改所有的分支里面的代码, 但我们现在的代码, 明显可以只在一处改动, 所有的都会生效.代码改动如下: 

 

def operate_fun(a, b, oper):
    operation_dict = {"+":add, "-":sub, "*":mult, "/":div}
    operation_dict['**'] = square
    return round(float(eval("{}{}{}".format(float(a), oper, float(b)))), 2)

 

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”和“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值