当前位置: 首页 > article >正文

什么是抽象公共代码

抽象出公共代码以便重用是一种提高代码效率和可维护性的重要技术。通过识别并抽取重复的代码模式到单独的函数或类中,我们可以简化原有代码,减少错误,并使未来的修改更加容易。

示例:处理用户输入并进行验证

假设我们有一个程序,需要从用户那里获取多个输入,并对每个输入进行验证。例如,我们可能需要用户输入年龄、邮编和电子邮件地址,并对每个输入进行不同的验证。

非抽象代码示例

在下面的示例中,我们将看到对每种输入类型的重复验证代码,这些验证逻辑可以被抽象出来以减少代码重复。

def get_user_input():
    # 获取用户年龄
    age = input("Enter your age: ")
    while not age.isdigit():
        print("Invalid input. Please enter a valid age.")
        age = input("Enter your age: ")

    # 获取用户邮编
    zipcode = input("Enter your zipcode: ")
    while not zipcode.isdigit() or len(zipcode) != 5:
        print("Invalid input. Please enter a 5-digit zipcode.")
        zipcode = input("Enter your zipcode: ")

    # 获取用户电子邮件地址
    email = input("Enter your email: ")
    while '@' not in email or '.' not in email:
        print("Invalid input. Please enter a valid email address.")
        email = input("Enter your email: ")

    return age, zipcode, email
使用抽象重构代码

我们可以创建一个通用的输入验证函数,该函数接受输入提示和一个验证函数作为参数。这样,我们可以重用相同的逻辑来获取和验证不同类型的用户输入。

def get_valid_input(prompt, validation_function):
    """请求输入直到输入通过验证函数"""
    user_input = input(prompt)
    while not validation_function(user_input):
        print("Invalid input. Please try again.")
        user_input = input(prompt)
    return user_input

def is_digit(input_str):
    return input_str.isdigit()

def is_zipcode(input_str):
    return input_str.isdigit() and len(input_str) == 5

def is_email(input_str):
    return '@' in input_str and '.' in input_str

def get_user_input():
    age = get_valid_input("Enter your age: ", is_digit)
    zipcode = get_valid_input("Enter your zipcode: ", is_zipcode)
    email = get_valid_input("Enter your email: ", is_email)

    return age, zipcode, email

在这个重构后的版本中,我们创建了一个通用的get_valid_input函数,它不断请求输入直到输入通过了提供的validation_function验证。这样,我们就可以使用同样的函数来处理不同的输入验证需求,大大减少了代码的重复性,并提高了代码的可维护性和可扩展性。


http://www.kler.cn/news/288612.html

相关文章:

  • PLC边缘计算网关的选择策略-天拓四方
  • 0826-0901 各种面试笔试题算法题整理
  • CSS 样式化表格——WEB开发系列24
  • 【数据库|第9期】SQL Server、Access和Sqlite 的字段别名详解
  • 在国产芯片上实现YOLOv5/v8图像AI识别-【4.2】RK3588获取USB摄像头图像推流RTSP更多内容见视频
  • 使用 树莓派3B+ 对日本葡萄园进行经济实惠的环境监测
  • Java 入门指南:Java 并发编程 —— 线程隔离技术 ThreadLocal
  • subclass-balancing的实验结果分析
  • 开放式耳机排行榜10强?这五款绝对不能错过!
  • mysql高可用之组复制 (MGR)
  • 基于RK3568平台移植ffmpeg3.4.5及ffmpeg验证
  • 【战略游戏】
  • Docker笔记-启动容器时,时间与宿主机保持一致
  • 如何找到适合的IT外包服务商
  • 【JAVA】两轮充电桩设计模式实践分享
  • mysql5.7 TIMESTAMP NOT NULL DEFAULT ‘0000-00-00 00:00:00‘ 换版8版本 引发的问题
  • 深入Redis:细谈持久化
  • 浅析前端数据埋点监控:用户行为与性能分析的桥梁
  • ES6基础----Generator的使用
  • 【RabbitMQ之一:windows环境下安装RabbitMQ】
  • 数分基础(05)中心极限定理、假设检验与AB测试简介
  • 多线程并发性
  • 二叉树展开为列表(LeetCode)
  • 改进YOLO的群养猪行为识别算法研究及部署(小程序-网站平台-pyqt)
  • 【通俗理解】最优控制之旅——强化学习中的策略优化
  • 物业|基于SprinBoot+vue的物业管理系统(源码+数据库+文档)
  • 深入理解 CSS Flex 布局
  • Golang 字面量的表示
  • 【HarmonyOS 4.0】应用级变量的状态管理
  • 每天一个数据分析题(五百一十二)- 数据标准化