这样写代码,肯定是跟代码有仇吧

“你代码写得这么烂,有问过代码是什么感受吗?”

一,完全不能被读懂的代码

哎,憋了这么多天,今天我实在憋不住了!

本小姐我,快-被-一-段-代-码-气-炸-了!

是的,你没看错,惹我生气的是一段根本就没有生命的代码。

但是不得不说,这段代码有够魔性!

一个明明没有生命的东西,硬生生把一个活的人给惹炸毛了。

它还不够魔性吗?

事情的经过是这样的。

姐姐我最近负责跟进的是一个教育类软件的ios客户端。

已经上线运营了,但是最近甲方领导觉得以前的ui不够美观,于是提出了我们这个月要做个小改版。

我看了需求,无非调调颜色,改改图标排列,再添加几个详情页。

好像也没啥难搞的。

于是我就跟身边一个小伙子简单交待几句,让他去做这个事情。

临了,我还不忘记叮嘱了句,我们现在代码里,这一块之前改来改去,代码结构有点乱,你看时间允许的话,就一起重构下吧。

就是这句话,让我想狠抽自己嘴巴。

是的,代码他重构过了,但是重构后的代码,我更加看不懂了!

昨天转测的版本,今天看到有个问题,通讯录的列表里,有个人的电话号码显示不对。

粗粗一看,这不就是tableview的cell复用数据没更新好的问题嘛?

这种小case,姐姐顺手就可以给处理了。

谁知道啊,姐姐还是太年轻,就这么栽这坑里了!

当我进到这个界面的- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath函数中,一下子就傻眼了。

切切实实的阴沟里翻船的感觉。

首先,这个函数有200多行!

直接懵圈了。

但是我也不能这么久放弃,有点没面子。

硬着头皮往下看。

令人想不到的是,这个函数中使用的图片资源,名字竟然还是中文!

怎么样?有没有要吐血的感觉?

哦,那你的承受能力就太差了些。

因为,最让我承受不了的还不是这些。

而是这200多行的代码竟然做的都是cell上控件的创建初始化赋值...

我实在没法淡定啊,对着这样的代码,我竟然不知道还要cell对应的类干嘛。

跟几个朋友吐槽了下,做测试的美眉说我承受不了的这条她不能理解。

我几近咆哮的跟她讲——

“你想想直接让奶奶甩开儿子媳妇,生个孙子是什么感触吧”

还有比这更形象的比喻了么?

肯定有人不相信我讲的话,好吧,我就贴一小段给大家感受下。

ContacterDetailCell * cell = [tableView dequeueReusableCellWithIdentifier:cellId];

