潍坊中企动力做的网站怎么样,猫咪社区官网在线最新,北京网站推广价格,华丰建设股份有限公司网站我建议您做一个练习#xff1a;明天早上返回工作时#xff0c;浏览项目的源代码#xff0c;并尝试寻找重构的机会。 即使您的老板不要求也这样做。 这样做是因为您想要一些激动人心的工作时间。 重构是改变已经可以正常工作的艺术 。 但是要进行重构#xff0c;您需要一个… 我建议您做一个练习明天早上返回工作时浏览项目的源代码并尝试寻找重构的机会。 即使您的老板不要求也这样做。 这样做是因为您想要一些激动人心的工作时间。 重构是改变已经可以正常工作的艺术 。 但是要进行重构您需要一个借口。 可能是设计改进性能问题安全角色以及许多其他原因。 您要冒这个风险以减少应用程序的技术支出使其更加稳定并在将来以某种方式提高您的生产率。 这不是与公司或老板相处融洽而是与自己相处融洽。 为什么 因为问题往往会累积在某些时候您将失去对代码的控制。 您将面临艰难的时期来交付结果这将毁掉您的职业生涯。 好吧让我们从一个更光明的角度来看这件事。 在此过程中您将学到很多东西并且很快就会意识到您正在生产比以前更好的代码。 您进行的重构越多您就变得越聪明直到达到创新水平为止。 但是这是什么意思您怎么知道自己要到达那里 当您发现自己在做的事情上有明显的改进机会时就会发现创新而您意识到到目前为止没有人做过创新至少您找不到。 这并不容易但是通常发生在您重复做某件事时并且发现自己在考虑如何做才能更快或更干净地做同一件事。 让我用一个真实的故事来说明。 它与Java中的字符串连接有关这是多年来许多专家强调的经典问题如今可能已被忽略。 在JDK 1.5之前尽管可读性和简单性强但使用运算符“ ”进行的字符串连接可能会产生非常低效的代码。 在后台此运算符被替换为等效的字节码 StringBuffer 实际上实现了串联。 您使用“ ”运算符的次数越多则在内存中拥有的String和StringBuffer实例将越多并且需要大量的处理时间来管理所有这些对象。 因此开发人员被迫立即使用StringBuffer并忽略“ ”运算符。 看下面的例子 String title Mr.;
String name John;
String familyName Smith;String message Dear title name familyName ,; 开发人员习惯于这样写但是他们被迫编写这样的写法 StringBuffer sb new StringBuffer();
sb.append(Dear );
sb.append(title);
sb.append( );
sb.append(name);
sb.append( );
sb.append(familyName);
sb.append(,); 您可能同意我的观点第一个示例比第二个示例更具可读性。 开发人员在连接字符串时使用“ ”运算符是很自然的因此放弃该语法是不公平的。 幸运的是编译人员为此做了一些工作确保JDK 1.5可以优化串联。 他们没有使用线程安全的类StringBuffer而是创建了一个称为StringBuilder的新类非线程安全的因此速度更快并确保它的单个实例可以处理所有串联如第一个示例所示。 这是一个重要的举措因为他们更青睐优雅而不是技术。 第一个示例在编译时自动转换为如下形式 StringBuilder sb new StringBuilder();
sb.append(Dear ).append(title).append( ).append(name).append( ).append(familyName).append(,); 但是非平凡逻辑中的串联仍然需要您在代码中编写StringBuilder因为编译器还不那么聪明。 例如 ListStudent students studentBean.findStudents();
String intro The following students were approved:\n;
String listedNames ;
String separator ;
for(Student student: students) {if(student.approved()) {if(!listedNames.isEmpty()) {separator , ;}listedNames separator student.getName();}
}
String msg intro listedNames;
messengerBean.sendMessage(msg); 像这样写会更有效 ListStudent students studentBean.findStudents();
String intro The following students were approved:\n;
StringBuilder listedNames new StringBuilder();
String separator ;
for(Student student: students) {if(student.approved()) {if(!listedNames.length() 0) {separator , ;}listedNames.append(separator).append(student.getName());}
}
String msg intro listedNames.toString();
messengerBean.sendMessage(msg); UPS 您注意到那里有什么奇怪的东西吗 乍一看可能并不明显但是请先看一下它们如何在定义分隔符之前检查变量namedNames是否为空。 String类在JDK 1.6中引入了一个不错的可读方法isEmpty但StringBuilder仍然使用这种相当古老的比较方式。 他们为什么不对StringBuilder和StringBuffer也这样做呢 在core-lib-dev邮件列表中讨论了该问题 事实证明他们之前没有这样做没有明显的原因。 也许他们只是忘记了。 由于进行了大量的重构试图改善 字符串连接的 低效 使用因此有可能发现这种不一致 。 我相信他们仍有时间针对明年即将推出的Java 8进行修复。 他们将通过在CharSequence接口中添加isEmpty方法来解决此问题以确保其他所有实现都同样出色。 这可能很简单但是当Java因其过于冗长而受到严厉批评时每个细节都很重要。 因此进行一些重构找到机会来改进代码以及用于编写代码的语言 让我们前进Java 参考 仔细查看它您会在Hildeberto的Blog博客上找到我们的JCG合作伙伴 Hildeberto Mendonca 您需要改进 。 翻译自: https://www.javacodegeeks.com/2013/05/look-at-it-carefully-and-you-will-find-something-to-improve.html