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

在函数设计中应用单一职责原则:函数分解与职责分离

在函数设计中应用单一职责原则:函数分解与职责分离

引言

单一职责原则(Single Responsibility Principle, SRP)是面向对象设计原则中的核心原则之一,强调一个类或函数应该只有一个责任或理由去改变。在函数设计中,应用单一职责原则可以显著提高代码的可维护性、可读性和可测试性。本文将详细探讨如何在函数设计中应用单一职责原则,包括函数分解、职责分离及其最佳实践。

1. 单一职责原则概述

单一职责原则最初由罗伯特·C·马丁(Robert C. Martin)提出,主要适用于类和函数的设计。该原则规定,一个模块(类、函数、方法)应当只有一个原因去改变。简言之,一个函数应只做一件事,并且做好这件事。

1.1 单一职责原则的定义
  • 定义:一个函数应该只有一个职责,一个职责应当仅由一个函数来完成。
  • 原因:遵循单一职责原则可以使函数更易于理解、测试和维护。当一个函数有多个职责时,这些职责可能会相互影响,增加了函数的复杂性,导致代码难以理解和维护。
1.2 单一职责原则的好处
  • 提高可读性:每个函数的职责明确,易于理解其功能。
  • 增强可维护性:修改一个功能不会影响其他功能,减少了修改引发的风险。
  • 简化测试:函数职责明确,易于编写针对性的测试用例。
  • 促进重用:明确的功能可以更容易地被复用到其他地方。

2. 函数分解

函数分解是实现单一职责原则的重要手段,通过将复杂函数分解为多个小函数,每个小函数负责一个具体的任务,从而遵循单一职责原则。

2.1 识别职责

在分解函数之前,需要识别函数中包含的不同职责。可以通过以下方法识别职责:

  • 代码审查:阅读函数的代码,理解其执行的所有操作。
  • 功能分析:分析函数的功能,识别出哪些操作属于不同的功能模块。
  • 需求分析:从需求文档中理解函数需要完成的不同任务。
2.2 示例分析

假设我们有一个函数,它既负责读取文件数据,又负责数据处理和结果输出。这个函数的代码如下:

def process_file(file_path):with open(file_path, 'r') as file:data = file.read()processed_data = data_processing(data)with open('output.txt', 'w') as file:file.write(processed_data)

在这个例子中,process_file函数执行了多个职责:文件读取、数据处理和结果输出。为了遵循单一职责原则,我们需要将这些职责分解成不同的函数:

def read_file(file_path):with open(file_path, 'r') as file:return file.read()def write_file(file_path, data):with open(file_path, 'w') as file:file.write(data)def data_processing(data):# 数据处理逻辑return processed_datadef process_file(file_path):data = read_file(file_path)processed_data = data_processing(data)write_file('output.txt', processed_data)

在这个重构后的版本中,每个函数都有明确的职责:

  • read_file:读取文件数据。
  • write_file:写入数据到文件。
  • data_processing:处理数据。
  • process_file:协调这些操作。
2.3 函数分解的步骤
  1. 识别职责:审查函数,识别其执行的不同职责。
  2. 设计新函数:为每个职责设计一个独立的函数。
  3. 重构代码:将原函数中的代码迁移到新函数中,并使原函数调用这些新函数。
  4. 验证功能:确保重构后的代码仍然正确无误,并通过测试验证功能。

3. 职责分离

职责分离是实现单一职责原则的核心策略,涉及将不同的逻辑职责拆分到不同的函数中。通过职责分离,可以提高代码的组织性和清晰度。

3.1 例子:复杂函数重构

考虑以下复杂函数,它负责计算订单总价、处理折扣、打印账单等多个任务:

def process_order(order):total_price = calculate_total_price(order)discounted_price = apply_discount(total_price, order.discount)print_invoice(order.customer_name, discounted_price)

我们可以将这个函数分解成多个具有单一职责的函数:

def calculate_total_price(order):# 计算订单总价的逻辑return total_pricedef apply_discount(total_price, discount):# 应用折扣的逻辑return discounted_pricedef print_invoice(customer_name, amount_due):# 打印账单的逻辑passdef process_order(order):total_price = calculate_total_price(order)discounted_price = apply_discount(total_price, order.discount)print_invoice(order.customer_name, discounted_price)

