少用数字来作为参数标识含义

本文探讨了在软件开发中使用字符串而非数字作为标识符的优势,特别是在提高代码可读性和维护性方面。通过实例展示了如何在实际场景中应用这些原则。

 

 

数字很难标明业务含义,大脑难记忆,前端的沟通成本增加,传错数字后,数据则插错表,调试定位困难,消耗了精力。

 

解决方案是:   避开数字标识。客户端使用字符串为参数,告诉服务端,如微信的支付类型使用trade_type=JSAPI|MWEB分别表示公众号支付和h5支付。这里若使用数字,确实难以理解业务意义。淘宝开放给商家的api查询指定订单状态,使用的为字符串status=WAIT_BUYER_PAY|WAIT_SELLER_SEND_GOODS。数据库存储的是数字,服务端做了一层转换成数字的操作。

 

 

http://open.taobao.com/docs/doc.htm?articleId=102856&docType=1&treeId=1

交易状态    

                               

    •  

    • WAIT_BUYER_PAY:等待买家付款

    •  

    • WAIT_SELLER_SEND_GOODS:等待卖家发货

    •  

    • SELLER_CONSIGNED_PART:卖家部分发货

    •  

    • WAIT_BUYER_CONFIRM_GOODS:等待买家确认收货

    •  

    • TRADE_BUYER_SIGNED:买家已签收(货到付款专用)

    •  

    • TRADE_FINISHED:交易成功

    •  

    • TRADE_CLOSED:交易关闭

    •  

    • TRADE_CLOSED_BY_TAOBAO:交易被淘宝关闭

    •  

    • TRADE_NO_CREATE_PAY:没有创建外部交易(支付宝交易)

    •  

    • WAIT_PRE_AUTH_CONFIRM:余额宝0元购合约中

    •  

    • PAY_PENDING:外卡支付付款确认中

    •  

    • ALL_WAIT_PAY:所有买家未付款的交易(包含:WAIT_BUYER_PAY、TRADE_NO_CREATE_PAY)

    •  

    • ALL_CLOSED:所有关闭的交易(包含:TRADE_CLOSED、TRADE_CLOSED_BY_TAOBAO)

    •  

    • PAID_FORBID_CONSIGN,该状态代表订单已付款但是处于禁止发货状态。

 

 什么情况下使用数字标识?

 

只有两种状态,0和1,开和关,容易使用数字来表示,超过2种,难记住数字代表的含义了。即便只有两种状态,使用字符串也比数字更加容易理解业务意义。

 

如使用on来代表开启,使用off来代表关闭。非常明确。若使用1和0来标识,1到底是删除还是不删除,如果没有注释说明,需要去猜测,每个人设计习惯不一样,增加误解。

 

 

 

 

 

 

给外部看使用字符。而数据库存储,使用数字存储

数据库之所以存储数字,有一些好处:

 

  • 数字减少存储空间,空间减少,表体积越小,性能越好。

 

  • 数字的查询性能更好:做比较判断和范围筛选)

     

  • 可以灵活适应变化。以后需求改变了,转成任意文字显示,做数字到文字之间的映射,会很方便。如果使用字符串存储

 

 

  在这方面,踩过一些坑,如代码调用出错、出现bug难定位原因、增加误解、耗费沟通时间。开发人员陷入到不必要的麻烦中去。

 总之,有个原则,代码中无论是函数、变量、类的命名,能准确表达业务含义的命名,就是好的命名。

 

转载于:https://www.cnblogs.com/wangtao_20/p/8319813.html

