思考:如何写出让同事难以维护的代码?doge

共 4510字,需浏览 10分钟

 ·

2023-05-20 22:10



743f89dac23ffc90de645db622526d9e.webp





导读






本文从【程序命名&注释】【数据类型&类&对象】【控制执行流程】和【程序/结构设计】四个方面梳理了一些真实案例,相信通过这些案例你能迅速get技能:如何写出让同事难以维护的代码doge。


摘要概览



比起什么程序员删库跑路,我更喜欢「写出让同事难以维护的代码」,因为即使不能「名垂千古」,至少VCS可以帮你「遗臭万年」。


本文从【程序命名&注释】【数据类型&类&对象】【控制执行流程】和【程序/结构设计】四个方面梳理了一些真实案例,相信通过这些案例你能迅速get技能:如何写出让同事难以维护的代码doge。
说回正题,前几天在家附近的一个小学校旁边散步,突然听到某个学生说“上学期我是‘三好学生’,xxxx”。想了想,学生有“三好”,那么程序员“三好”是什么?
我认为程序员的“三好”是「好用」,「好看」,「好改」。这个是说程序员的代码:

  • 要正确且健壮,就是好用;


  • 要可读性高,易于理解,就是好看;


  • 要方便扩展和改动,就是好改;


平时不少文章都在聊“三好”的正例,今天理一些「好看」的反例,希望给读者一些启发和印象,避免编码中的一些问题,争取做个“三好程序员”吧。


一、程序命名&注释




1.1教你如何挑战维护者






容易输入的变量名


比如:Fred,asdf单字母的变量名。
比如:a,b,c,x,y,z(如果不够用,可以考虑 a1,a2,a3,a4,….)


有创意地拼写错误


比如:SetPintleOpening, SetPintalClosing,这样可以让人很难搜索代码。



42d1b354916f41e8526cf342e0bb950f.webp



使用缩写和拼音



比如:WTF,RTFSC …… (使用拼音缩写也同样给力,比如:BT,TMD,TJJTDS)



论注释的重要性:不然我以为是「驾校」是一类重要客户,要有单独的helper



7c002bee29b71348a812b1216695c34a.webp







1.2嵌入式文档之殇=注释






不要盲目修改,注意理解!!!



注意理解,你会发现其中的不同点……



de4d7e0f1a0439098ff4c5d660f325fe.webp



「注意理解」之后,意外出现了……



8e9bf5aa74682bbe46e005e490f1df1c.webp



程序回忆录



long~ long ago~【狼,狼,啊狗】🐶



72b998aa4c3ddc14e9e72809ee6dd29c.webp



千万注意something



实在不知道注意什么……



0bbe2574597af5b80a764aac57406a68.webp



用注释保留一些秘密



4397926f716abf62797681df296ee0f3.webp


二、数据类型&类&对象




2.1教教你怎么用数组



无所不能的多维数组



如果你觉得二维、三维还不足够,你可以试试四维。



仔细品一品,这个排版和换行可以教你快速数下标的方法:行号-44,比如“常驻工作城市”的下标就是25
。



bff79dcabc776eccc4254e21ec44904c.webp



想清楚下标了再调用



一切皆对象,数组也是对象,用就是了



c831d9bab2ef15eaaba4b76bb6eca859.webp







2.2对象?"类"觉不爱






员工服务的四胞胎:俩哥哥service,俩妹妹helper;



——「木兰辞」:"四"兔傍地走,安能辨我是雌雄雄雌;



e245bed11b97f0503eb542e471fd965b.webp


三、控制执行流程







3.1开胃菜:if-else






巨大的processor。写一个 processor,然后让你的所有的 consumer 类都使用这个 processor,这样你可以在这个 consumer 中整出一大堆 if…else… 语句,相当的刺激。



eede8a10694a0ca4e7547202fc56899e.webp



3c70216e9aaca13b977c5029a11515d7.webp



当return和不return混杂在一起的时候,这份刺激中又多了些惊喜……



64de74535440be6ef375f3774dcb6c81.webp







3.2大菜:「海鲜拼盘」






下面这个600行的方法让我学会了「截长图」



c6cf2c3211eb9dde77e50538b59fbe8d.webp



🐶这是个switch-for-if-continue-return组合,很能理解「作者实在没法把break和goto加进去」的苦衷。



——报告老师:“第四章我已经掌握了”



fca4740d5f278c0091c9077738934dad.webp



接下来见证遗迹的时刻……



建议:多来来回回的读读这段代码,有助于锻炼眼球灵活性,并且能有效抵抗颈椎病



c38e9bb40584b48cf205171bff830974.webp



看一遍,想一下,case 0的时候返回啥?😏脖子有没有舒服点儿?


四、程序/结构设计







认知升级






GrayService是个灰度服务,corpId是企业ID,那么通过一次灰度放量,在脑壳里执行一下程序,就可以完成认知升级。



6f96f6b3cb3d05d7c5322957a3d40161.webp







CV工程师佳作






克隆和拷贝。为了效率,你要学会使用 copy + past,你几乎都不用理解别人的代码,你就可以高效地编程了。



32a6d28c155c2b131e5f5f75030cf168.webp



522a6b29f5b2289c84ea60ac460acb05.webp





包装,包装,再包装






把你所有的 API 都包装上 6 到 8 遍,包装深度多达 4层以上,以便找到足够多相似的东西。



7140662c235d321f6e73cf91e5338362.webp



业务是否复杂,这不重要;重要的是1,2行代码的封装也是要的,不包个8层封装,怎么能说明理解分层了呢?



还好我一屏就可以看完整个链路🐶



7d33c77910847579be200bd87b2c56d0.webp







想必是个核心类






再多引用几个类,我还能干更多事!请大声唱:我真的还想再包500类——《康熙王朝》
。



d27a432e3c938c02753d7411bad1e470.webp




羊大为美






中国人喜欢大,都是“越大越好”,大房子,大车子;而现代中国人总把‘大”放在高位,把‘大”作为对于一个事物最高的评价。像大人,大神,大圣,大仙,大中国,和别人介绍起自己的家乡都会加上“大”字作前缀。所以,从古至今,大始终贯穿着人们对于美好事物的遐想。



我想说还有大类,大方法:



43284ffebf04446371833cfcd781fda2.webp







不要过早的return或continue,要「V型」






V型激起我写代码的欲望。



34b8b7250cb77dbf2956353a55badd6b.webp



跟左边的深V相比,右边的就太差了,行数竟然变多了。



f67b8f4f17f326d3f0d27fcadea9e329.webp




一张图,一颗心,一场仗 + 一张网






一张网就是「码网」。渔网是打鱼的,码网是打码农。



上图「包Cyclic」:Calculates the number of packages which each package directly or indirectly depends on, and which in turn directly or indirectly depend on it.



下图「类Cyclic」:Calculates the number of classes or interfaces which each class directly or indirectly depends on, and which in turn directly or indirectly depend on it.



Note:Such cyclic dependencies may result in code which is difficult to understand and test.



翻译:能看看,不能看拉倒



d036a4b5e7cdad9ece940bff462cda9e.webp



d58a3750d70ceb59115abe6280b4bf58.webp




浏览 45
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报