谈谈硬编码

本文探讨了硬编码在软件开发中的普遍现象及其潜在问题,如影响程序灵活性和维护性,并提出了通过设置变量来提高代码可扩展性和适应性的方法。

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

硬编码对于程序员来说都不陌生,只是个很简单的概念,但是它却常常出现在N多程序中.
在开发的时候,开发人员有时候图方便,赶进度,或者想不到更好的方法,只好将某些业务逻辑固定死,常见如下判断
if (a == "拟制中")
{
 ....
}
也许好一些的会用数字代替 比如用个"02"代替,也许程序跑个1两个月甚至一两年都没问题
但是需求更改或者用户环境变化了,那问题就会暴露,而且影响是明显的.
比如用户改成英文环境了,变量a的值变成了英文字符串"drafting",那么这个判断就不成成立了,如果这个判断是涉及到流程,这一步出错,程序再往下走也就是一错再错.也许有人说,不用字符串判断,改成数字就可以避免,但是也许某天这个数字跟其他业务逻辑发生重叠,那还是没实现根治,解决方法我相信大伙都明白,其实只是简单的设置一个变量保存常量,比如
string Drafting = "拟制中",
if (a == Drafting)
{
 ....
}
那么a的值改了,相应修改drafting的值,哪怕是a变成英文,也可以事先改变好Drafting的值,这样简单处理,即可实现编码更改的无缝兼容,让编码变"软"了.当然前提是在开发的时候就做好.

再比如某些系统设计到人员权限等信息,某某单据必须让管理员甲审核,开发时管理员是甲,但是不久甲离职或调动了不当管理员了,但是系统审核的单据信息还是发给甲,如果甲的人员信息还保存在数据库中,程序还能跑,而实际上HR会毫不留情的删除掉甲的信息并且不通知开发人员.这样程序还继续执行的话,要么抛个空指针异常,要么抛个范围溢出异常,影响后续流程.而事实上,只要设置一个管理员标记,或者动态给个方法获取管理员,也就省了后续麻烦

当然硬编码的现象并不是仅仅出现在逻辑判断中,比如javascript,如果写的脚本仅仅能在IE运行,那么也就成了典型的硬编码了,诸多现实的例子就不举例了.所以,对于程序员来说,硬编码好比是程序的硬伤,追根到底不仅编码人员有责任,设计人员也因改意识到根据用户需求展开可扩展的设计.

 

 

------------------------------------------------------------------------------------------------------

原文地址:http://www.cnblogs.com/shenba/archive/2007/08/22/866045.html

在 Python 中,`super()` 是一个内置函数,用于调用父类方法。`super()` 函数可以在子类中调用父类中被重写的方法,从而实现对父类方法的继承并且进行扩展。使用 `super()` 函数的好处是,它能够动态地查找当前子类继承链中的下一个类,从而允许我们更加灵活地组织代码,同时也能够避免硬编码父类名称所带来的问题。 在使用 `super()` 函数时,需要注意以下几点: - `super()` 函数需要传入两个参数,第一个参数是当前子类的类名,第二个参数是当前对象。 - `super()` 函数返回的是一个代理对象,而不是真正的父类对象,因此需要通过该代理对象调用父类的方法。 - 如果在多重继承的情况下,需要在所有的父类中使用 `super()` 函数,否则可能会出现调用错误的情况。 下面是一个简单的示例代码,演示了如何使用 `super()` 函数调用父类方法: ```python class Animal: def __init__(self, name): self.name = name def eat(self): print("{} is eating...".format(self.name)) class Dog(Animal): def __init__(self, name, breed): super().__init__(name) self.breed = breed def eat(self): super().eat() print("{} is a {} dog".format(self.name, self.breed)) dog = Dog("Buddy", "Golden Retriever") dog.eat() ``` 在上面的代码中,我们定义了一个 `Animal` 类和一个 `Dog` 类,`Dog` 类继承自 `Animal` 类。`Animal` 类中有一个 `eat()` 方法,用于描述动物的进食方式。`Dog` 类中重写了 `eat()` 方法,并使用 `super()` 函数来调用父类 `Animal` 的 `eat()` 方法。当我们创建 `Dog` 类的对象 `dog` 并调用 `eat()` 方法时,会输出以下结果: ``` Buddy is eating... Buddy is a Golden Retriever dog ``` 可以看到,在 `Dog` 类的 `eat()` 方法中,首先调用了父类 `Animal` 的 `eat()` 方法,然后再输出狗的品种。这样做的好处是,当我们修改父类 `Animal` 的 `eat()` 方法时,子类 `Dog` 的方法也会随之改变,而不需要手动修改子类的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值