文章标题

来源:互联网 发布:中信证券交易软件下载 编辑:程序博客网 时间:2024/06/07 01:33

不知道很多人是不是觉得很多代码思路有问题。
记得几年前在一个小新华书店看编程相关的书,都是那种教人入门的书,教一些if for 语句等等。翻了基本都是在写 & 符号时。举的这个例子:

因为 % 2^n 就等于 & (2^n -1)。所以例子是这样的,当然在for例子中也出现过。
找出0-100之间的偶数。
首先是

    for(int i = 0;i<=100;i++){        if(i % 2 == 0){            i 是偶数        }    }

然后讲 &

        for(int i = 0;i<=100;i++){            if(i  & 1 == 0){                i 是偶数            }        }

这个例子仅从介绍&用法来看没什么问题。但是这并不是最好的方式啊。
既然范围都确定了就是0到100,要求是偶数很清楚了,看起来用&符号比%高效多了。但实际上根本没有必要啊,直接这么写就完事了啊。

        for(int i = 0;i<=100;i+=2){                走到这里的都是偶数        }

这样一下省掉一半的循环次数,并且循环里什么都不用做。
当时翻看了那几本介绍编程基础的书都有这个例子,并且都没讲到可以直接像第三种方式这么写。当时对这种 XXX从入门的熬精通、21天精通XXX之类的书嗤之以鼻了。实际生活中经常见到这种人,就是自己菜得不行还没自知之明还觉得自己牛的不行还老对别人指指点点。

实际编码中此类问题很常见,比如接口返回的xml或json,要取某个属性值比如name,可以使用xml/json解析库取得这个name值。其实完全没必要啊,不管是xml还是json,它本质上还是个字符串啊,并且这两者都有格式,那么这个问题就变成了前面提到的——一个String,如果包含X则截取X到结束的部分。只要先indexOf(“name”)然后截取就可以了。不明白为什么用indexOf而不是contains的人建议先去看源码。
都不用想,使用String提供的两个方法,比使用引入的第三方库来解决,显然效率高太多了。

再比如,用户输入的手机号、银行卡号等等需要持续做判断是否正确。这个正则表达式一百度一大堆。但正则表达式明显不是最好的方法,还是像上面一样去分析,手机号和银行卡号都是十分有规律的。手机号就是个11位数字,就对应了String的length是11;第一位必须是1,那么就是charAt(0) == ‘1’,其他都是在0-9之间,在一个循环内用charAt判断就行了。显然比正则表达式去分析表达式然后再去匹配关键词这个过程要快太多了。

可惜,这么做会多写一个for,比使用正则表达式多出几行代码,于是有人觉得不优雅了,然后改成正则表达式。还是那句,他们只是在完成任务而已,从没想过去做得多好。
我还被人教训,简单查询不要写sql直接写HQL就行了。
我依然是无语死了,依然是试都不用试,你去想一下就明白。访问数据库最终都要生成sql,不管是框架生成还是手写,sql这一过程是少不了的。
用HQL看起来是写的代码少了,但对于程序整体的把握也少了。并且只是代码少了,实际上访问数据库整个过程中做的事情一样也没少,交给框架做的越多,人对整体的把握就越少。

不仅是写代码,就是生活中很多事情,比如拍照,相机内置了很多模式,比如风景、人像等,
一个不会用相机的人用自动档拍出的效果不会太差,但最好的照片效果肯定是手动挡拍的,每一项参数都要摄影师精心调整才能达到最佳的效果。这不是生活常识吗,怎么换到工作中就转不过弯呢。

0 0
原创粉丝点击