教你写出无法维护的代码


关于注释

尽量不要写注释

时刻要相信你的代码很优美,它不需要注释。如果有人不理解你的代码,那么很有可能他们不是那么好的程序员

注意注释细节

如果你被规定约束,一定要写注释的话,那就尽可能的详细,一定要把所有细节都写下来,比如下面就是一个完美的例子

// 下面这一块代码
   // 我们增加两个变量:
   // 命名为变量 a 和变量 b
   // 两个都是整数

   // 声明变量 a
   // 并给它赋值整数 1
   $a = 1;
   // 声明变量 b
   // 并给它赋值整数 2
   $b = 2;

   // 给变量 a 和 b 求和
   // 声明和初始化见上面
   // 并且将结果赋值给
   // 一个新的变量 c
   $c = $a + $b;

注意注释和实际代码的不统一性

这是在团队协作开发中极其重要的一点,事实上,你并不需要刻意在注释中撒谎,只需要更新代码时,不更新注释说明就可以了。

利用好注释块

这是在编码中不可多得的好地方,不仅仅是写注释,你可以利用它实现你的其他想法,比如:发泄日常的不满、说一些想说的话,总之,好好利用它

不要注释度衡单位

比如时间用的是秒还是毫秒、尺寸用的是像素还是英尺、文件大小用的是Kb还是MB、另外最有效的方法还是在代码里实现多种度衡单位的混用,这一点在接下来会详细讲到。

关于命名

经常用一些比较容易输入的变量名

比如:$qwer、$qaz、$fred。

单字母函数

为了效率,可以尽量使变量名简洁,比如$a、$b、$c,如果单字母变量名不够用的话还可以:$a1、$a2、$a3。

拼写错误

在命名时,可以偶尔的有创意的拼写错误,这样不仅提高代码可读性,还能做到不易搜索,比如:SetDefauItValue、GetFiIePath。

命名缩写

好好利用缩写或一些时下流行词,比如:wtf、awsl、yyds、yygq,有时拼音缩写的效果会更加显著,比如:tmd、hqmrpz(获取默认配置)

相似的命名

使用相似的命名,从视觉来看大写的i和小写的L是不太容易区分的,好好利用这一点

$I 和 $l

类似的还有:i 和 1,0 和 O

还可以利用 _ 来制造更多的迷惑

$a_b 和 $a__b

结合上面的部分你可以得到:xj_S, xj__s, _xj_s, _xjs, XJ_S, xJ_s, Xj_s

你还可以利用随机大写来制造更复杂的变量名

比如:gEtuSEriNfO、gETmEMbeRdEtAIl

巧妙的利用重音字母,会达到意想不到的结果

比如 $ínt 和 $int

还有一项终极做法是,命名使用不同的语言,比如:同一变量使用英语法语混合声明、函数名使用法语德语混合声明,还有一种东西叫做:西里尔字母

不相关命名

使用一些不相关的单词来命名,命名不一定要贴切,但一定要炫酷个性,比如:goodman、superman、iloveu、supreme

关于规范

配置数字

如果你的程序里有多个类的多个地方使用了一个数字,不要犹豫,封装它,保证每个用到它类都有它的身影,查询数据库和设置全局变量是一个坏的注意

PHP的函数是不区分大小写的,好好利用这一点.

function abd()
{
	echo 'abc';
}

ABC();

拓展知识:PHP数组的key会对大小写敏感,也可以好好利用这一点

$data['userKey'] = 1;
$data['userkey'] = 2;

操作符重载

如果你会一些底层的编程知识,你可以重新定义操作符,这会让你的代码变得诡异,可以把代码的混乱提高到一种艺术的形式。
比如:重载一个类的 ! 操作符,但实际功能并不是取反,让其返回一个整数。
于是你:if(!$result)时,就会执行意想不到的结果。

大量嵌套

一个厉害的程序员,为了展示自己的逻辑有多强,可以进行多层的嵌套,比如