if (!cell) {

cell = [[ContacterDetailCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];

cell.selectionStyle = UITableViewCellSeparatorStyleNone;

}

BOOL isHasShortDn = [[[NSUserDefaults standardUserDefaults]objectForKey:KEY_ISOPEN_VNET]integerValue];

ADTIMContacter * contacter = self.contacterArray[indexPath.row];

_phoneNum = contacter.m_strDn;

cell.contentView.userInteractionEnabled = YES;

cell.shortDnLabel = [UILabel new];

cell.telLabel = [UILabel new];

cell.classNameLabel = [[UILabel alloc]initWithFrame:CGRectMake(5, 5, MAIN_WIDTH, 40)];

cell.classNameLabel.textColor = [UIColor darkGrayColor];

cell.classNameLabel.font = [UIFont systemFontOfSize:16.0];

[cell.contentView addSubview:cell.classNameLabel];

cell.publicLable = [[UILabel alloc]initWithFrame:CGRectMake(MAIN_WIDTH - 80, 135, 50, 40)];

cell.publicLable.text = contacter.m_isOpen_phone ? @"已公开":@"未公开";

cell.publicLable.textColor = [UIColor redColor];

cell.publicLable.font = [UIFont systemFontOfSize:16.0];

cell.publicLable.textAlignment = NSTextAlignmentCenter;

[cell.contentView addSubview:cell.publicLable];

UIImageView * line = [UIImageView new];

line.backgroundColor = kBWDarkGray;

[cell.contentView addSubview:line];

if ([[LoginUserUtil userId] isEqualToString:_userID[1]]) {

cell.classNameLabel.hidden = NO;

cell.classNameLabel.text = self.classNameArray[indexPath.row];

cell.shortDnLabel.frame = CGRectMake(5, 45, MAIN_WIDTH, 55);

cell.telLabel.frame = CGRectMake(5, 105, MAIN_WIDTH, 55);

line.frame = CGRectMake(0, CGRectGetMaxY(cell.shortDnLabel.frame), MAIN_WIDTH, 1);

UISwitch * my_switch = [[UISwitch alloc]initWithFrame:CGRectMake(cell.publicLable.frame.origin.x, CGRectGetMinY(cell.publicLable.frame) - 25, 0, 0)];

[my_switch setOn:contacter.m_isOpen_phone animated:YES];

[my_switch addTarget:self action:@selector(switchValueChanged:) forControlEvents:UIControlEventValueChanged];

my_switch.tag = 100 + indexPath.row;

if (!IsStrEmpty(contacter.m_strDn)) {

[cell.contentView addSubview:my_switch];

}

我就想问谁特么能把这段代码读完,并理解了?

我肯定是不行!

还不死心的我,又去看了看其他地方。

真心想讲脏话,好嘛?

充斥满屏的魔鬼数字,

完全不知所谓的变量命名,

不考虑属性的使用范围,统一采用public

不考虑内存的优化使用

......

这位大哥,你这样写代码,有没有问问代码什么心情?

最终,我也没找到上面所说问题的解决办法。只好找来制造这段代码的小哥。

没错,这小哥就在刚才处理完问题后,已经领了我甩给他的编码规范去面壁了。

我曾一直天真(臭不要脸)的以为,我的团队能做出完美的应用。经此事件,我突然感觉,对于我目前的团队来说,做出完美的app是多么遥不可及的梦想。

我们甚至都写不出来,能让别人(注意,这里的别人不是所有人,而是你的同行们)看懂的代码!

二、我们为什么写出了不易懂的代码?

不要问我什么是容易被别人读懂的代码。

你只要想想你自己去读别人的代码,你希望看到什么样的代码心中就有答案?

告诉我,你在读代码时

是希望看到排版整齐的,还是很随性的?

是喜欢看变量命名使用同一规则的,还是根本就看不懂使用了什么规则的?

是更乐于看到函数的功能单一的,还是乐于看到囊括了好几个不相关的能力的函数?

是更接受逻辑清晰的还是更接受逻辑繁复的?

是一看就知道作者意图,还是读了半天也不明白作者写这段代码要干嘛?

......

所以,你还要问我什么样的代码是容易被别人读懂的吗?

你自己心中明明早就有很明确的答案了好吗?

你之所以写出这么烂的代码,无非是你对别人(一般是跟你合作项目的伙伴)有明确的要求,而对自己没有!

完全分不清楚好代码和烂代码的人除外。

相信我,在你需要读别人代码的时候,你心中对好代码的定义能细分到三级目录。

然而,到你自己写的时候,都是干脆交给编译器,自己都懒得读,更别说给自己的代码套自己的标准,检验下是否易读。

三、怎么写出容易被读懂的代码?


怎么写出容易读的代码?

方法就一个,写完后自己去读!

然后想象一下,别人读这段代码的心里感受。

当然不排除,有很多自认为大神的人,经常会写出一些晦涩难懂的代码,以此来彰显自己水平牛X。

但是,请看明白,这些人都仅仅是自以为是的牛X。

真正的牛X是什么样的?把复杂的问题用很通俗浅显的方法解决了,那才是真正的牛X!

举个很简单的例子,《天龙八部》中的扫地僧,他出手时,摆什么花里胡哨的招数了吗?没有!

所以你是希望自己做个随便一举手投足都自带功力的高手,还是做个金玉其外的花架子,选择权在你自己。

毕竟,代码是承载我们技术水平的东西,它跟我们没有深仇大恨

在敲下每行代码的时候,我们还是稍微用点心,不要总满足于功能似乎实现了就万事大吉的入门级别!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容