在这个重构后的版本中,每个函数有明确的职责:

  • calculate_total_price:计算订单总价。
  • apply_discount:应用折扣。
  • print_invoice:打印账单。
  • process_order:协调这些操作。
3.2 函数职责分析

对于复杂函数的职责分析,考虑以下步骤:

  1. 拆分任务:将函数中的不同任务拆分为独立的职责。
  2. 创建函数:为每个任务创建一个函数,确保每个函数只负责一个具体的操作。
  3. 重组代码:将原函数的逻辑分配到这些新函数中。
  4. 优化接口:优化新函数的接口,确保它们的参数和返回值符合单一职责原则。

4. 实践中的挑战与解决方案

4.1 过度拆分

挑战:过度拆分可能导致函数过于简单,增加了函数调用的复杂性。

解决方案:确保拆分的合理性,避免将函数拆分得过于细致。应根据功能的复杂性和代码的可读性来判断拆分的程度。

4.2 维护函数间依赖

挑战:多个小函数可能会产生复杂的依赖关系,影响代码的维护性。

解决方案:通过良好的函数设计,保持函数间的独立性。使用接口和抽象类来管理函数间的依赖关系。

4.3 测试覆盖

挑战:拆分函数后,需要确保每个函数都被充分测试。

解决方案:编写针对每个函数的单元测试,确保所有功能都经过验证。使用测试覆盖工具来检查测试覆盖率。

5. 单一职责原则的应用示例

5.1 示例:用户认证系统

考虑一个用户认证系统,它需要验证用户凭证、记录登录日志、发送欢迎邮件。以下是一个初步实现:

def authenticate_user(username, password):# 验证用户凭证的逻辑return is_authenticateddef log_login(username):# 记录登录日志的逻辑passdef send_welcome_email(username):# 发送欢迎邮件的逻辑passdef handle_user_login(username, password):if authenticate_user(username, password):log_login(username)send_welcome_email(username)

在这个示例中,handle_user_login函数包含了多个职责。我们可以将其分解为更小的函数:

def authenticate_user(username, password):# 验证用户凭证的逻辑return is_authenticateddef log_login(username):# 记录登录日志的逻辑passdef send_welcome_email(username):# 发送欢迎邮件的逻辑passdef handle_user_login(username, password):if authenticate_user(username, password):log_login(username)send_welcome_email(username)
5.2 示例:订单处理系统

考虑一个订单处理系统,它包括计算总价、应用折扣、生成发票等功能。初始实现如下:

def process_order(order):total_price = calculate_total_price(order)discounted_price = apply_discount(total_price, order.discount)print_invoice(order.customer_name, discounted_price)

可以将这些功能拆分为独立的函数:

def calculate_total_price(order):# 计算订单总价的逻辑return total_pricedef apply_discount(total_price, discount):# 应用折扣的逻辑return discounted_pricedef print_invoice(customer_name, amount_due):# 打印发票的逻辑passdef process_order(order):total_price = calculate_total_price(order)discounted_price = apply_discount(total_price, order.discount)print_invoice(order.customer_name, discounted_price)

6. 总结与最佳实践

单一职责原则是设计高质量、可维护代码的基础。通过将函数分解为小而单一的职责,可以提高代码的可读性、可维护性和测试性。在实际应用中,遵循以下最佳实践:

  • 识别职责:仔细分析函数的职责,并根据职责分解函数。
  • 合理拆分:避免过度拆分,保持函数的合理大小和复杂度。
  • 维护依赖:使用接口和抽象类来管理函数间的依赖关系。
  • 测试覆盖:确保每个函数都经过充分的单元测试。
  • 代码审查:定期进行代码审查,确保遵循单一职责原则。

通过应用单一职责原则,开发人员可以创建更加模块化、灵活和易于维护的代码,从而提高软件系统的质量和可靠性。

相关文章:

在函数设计中应用单一职责原则:函数分解与职责分离

在函数设计中应用单一职责原则:函数分解与职责分离 引言 单一职责原则(Single Responsibility Principle, SRP)是面向对象设计原则中的核心原则之一,强调一个类或函数应该只有一个责任或理由去改变。在函数设计中,应…...

多线程锁机制面试