if(){
	if(){
		foreach(){
			if(){
				for(){

				}
			}
		}
	}else{
		if(){

		}elseif(){
			foreach(){
				for(){
					switch(){

					}
				}
			}
		}else{
			switch(){

			}
		}
		if(){
			switch(){

			}
		}else{
			for(){

			}
		}
	}
}else

进阶法:嵌套时,尽量少用{},而且可以不规范缩进,会让代码可读性进一步降低

if(){
if(){
		$a = 1;
	}elseif(){
			return 1;
	}else
var_dump('info');
	}else
echo 'else';

当然,没有什么是比嵌套三元运算更简洁的代码了。

echo true ? 'true' : false ? 'true' : 'false';

优秀的程序员可以在一行代码里嵌套10层(),亦或是在一个方法里嵌套20层{}

分解条件表达式

有时条件表达式可以由一个分解成多个,而且分解的越多,达到的效果更明显

$a == 100 分解为 : $a > 99 && $a < 101

巧妙的使用多层循环来替代复杂的查询语句

巧妙的使用多层循环可以让你日常的查询条件变得简单

尽量减少换行

减少换行会让你的代码看起来更少,让别人误以为你的代码很简洁,配合巧用 ; 符号,会让代码读起来更加困难

if($code == 1){
	$user['key'] = 1;
	return $user;
}else{
	if(empty($default))
		$user['key'] = $default;
	else
		$user['key'] = 0;
}

换成

if($code == 1){$user['key'] = 1;return $user;}else{if(empty($default))$user['key'] = $default;else$user['key'] = 0;}

全局变量遍地开花

把全局变量的初始化,放在不同的函数中,最好是这个函数和这个变量没有丝毫的关系,这样别人在维护我们的代码时可以培养侦探思维

永远不要进行验证

从不验证输入的数据,从不验证函数的返回值。这样做可以向大家展示你是多么的信任公司的设备和其它同事

尽可能的进行复制和粘贴

为了效率,你要学会使用 control+C control+V,你完全不需要理解别人的代码,就可以高效地编程了。

使用多维数组

实际开发过程中,尽可能的使用多维数组,因为它能集合更多的数据,如果你觉着三维、四维还不够的话,可以尝试一下五维

保留弃用的函数和变量

有时新的需求会需要对函数进行重构,这时不要删除老的函数,并且不要进行注释说明,让同事不知道哪一个是新的哪一个是老的,这样,不管是谁接手你的代码,都不敢对它轻举妄动,从而最大程度上的保留你所写的代码

避免封装,或是全力封装

如果一个函数在多个类中被频繁使用,那么,你可以做的就是
1、不要封装它,在每个类中都声明一遍,最后别忘了在公共类和基础类中也声明一遍。
2、封装它,并且把它封装的无与伦比,让它可以仅用一个参数就能处理所有类中的各种不同的逻辑调用

关于测试

永远不要进行测试

测试是给懦夫用的,勇敢的程序员会跳过这个步骤,程序员的工作是生产代码,测试和调试工作完全可以由技术支持和遗留代码维护组通力合作来进行。向任何质疑你的人解释,你是被雇佣过来编写高质量并且没有漏洞的代码的,因此,你所编写的代码无需测试。为什么会有头脑正常的人会花时间来写无关紧要的测试来证实代码能否正常运行?如果被迫接受测试,那么准备好测试那些显而易见的内容然后跳过其他的部分,面对用户遇到的问题,最好的回答永远都是:“应该是您的账号出现了问题,您可以试着重新注册一个账号”。

不需要做性能测试

如果有人质疑你的代码性能,只要告诉他:“你应该买一个性能更好的机器来运行它”,就够了,每个编程语言都有一些功能十分强大的类库,不要犹豫,引入它们,即使你用不到,这会让你的项目更加臃肿,不过不用担心,同时它们也会进一步拉低你的程序性能,有什么关系呢?

今后你的求职简历上可以大方的写上这些类库的使用记录,并且我相信你很快就会用到它!


文章作者: Justin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Justin !
评论