<think>首先,用户的问题是:"我想了解C++中参数和重载的含义请问C++参数和重载的定义及用法"。所以,我需要解释C++中的参数(函数参数)和重载(函数重载)的定义和用法。从提供的引用中:-引用[1]谈到了函数重载:重载声明是指同名函数在相同作用域内,但参数列表不同(个数、类型或顺序不同)。不能仅通过返回类型重载。-引用[2]深入讨论了函数重载,包括构成条件、底层原理(名字修饰)。-引用[3]提到了重写(覆盖)和重定义,但用户的问题只涉及参数和重载。-引用[4]涉及默认参数和函数重载。用户的问题具体是"参数和重载"。这里的"参数"很可能指的是函数参数,因为重载是函数重载的关键在于参数列表的不同。所以,我应该解释函数参数和函数重载。定义:-**函数参数**:在C++中,函数参数是函数定义中声明的变量,用于接收函数调用时传入的值。参数包括参数的个数、类型和顺序。-**函数重载**:允许在同一作用域内定义多个同名函数,但它们的参数列表必须不同(即参数个数、类型或顺序不同)。这实现了多态性的一个形式,称为编译时多态或函数多态。用法:-重载函数的例子:如引用[1]中,printData类中有多个print函数,一个接受int,一个接受double,一个接受char数组。-参数不同的方式:-个数不同:如voidf(int);voidf(int,int);-类型不同:如voidf(int);voidf(double);-顺序不同:如voidf(int,double);voidf(double,int);——但要小心,因为顺序不同可能导致歧义。-返回值不能用于重载:如不能有intf(int);和doublef(int);,因为编译器无法分辨。根据系统指令:-所有行内数学表达式必须使用$...$格式:这里可能没有太多数学,如果提到类型,可以用$int$,$double$等表示。-独立公式必须使用$$...$$格式:如果有代码段,我应该单独成段。-用中文回答。-生成相关问题。-在引用末尾添加引用标识:[^数字]。我参考了提供的引用[1]和[2],因为用户指定"参考站内引用",我应该尽量基于这些。回答结构要清晰:我应逐步解释。1.**函数参数的定义和用法**:-定义:函数参数是函数声明的输入列表。-用法:在函数调用时提供值或变量。-类型:可以有默认参数(从引用[4]提到),但用户没问默认参数,所以我可能简要提及。2.**函数重载的定义和用法**:-定义:多个同名函数在不同参数列表下。-用法:通过参数列表匹配调用合适的函数。-底层原理:名字修饰(namemangling),如引用[2]提到的C++编译器的规则。3.**注意事项**:-不能仅通过返回类型重载。-参数列表必须不同。-作用域相同。最后,生成相关问题:基于主题,提出相关问题来深化理解。完整回答结构:-引言:简要介绍主题。-解释函数参数。-解释函数重载。-用法示例。-注意事项。-相关问题。使用代码示例:如引用[1]中的代码,我可以类似提供一个简单例子。确保中文。</think> ### C++ 中函数参数和重载的定义及用法 在C++编程中,函数参数(parameters)和函数重载(overloading)是实现多态性和代码重用性的核心概念。函数参数定义了函数接受的输入类型和结构,而函数重载允许在同一作用域内定义多个同名函数,但其参数列表必须不同(如参数的个数、类型或顺序)。下面我将一步步解释其定义、用法和注意事项。 --- ### 1. **函数参数的定义及用法** - **定义**:函数参数是函数声明或定义中的输入变量,用于接收调用函数时传递的实参(arguments)。参数指定了函数的“输入签名”,包括: - 参数的个数(例如,一个参数 vs. 两个参数)。 - 参数的类型(例如,$int$、$double$、字符数组等)。 - 参数的顺序(例如,$int$ 在前 vs. $double$ 在前)。 参数在函数作用域内作为局部变量使用,接收调用时传入的值[^1][^4]。 - **用法**: - 在函数定义中声明参数列表,例如:`void print(int i) {...}`,这里 `int i` 是参数。 - 在函数调用时传递实参,编译器会根据实参类型和数量匹配参数: ```cpp #include <iostream> using namespace std; void display(int num) { cout << "整数: " << num << endl; } int main() { int a = 10; display(a); // 调用display函数,实参a赋值给参数num return 0; } ``` - 默认参数:C++支持默认参数,即在声明时为参数指定默认值,简化调用(如 `void func(int a = 0)`)。但不能与重载混淆,重载的参数列表必须显式不同[^4][^2]。 - **关键注意事项**: - 参数的类型和数量在编译时确定,实现编译时多态。 - 默认参数只能放在参数列表的末尾,避免歧义[^4]。 --- ### 2. **函数重载的定义及用法** - **定义**:函数重载允许在同一作用域内定义多个同名函数,但这些函数的参数列表必须不同(不能仅通过返回类型重载)。编译器根据调用时实参的类型、个数和顺序自动选择最匹配的函数定义(称为重载决策)[^1][^2]。 - 重载条件(三者任一): - 参数个数不同:如 `void f(int)` vs. `void f(int, int)`。 - 参数类型不同:如 `void f(int)` vs. `void f(double)`。 - 参数顺序不同:如 `void f(int, double)` vs. `void f(double, int)`。 - 返回值类型不能用于重载:`int f()` 和 `void f()` 会编译错误,因为编译器无法区分[^1]。 - **用法**: - 通过改变参数列表实现功能多样化: ```cpp #include <iostream> using namespace std; // 重载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值