目录 乐观锁的底层原理 ReentrantLock的实现原理 读写锁 ReentrantReadWriteLock synchronized 底层原理 Lock和synchronized的区别 乐观锁的底层原理 版本号机制 在数据库表中添加一个版本号字段(如 version),每次更新数据时都会将版本号…...

《SQL 中计算地理坐标两点间距离的魔法》

在当今数字化的世界中,地理数据的处理和分析变得越来越重要。当我们面对一个包含地理坐标数据的表时,经常会遇到需要计算两点之间距离的需求。无论是在物流配送路线规划、地理信息系统应用,还是在基于位置的服务开发中,准确计算两…...

微服务可用性设计

一、隔离 对系统或资源进行分割,实现当系统发生故障时能限定传播范围和影响范围。进一步的,通过隔离能够降低系统之间得耦合度,使得系统更容易维护和扩展。某些业务场景下合理使用隔离技巧也能提高整个业务的性能。我理解隔离本质就是一种解…...

【扒代码】dave readme文档翻译

jerpelhan/DAVE (github.com) 摘要 低样本计数器估算选定类别对象的数量,即使在图像中只有少量或没有标注样本的情况下。目前最先进的技术通过对象位置密度图的总和来估算总数量,但这种方法无法提供单个对象的位置和大小,这对于许多应用来说…...

c语言---文件

这一节我准备分三个部分来带领大家了解文件 ——一、有关文件的基础知识 ————二、文件的简单操作 ————————三、文件结束的判定 ————————————四、文件缓冲区 一、文件的基础知识: 首先在了解文件之前,我们需要了解C/C程序内存…...

Windows系统下Go安装与使用

step1: 下载go语言SDK 下载地址:https://go.dev/dl/ 下载后选择合适位置安装即可,我选择D盘 在安装完成后,可以通过go env 命令检测是否安装成功。在“命令提示符”界面输入“go env”命令,如果显示如下类似结果则说明…...

day24-测试之接口测试基础

目录 一、接口的定义 二、接口的优点 三、API接口 四、接口测试流程 五、网络基础概念 六、HTTP和RURL 七、get和post请求 八、数据格式 九、状态码 十、restful风格 十一、接口工具 一、接口的定义 程序之间协作所要遵循的一套规范、标准 二、接口的优点 2.1.责任…...

TSN 交换机

TSN(Time-Sensitive Networking)交换机是一种支持时间敏感网络协议的网络交换设备,用于在以太网网络中实现低延迟、高确定性的数据传输。TSN 是一组 IEEE 802 标准的集合,旨在通过标准化的方式,将传统的以太网扩展到需…...

针对thinkphp站点的漏洞挖掘和经验分享

0x1 前言 浅谈 目前在学习和研究thinkphp相关漏洞的打法,然后最近对于thinkphp资产的收集方面有了一个简单的认识,然后写一篇新手看的thinkphp相关的漏洞收集和挖掘的文章来分享下。然后后面是给师傅们分享下后台文件上传,然后直接打一个ge…...

MySQL数据库入门,pycharm连接数据库—详细讲解

一.安装MySQL 1.常用MySQL5.7,首先安装MySQL, (一) (二) (三) (四) (五) 2.配置环境变量 打开MySQL安装路径,在其中找到…...

.bat文件快速运行vue项目

如何使用bat文件快速运行vue项目? 新建个文件,改名为serve.bat。 在文件中写入以下内容: # cd 项目路径 cd D:\projects\xxx npm run serve pausecd 项目所在的路径 npm run dev/serve ,取决于项目的启动方法,打…...

数据结构(邓俊辉)学习笔记】优先级队列 07——堆排序

1.算法 作为完全二叉堆的一个应用,这节来介绍堆排序算法。 是的,谈到优先级队列,我们很自然地就会联想到排序。因为就其功能而言,包括完全二叉堆在内的任何一种优先级队列都天生地具有选取功能,也就是选取其中的最大…...

npm install pnpm -g 报错的解决方法

npm install pnpm -g 报错的解决方法 npm error code ETIMEDOUT npm error errno ETIMEDOUT npm error network request to https://registry.npmjs.org/pnpm failed, reason: npm error network This is a problem related to network connectivity. npm error network In mo…...

集师知识付费小程序开发

