美文网首页
写代码那点事(二)分享一些代码

写代码那点事(二)分享一些代码

作者: bruce_wu | 来源:发表于2016-07-17 23:18 被阅读52次

最近这段时间一直在读大家写的代码,发现有时候不好的代码有些是因为不了解程序运行的本质,有些代码是因为没有用心
这次我就分享一些代码中的简单的错误

  • 数据库查询多次,改变写法可以减少数据库查询次数,降低数据库压力
    if Employee.find_by_id(12345) and Employee.find_by_id(12345).username=='bad.code'
    如上这段代码,很明显会查询两次数据库,但是完全是没有必要的
    发生错误的原因我猜有两种可能
    1.不了解rails查询的本质,不知道上面会查询两次(这种可能比较小)
    2.没有用心去想程序应该怎么写更好,实现功能就好

    users = User.all(:conditions=>['status=:status',{:status=>1}])
    users.each do |user|
      company = Company.find_by_id(user.company_id)
      .....其他操作
    end
    

如上这段代码,company查询了多次,其实我们可以在each外面先一次查询出来,这样就不需要多次查询数据库了,形成如下代码
users = User.all(:conditions=>['status=:status',{:status=>1}])
companies = Company.all(:conditions=>['id in (?)',users.map(&:company_id)])
users.each do |user|
company = companies.find{|com|com.id==user.company_id}
.....其他操作
end
上面的代码和数据库的交互就比较友好了,不过仔细观察如上代码,其实User和Company是存在关联关系(relation)的,一般我们已经定义好了他们之间的关系,所以我们的代码其实应该是这样的
users = User.all(:conditions=>['status=:status',{:status=>1}],:include=>[:company])
users.each do |user|
company = user.company
.....其他操作
end

  • 代码嵌套层数比较多
    if user.present?
    if company.present?
    return "#{company.name}-#{user.name}"
    else
    return '公司不存在'
    end
    else
    return '用户不存在'
    end
    如上代码,符合人的正常思维逻辑并没有问题,但是是不是有点长呢? 其实我们可以反过来先判断不存在的情况,代码可以简化为
    return '用户不存在' if user.blank?
    return '公司不存在' if company.blank?
    "#{company.name}-#{user.name}"
    代码是不是简洁多了呢?我个人把这种情况叫做“尽早返回原则”,就是如果满足某一个条件就可以忽略其他条件的话,那么我们可以先判断这个条件以简化代码。

相关文章

  • 写代码那点事(二)分享一些代码

    最近这段时间一直在读大家写的代码,发现有时候不好的代码有些是因为不了解程序运行的本质,有些代码是因为没有用心这次我...

  • 写代码那点事

    算来进入软件开发这个行业也有十年了(是不是暴露年龄了),当我还是一个开发的新人的时候我觉得写代码是一件很酷很爽的事...

  • 关于我开始写代码那点事

    如果硬要把我和写代码扯上点关系,不得不承认,咱懂点英语,至少看文档的时候,有种单词都差不多认识的虚幻的优越感。至于...

  • 代码规范那点事

    最近这个月,从制作 CocoaPods 私有库,到搭建 Git 服务器,大多数时间都花在了调研和试错上。不过调研试...

  • iOS简化代码那点事

    首先声明,本人是一名菜鸟,写一些技巧跟新手分享,大神勿喷。如有不足,敬请大神指点。 在做开发时,项目中通常被繁琐冗...

  • 发现一个可以在线写代码的网站

    在线写代码,分享代码,执行代码 https://codesandbox.io/s/[https://codesan...

  • 代码片段&编程小技巧

    代码片段大全代码片段,代码分享,PHP代码分享,Java代码分享,Ruby代码分享,Python代码分享,HTML...

  • 关于《代码大全2》那点事

    代码大全2 最后 书不在多,在精,很多人盲目的去买书,但发现买回来翻都没翻过,就尘封在那里,对程序员来说,单纯的看...

  • 贴源码 统计代码那点事

    又是被喊道贴代码到文档里面, 或者统计代码行数, 原来总是自己写python来搞, 后来发现linux的shell...

  • 写代码那点事(四)为什么我们有这么多代码-续

    对,没错,继续思考代码多的问题.在开发当中我发现,在好多的类中总有那么两个或几个方法的代码基本相似甚至一样,这也是...

网友评论

      本文标题:写代码那点事(二)分享一些代码

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