美文网首页Android开发Android开发经验谈Android开发
思考:你见过的Android开发,代码到底写的有多烂?

思考:你见过的Android开发,代码到底写的有多烂?

作者: 10块钱new一个对象 | 来源:发表于2020-10-19 17:15 被阅读0次

这是一年前的事了!说起来还是挺乐的,当时前同事给我展示了我本来最初写的代码,后来可能是被外包的人改的面目全非,然后他又把它改规范了,让我意思意思review下,并且吐槽下外包的代码。我拿起代码和git提交历史一看,一口老血喷在地上。

我写的初版是这样的(不喜欢直接展示原代码,所以这边是抽象掉+集中展示槽点的修改版)

public bool ValidateUser(long userId)
{
    int userScore = 100;
    if (!CheckCondition1(userId)) userScore -= 10;
    if (!CheckCondition2(userId)) userScore -= 15;
    ......

    return userScore >= 60;
}

这个代码我当时写的时候没有留意magic number的问题,但是,可读性上是OK的。


然后,翻git看到了第一版改动。应该是有需求提出,有一个condition,是一票否决的,这个为false直接结束。

于是代码变成了这样:

public bool ValidateUser(long userId)
{
    int userScore = 100;

    bool b = CheckYCDYCondition(userId);
    if (!CheckCondition1(userId)) userScore -= 10;
    if (!CheckCondition2(userId)) userScore -= 15;
    ......

    if (b == true) 
         goto end;
    if (b == false)
         return false;

:end
    return userScore >= 60;
}

b== true, goto, 还有你都上来一票否决了,还在check剩下的条件,这我就不说了。YCDY是啥呢?我问前同事,他也不知道,回头去问。第二天他告诉了我:

此时一万把锤子在我的心中呼啸而过。(这边说点正经的,看到有几个人问我这个正常应该怎么写?个人觉得表现出高阶覆盖/起决定作用的意思即可。因此,写Ultimate, SuperOverride, FirstPriority等都可以)


第二版:

public bool ValidateUser(long userId)
{
    int userScore = 100;

    bool b = CheckYCDYCondition(userId);
    if (!CheckCondition1(userId)) userScore -= 10;
    if (!CheckCondition2(userId)) userScore -= 15;
    ......

    if (!b == true) 
         return userScore >= 60;
    else if (!b == false)
         return false;
    else 
         return false;

}

嗯好,goto没了,变成如果b既不等于true也不等于false还可以进行下去了。YDCY听同事解释是里面逻辑改了,本来false变成true,本来true变false(喷血)

改就改吧,我也没办法,但是对应措施是把b改成!b么?然后!b == false???
我在草丛里蹲你,
你知道我在草丛里蹲你?
我知道你知道我在草丛里蹲你?

我问同事这代码有人review吗,他说这段时间就那几个外包的在搞这个模块,我们这边就看跑起来功能正确就可以了。


第三版:

const static int fillScore = 100;
const static int passScore = 60;

public static bool ValidateUser(long userId)
{
    int userScore = fillScore ;
    int Score10 = 12;
    int Score15 = 15;

    bool b = CheckYCDYCondition(userId);
    if (!CheckCondition1(userId)) userScore -= Score10 ;
    if (!CheckCondition2(userId)) userScore -= Score15 ;
    ......

    if (!b == true) 
         return userScore >= passScore;
    else if (!b == false)
         return false;
    else 
         return false;

}

fillScore 是满分的意思,懒得专门开篇吐槽。看出来好像也在解决魔数问题。但是Score10是啥啊,说明如果condition1不过,要扣10分么?那你赋值10就行了,变量写10是啥意思?看,这里被要求改成12了吧?

还有,怎么就变static了?这个原因忘了,好像说是要new什么静态类的。new静态类就除了把整个方法都静态化之外没其他办法了吗???


第四版:

    bool b = !CheckYCDYCondition(userId);
    if (!CheckCondition1(userId)) userScore -= Score10 ;
    if (!CheckCondition2(userId)) userScore -= Score15 ;
    ......//后面又加过好几个条件,不仅仅这一版

    System.threading.thread.sleep(3000);
    if (!b == true) 
         return userScore >= passScore;
    else if (!b == false)
         return false;
    else 
         return false;

}

一锤定音看起来又反回来了(第一行),所以逻辑现在变成你知道我知道你知道我在草丛里蹲你了;(这个我觉得情有可原吧,毕竟bool b 和if (b)间隔超过一屏了) 但是一看到sleep(3000),我就想起了这个段子——这个函数性能不好,加钱给你优(sleep后面的数字改小)化。

就问他,是不是当初是这个意思,结果他说,哦,我知道,他们是拿这个来debug的,单独函数跑太快了,直接执行就完毕了,所以要时间给你点debug的暂停键。但是这个可能最后漏删了。

最后,这个代码还是被前同事改正常了。


相关文章

  • 思考:你见过的Android开发,代码到底写的有多烂?

    这是一年前的事了!说起来还是挺乐的,当时前同事给我展示了我本来最初写的代码,后来可能是被外包的人改的面目全非,然后...

  • Android 开发规范(个人版)

    前言 做Android开发这么多年,见过很多人写的代码(开源代码除外),其中有的写的代码很简洁、很漂亮,让人看起来...

  • 我的烂开始,到底有多烂

    今天在喜马拉雅收听了易效能的《叶武斌时间管理进阶》【第10周10.1】——烂开始,不要刻意追求完美,边听边自责,从...

  • 我写的诗歌有多烂

    这篇写在一年前的诗,偶尔翻出,心里很不是滋味,但想分享给各位简友,我开始在“作”的路上一去不复返了。 在本该喜乐详...

  • android学习

    整体Android学习之路——stormzhang 控件android应用开发全程实录-你有多熟悉listview...

  • Android编码规范

    Android开发代码规范相关系列文章: Android命名规范 Android编码规范 Android编码规范有...

  • setContentView是如何把布局加上去的

    在Android开发中,最常见的代码就是setContentView,然后传入你写的布局ID,那么布局就被加载到界...

  • Handler.post和View.post的区别

    缘起 在Android开发中,我们经常会见到下面的代码,比如: 你曾经有没有想过这两者到底有什么区别?我该使用哪种...

  • Android杂货摊:Handler.post和View.pos

    缘起 在Android开发中,我们经常会见到下面的代码,比如: 你曾经有没有想过这两者到底有什么区别?我该使用哪种...

  • Handler.post和View.post的区别

    缘起 在Android开发中,我们经常会见到下面的代码,比如: 你曾经有没有想过这两者到底有什么区别?我该使用哪种...

网友评论

    本文标题:思考:你见过的Android开发,代码到底写的有多烂?

    本文链接:https://www.haomeiwen.com/subject/vvtlmktx.html