智慧生活,从选择一款优质知识付费小程序起航 在这个信息爆炸的时代,知识成为了最宝贵的财富。我们渴望不断学习,提升自我,追求更高品质的生活。而一款优质的知识付费小程序,就如同照亮前行道路的明灯。 它是知识的宝库…...

前端开发提效工具——用户自定义代码片段

做开发总是会有大量的代码要写,但是有时候某些代码是非常基础但是很多,我们就可以把这一部分整合起来,使用一个很简短的关键字来快速唤出。 如何新建这样的代码段? 1.在VSCode当中找到Snippets,然后点击 2.之后会弹出…...

docker容器安全加固参考建议——筑梦之路

这里主要是rootless的方案。 在以 root 用户身份运行 Docker 会带来一些潜在的危害和安全风险,这些风险包括: 容器逃逸:如果一个容器以 root 权限运行,并且它包含了漏洞或者被攻击者滥用,那么攻击者可能会成功逃出容器…...

基于 Appium 的 App 爬取实战

除了运行 Appium 的基本条件外,还要一个日志输出库 安装: pip install loguru 思路分析 首先我们观察一下整个 app5 的交互流程,其首页分条显示了电影数据, 每个电影条目都包括封面,标题, 类别和评分 4…...

nvm与node安装

参考: 一文搞定NVM安装所有问题NVM UI解决nodejs下载慢问题 node_mirror: http://npmmirror.com/mirrors/node/ npm_mirror: http://registry.npmmirror.com/mirrors/npm/解决nvm list available报错问题 Could not retrieve https://npm.taobao.org/mirrors/node/…...

【电子通识】什么是MSL湿敏等级

潮敏失效是塑料封装表贴器件在高温焊接工艺中表现出来的特殊的失效现象。 造成此类问题的原因是器件内部的潮气膨胀后使得器件发生损坏。 MSL是“Moisture Sensitivity Level(湿气敏感性等级)”的缩写,针对需进行回流焊的产品设定了MSL基准。…...

【ARM 芯片 安全与攻击 5.4 -- Meltdown 攻击与防御介绍】

文章目录 什么是 Meltdown 攻击?Meltdown 攻击的基本原理Meltdown 攻击代码示例Meltdown 攻击在芯片中的应用应用场景Meltdown 攻击与瞬态攻击、测信道攻击的关系针对 Meltdown 攻击的防御硬件级防御Summary什么是 Meltdown 攻击? Meltdown 攻击是一种利用处理器乱序执行(o…...

Django 后端架构开发:分页器到中间件开发

🚀 Django 后端架构开发:分页器到中间件开发 🚀 🔹 应用样式:上下翻页 分页功能在处理大量数据时非常有用。通过上下翻页,我们可以让用户轻松浏览数据。以下是一个展示产品列表的分页示例: fr…...

亲测解决The client socket has failed to connect to

这个问题是因为深度学习的程序(服务)跟本地主机连接不上,解决方法是确认rank起始数为0。 报错原文 [W socket.cpp:663] [c10d] The client socket has failed to connect to [csdn-xiaohu]:12345 (errno: 22 - Invalid argument).解决方法 …...

Intel ACRN 安装WIN10 VM

上一篇帖子记录了ACRN运行rt linux,这篇帖子记录一下最近倒腾出来的WIN10。目前架构如下 ACRN可以把它理解为一个基于Linux类似软件的Type1 Hypervisor,基于Linux去做而不是baremetal是为了更方便去配置资源。 首先我们得有两台电脑,一台是开…...

贷齐乐案例

源码分析&#xff1a; <?php // 设置 HTTP 头部&#xff0c;指定内容类型为 text/html&#xff0c;字符集为 utf-8 header("Content-type: text/html; charsetutf-8"); // 引入数据库配置文件 require db.inc.php; // 定义函数 dhtmlspecialchars&#xff0c;用…...

[Qt][Qt 网络][下]详细讲解

目录 1.TCP Socket1.核心API概览2.回显服务器3.回显客户端 2.HTTP Client3.其他模块 1.TCP Socket 1.核心API概览 核⼼类是两个&#xff1a;QTcpServer和QTcpSocketQTcpServer用于监听端口&#xff0c;和获取客户端连接 listen(const QHostAddress&, quint16 port)&#…...

十三、OpenCVSharp的目标检测

文章目录 简介一、传统目标检测方法1. 基于滑动窗口的检测2. 特征提取与分类器结合(如 HOG + SVM)3. 级联分类器二、基于深度学习的目标检测1. YOLO 系列算法2. SSD 算法3. Faster R-CNN 算法三、深度学习目标检测模型的训练和部署四、目标检测的性能评估指标1. 准确率、召回…...

STM32标准库学习笔记-6.定时器-输入捕获

参考教程&#xff1a;【STM32入门教程-2023版 细致讲解 中文字幕】 定时器输入捕获 IC&#xff08;Input Capture&#xff09;输入捕获输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前CNT的值将被锁存到CCR中&#xff0c;可用于测量PWM波形的频率…...

vue前端可以完整的显示编辑子级部门,用户管理可以为用户分配角色和部门?

用户和角色是一对多的关系用户和部门是多对多得关系<template><div class="s"><!-- 操作按钮 --><div class="shang"><el-input v-model="searchText" placeholder="请输入搜索关键词" style="width:…...

量化交易的基石:ExchangeSdk

作为长期混迹在合约市场的老韭菜来说&#xff0c;已不能满足与手动下单来亏钱&#xff0c;必须得通过脚本来加速&#xff0c;为了达到这个目的就产生了项目。目前封装的主要是合约的API接口&#xff0c;不支持现货交易。 Github: https://github.com/silently9527/exchange-sdk…...

【区块链+金融服务】基于区块链的一站式绿色金融开放平台 | FISCO BCOS应用案例

科技的进步为绿色金融发展提供了新的机遇&#xff0c;但银行、企业、第三方金融机构等在进行绿色金融业务操作过程中&#xff0c; 存在着相关系统和服务平台建设成本高、迭代难度大、数据交互弱、适配难等痛点。 基于此&#xff0c;中碳绿信采用国产开源联盟链底层平台 FISCO …...

使用Python实现深度学习模型:智能娱乐与虚拟现实技术

介绍 智能娱乐与虚拟现实(VR)技术正在改变我们的娱乐方式。通过深度学习模型,我们可以创建更加沉浸式和智能化的娱乐体验。本文将介绍如何使用Python和深度学习技术来实现智能娱乐与虚拟现实的应用。 环境准备 首先,我们需要安装一些必要的Python库: pip install pand…...

亚马逊云科技产 Amazon Neptune 图数据库服务体验

目录 图数据库为什么使用图数据库Amazon Neptune实践登陆创建 S3 存储桶notebook图神经网络快速构建加载数据配置端点Gremlin 查询删除环境删除 S3 存储桶 总结 图数据库 图数据库是一种专门用于存储和处理图形数据结构的数据库管理系统。图形数据结构由节点&#xff08;Node&…...

【网络安全】重置密码token泄露,实现账户接管

未经许可&#xff0c;不得转载。 文章目录 正文 正文 对某站点测试过程中&#xff0c;登录账户触发忘记密码功能点&#xff0c;其接口、请求及响应如下&#xff1a; PUT /api/v1/people/forgot_password 可以看到&#xff0c;重置密码token和密码哈希均在响应中泄露。 删除co…...

计算机基础知识复习8.13

cookie和session区别 cookie:是服务器发送到浏览器&#xff0c;并保存在浏览器端的一小块数据 浏览器下次访问服务时&#xff0c;会自动携带该块数据&#xff0c;将其发送给服务器 session:是javaEE标准&#xff0c;用于在服务端记录客户端信息 数据存放在服务端更加安全&a…...

Unity URP无光照下Shadow 制作 <二> 合批处理

闲谈 相信大家在日常工作中发现了一个问题 &#xff0c; urp下虽然可以做到3个Pass 去写我们想要的效果&#xff0c;但是&#xff0c;不能合批&#xff08;不能合批&#xff0c;那不是我们CPU要干冒烟~&#xff01;&#xff09; 好家伙&#xff0c;熊猫老师的偏方来了 &#x…...

微乐校园pf

TOC springboot451微乐校园pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这…...

文件其他相关函数

symlink 链接文件: file.txt -> hello.c 软链接文件、符号链接文件 硬链接文件 命令行&#xff1a;ln -s 123 softlink 快捷方式 int symlink(const char *oldpath, const char *newpath); 功能: 创建一个链接向oldpath文件的新符号链接文件 参数: oldpath:被链接向…...

SQLALchemy ORM 的关联关系之 ORM 中的多对多

SQLALchemy ORM 的关联关系之 ORM 中的多对多 场景示例实现多对多关系定义模型插入和查询数据总结在 SQLAlchemy ORM 中,多对多(Many-to-Many)关联关系是一种常见的关系类型,它表示两个表中的行可以相互关联,即一个表中的多行可以与另一个表中的多行相关联。为了实现这种关…...

sdkman install慢,采用squid代理

(1)A机器,IP:yy.yy.yy.yy 安装squid yum install squidvi /etc/squid/squid.confacl allowed_ip src xx.xx.xx.xx http_access allow allowed_ip http_access deny allsystemctl restart squid 开放3128端口 (2)B机器&#xff0c;IP:xx.xx.xx.xx, export http_proxyhttp://y…...

实时监控Windows服务器:使用Prometheus和Grafana的终极方案

视频指南 【1】快速上手&#xff1a;在Windows系统上部署Prometheus与Grafana&#xff0c;实时监控性能指标 【2】快速上手&#xff1a;在Windows系统上部署Prometheus与Grafana&#xff0c;实时监控性能指标 1. 下载并安装 Prometheus 下载 Prometheus&#xff1a; 访问 Pro…...

【文科生能看懂的】牛顿二项式定理

牛顿二项式定理 简单的二项式整数次幂展开的结果中的规律结果中各项的指数结果中各项的系数 二项式定理 牛顿二项式定理就是用来求某个二项式的整数次幂的展开式的。 简单的二项式整数次幂 我们可以先从简单的情况开始&#xff0c;比如二项式 ( a b ) (ab) (ab)的整数次幂&a…...

Fly Catcher:通过监测恶意信号来检测飞机欺骗

Fly Catcher 的开发者 Angelina Tsuboi 是一名飞行员、网络安全研究员和发明家。 她决定着手一个将这三个不同兴趣结合起来的项目&#xff0c;以解决航空雷达系统的一个重大问题。 ADS-B 系统最初用于基本的飞机定位和跟踪&#xff0c;Tsuboi 对该系统的网络安全方面进行了深…...

计算机网络——HTTP协议详解(上)

一、HTTP协议简单介绍 1.1 什么是HTTP协议 HTTP&#xff08;超文本传输协议&#xff09;是一种用于在Web浏览器和Web服务器之间传输数据的应用层协议。它是一种无状态协议&#xff0c;即服务器不会保留与客户端的任何连接状态信息&#xff0c;每个请求都被视为一个独立的事务。…...

十九、中介者模式

文章目录 1 基本介绍2 案例2.1 Developer 抽象类2.2 FrontendDeveloper 类2.3 BackendDeveloper 类2.4 Mediator 接口2.5 ProjectManager 类2.6 Client 类2.7 Client 类的运行结果2.8 总结 3 各角色之间的关系3.1 角色3.1.1 Colleague ( 同事 )3.1.2 ConcreteColleague ( 具体的…...

编程参考 - 头文件中使用static inline

在Linux kernel的头文件中&#xff0c;经常使用static inline来声明一个函数。 比如include/linux/delay.h中&#xff0c; static inline void ssleep(unsigned int seconds) { msleep(seconds * 1000); } static Keyword * 范围限制&#xff1a; 当应用于函数或变量时&#…...

Uniapp使用antd组件库

组件库官网 https://www.antdv.com/docs/vue/introduce-cn 安装 在命令行终端输入 npm uni --save ant-design-vue配置 我这里用的是uniapp的vue3版本模板 在main.js里面引入 只要改下面带序号的地方即可 import App from ./App// #ifndef VUE3 import Vue from vue im…...

计算机毕业设计选题推荐-高校实验室管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

nest定义响应码message文本

需求 需要对接口的异常响应码&#xff0c;手动设置message文本&#xff01;&#xff01;&#xff01; 例如&#xff1a;项目中使用multer中间件实现文件上传&#xff0c;multer设置了文件大小限制&#xff0c;该中间件校验文件时错误&#xff08;文件超出&#xff09;会自动响…...

Java | Leetcode Java题解之第342题4的幂

题目: 题解&#xff1a; class Solution {public boolean isPowerOfFour(int n) {return n > 0 && (n & (n - 1)) 0 && n % 3 1;} }...