你只是看起来很努力_我的方法在这方面看起来很大吗?

你只是看起来很努力

以下Java方法的大小是多少?

public Collection getDescription() {SystemLibrary systemLib = registry.get(SystemLibrary.class);Analysis analysis = systemLib.getCurrentAnalysis(registry);return getDescription(analysis);}

这个不起眼的方法查找某种系统库,检索Analysis并返回对该Analysis的描述。

但是你会说它有多大? 您会说这是三行代码吗? 如果是这样,您会说以下行为等效的方法长2行代码吗? 而且因为它更短会更好吗?

public Collection getDescription() {Analysis analysis = registry.get(SystemLibrary.class).getCurrentAnalysis(registry);return getDescription(analysis);}

还是您会说上述两个变体的大小相同,因为两者本质上都调用了相同的方法? 或者它们的大小相同,因为无论格式如何,它们都有三个职责。 还是因为他们只承担一项责任:返回分析说明?

方法大小的混乱会产生并产生影响。 之所以会出现这种情况,是因为项目一开始就无法达成衡量规模的目标单位。 它们之所以重要,是因为保持小的方法是SIPT结构原则的最基础,对于这些原则,存在降低成本的客观证据 。

值得考虑的一种非直观的大小量度是该方法编译到的字节码量。 等待! 在终止该浏览器并将其永久卸载之前,请考虑…

当然,很少有Java程序员会知道或关心上述方法编译为35个字节(确实如此)。 但是使用字节码具有绝对的双重优势(它完全是客观的(程序员无需再为方法长度为2或3行而费解),脚本和解析器可以自动连续地获取信息。

也没有永远的程序员必须学会如何在他们的头上做任何事情的可笑的编译Java。

假设您的项目同意将方法大小限制为50个字节。 Deborah很快-在几分钟之内-按照她的传统测量线标准,发现50字节大约是5行代码。 因此,她将自己的方法保持4行代码长,并且该项目的规模目标从来不必敲门。 (请在此处查看您是否可以在一分钟内发展这项技能。)

另一方面,Danny根据他的编程风格发现50字节是6行代码,因此将其方法保持5行长。 只要两者都满足在每次检入时解析已编译代码的脚本(和相关的自动武器),项目经理就可以安然入睡,知道质量(至少对于此特定代码属性而言)是安全的。

当然,有时方法会反映出他们的主人,并开始在腰部隆起。 当方法大小开始增加时,您的项目解释统计信息所依据的策略就变得至关重要。

实际项目了解小型方法的重要性以及具有一定灵活性的信任程序员的重要性。 实际项目不要求所有方法都小,而仅要求它们平均较小,并且,更重要的是,该平均值不会无限上升。

假设一个项目决定平均方法的长度必须小于50个字节。 然后,如果平均方法大小徘徊在47个字节长,则该项目可能允许团队进行稍大的更改,从而使平均长度达到48个字节。 (尽管有些程序员对永不感到骄傲,无论其平均大小如何,都永远不会增加其平均大小。)

但是该项目将不允许任何团队将这个数字拖到50字节或更长时间。

你疯了!

您认为50个字节(例如5行代码)太小了吗? 您认为任何大型Java软件项目都不可能拥有如此小的平均方法大小吗?

您的项目使用Jenkins吗? Jenkins的15,089个方法的平均长度仅为29个字节。 这大约是三行代码。

实际上,现代项目将阈值保持在较低水平几乎没有问题。 表1列出了流行的Java程序及其字节码平均方法大小的列表。

程序 平均方法大小(字节) 程序 平均方法大小(字节)
净额 20 ActiveMQ经纪人 32
JUnit的 23 弹簧 40
骆驼 27 Log4J 40
詹金斯 29 Tomcat(土狼) 44
Spoiklin Soice 29 卡桑德拉 53
Struts 30 Lucene 55
FitNesse 31 动物园管理员 55
Maven 35 卡塔琳娜 57

表1:平均方法大小(字节码)。

如果有的话,50个字节可能太宽裕。 也许40字节会更好。 或30。

摘要

大小很重要,因为大型方法比小型方法的成本更高。 这不是唯一重要的事情-许多其他基础结构原则也在等待中-但它可观地回报了为保持其控制力而付出的努力。 选择客观,自动的测量程序,以及就不得超过该阈值的阈值达成普遍共识,可确保此类投资取得成果。

翻译自: https://www.javacodegeeks.com/2016/08/method-look-big.html

你只是看起来很努力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0xFFFFFF的问题

这个有两个结果:16777215和-1 如果是单纯的16 进制数,那么转换为10 进制数为16777215。相信这个转换结果很好理解:15*16^015*16^1...15*16^5。j即(int型所能表示的最大值) 第二种情况就是 0xFFFFFF 如果是在计算机中…

js模仿f11全屏_JS实现全屏预览F11功能的示例代码

老是不通过,没办法,只能是重新发布了,反正我就是杠上了,大大小小写过很多前端特效,当然也经常在网上copy或者修改人家的代码,我觉得也挺好的,为什么?!因为我想这样&#…

懒惰学习_懒惰评估

懒惰学习最近,我正在编写log4j附加程序,并希望在自定义附加程序创建过程中使用logger记录一些诊断详细信息,但是log4j初始化仅在创建附加程序实例后才完成,因此在此阶段记录的消息将被忽略。 我感到需要在自定义附加程序中进行延…

leetcode(动态规划专题)

线性DP 53. 最大子数组和 思路 code int maxSubArray(vector<int>& nums) {//res:最后所有状态的最终Max结果//lat:当前f[i]状态的Maxint res INT_MIN, last 0;for (int i 0; i < nums.size(); i){//当前f[i]状态最大值(使用下面的状态转移方程得出)//f[i] …

买个云服务器有啥用_买了一台云服务器到底能干嘛?

提起云计算、大数据&#xff0c;好像都属于科技前沿的东西&#xff0c;总是觉得它离我们很遥远。但是科技的发展应该是要惠及普罗大众的&#xff0c;所以云计算的发展也并不是与我们毫不相干的&#xff0c;很多云计算方面的功能是我们工作生活可以用到、并解决问题的&#xff0…

leetcode(链表专题)

数组模拟链表 #include<iostream> using namespace std;const int N 100; // 单链表 // head存储链表头&#xff0c;e[]存储节点的值&#xff0c;ne[]存储节点的next指针&#xff0c;idx表示当前用到了哪个节点 int head, e[N], ne[N], idx;// 初始化 void init() {hea…

lagom cqrs_Java和Lagom的CQRS

lagom cqrs我很高兴在Chicago Java User Group上进行了讨论&#xff0c;并讨论了Lagom如何实现CQRS&#xff08;命令查询责任隔离模式&#xff09;。 值得庆幸的是&#xff0c;有一个录音&#xff0c;我还把这些幻灯片发布在slideshare上 。 抽象&#xff1a; 一旦应用程序变…

python项目管理器 宝塔面板 django 404_宝塔面板成功部署Django项目流程(图文)

上线 Django 项目记录&#xff0c;超简单&#xff0c;避免无意义的踩坑&#xff01;第一步&#xff1a;安装python管理器在宝塔在线面板安装“ python项目管理器 ”第二步&#xff1a;安装适配python版本因为服务器 centos7 系统默认的 python 版本是 2.7而我们项目是基于最新版…

leetcode(字符串专题)

5. 最长回文子串 思路

使用Spring boot,Thymeleaf,AngularJS从零开始构建新的Web应用程序–第3部分

在之前的博客中&#xff0c;我们使用Thymeleaf&#xff0c;Bower和Bootstrap构建了登录页面&#xff0c;并将其部署到了Heroku。 在此博客中&#xff0c;我们将介绍用于前端的AngularJS和在后端的Spring Boot Web服务的一些功能。 我们将从“登录/注销”部分开始。 让我们开始…

android的oomkiller_Android Low memory killer

Android Low memorykillerby 永远的伊苏Android中&#xff0c;进程的生命周期都是由系统控制的&#xff0c;即使用户关掉了程序&#xff0c;进程依然是存在于内存之中。这样设计的目的是为了下次能快速启动。当然&#xff0c;随着系统运行时间的增长&#xff0c;内存会越来越少…

C++ 11 深度学习(十二)函数新特性、内联函数、const详解

函数后置返回类型 //后置返回类型 auto fun(int, int)->int; 内联函数 在函数定义前增加关键字 inline ,使得该函数变成内联函数 (1) 适用于函数体很小&#xff0c;调用很频繁的函数类型&#xff0c;可以引入内联函数 (2) inline影响编译器&#xff0c;在编译阶段对inc…

apache pdfbox_Apache PDFBox 2

apache pdfboxApache PDFBox 2已于今年早些时候发布 &#xff0c; Apache PDFBox 2.0.1和Apache PDFBox 2.0.2已发布。 Apache PDFBox是开源的&#xff08; Apache许可证版本2 &#xff09;并且基于Java&#xff08;因此易于使用&#xff0c;包括Java &#xff0c; Groovy &…

cad坐标归零lisp_CAD图怎么归零

展开全部原理&#xff0c;就是把图元Z轴线移动的负无穷远&#xff0c;然e68a84e8a2ad62616964757a686964616f31333335336530后移动到正无穷&#xff0c;除了块就可以Z轴线归零了。用autoLISP来解决。;;;;;;Z坐标归零;;(defun c:z0 ( / &kw &k1 #os1)(setvar "cmde…

dynamodb java_使用Java查询DynamoDB项

dynamodb java在上一篇文章中&#xff0c;我们继续在DynamoDB数据库上插入数据。 在本教程中&#xff0c;我们将对DynamoDB表发出一些基本查询。 主要规则是每个查询都必须使用哈希键。 查询的最简单形式是仅使用哈希键。 我们将在此表上查询Users表。 结果只有一个&#xff…

冰点还原离线激活_冰点还原密钥,小编告诉你如何激活冰点还原

冰点还原软件&#xff0c;它具有轻松安装、动态保护、实时瞬间恢复&#xff0c;操作简单的特点。安装了冰点还原的系统&#xff0c;无论进行了安装文件&#xff0c;还是删除文件、更改系统设置等操作&#xff0c;计算机重新启动后&#xff0c;一切将恢复成初始状态。不过这些都…

【WebRTC---源码篇】(四)WebRTC线程模型

常见的线程模型 1.为了解决频繁线程创建与销毁,在此模型中使用的线程池。在线程池创建的时候就将一些线程创建起来,以提高效率。通过控制线程数量来解决线程频繁切换。 2.一般线程与线程存在前后关系的,线程执行完毕之后生成一个新的任务(task1 , task2,task3---)插入到任…

java cuba_CUBA平台–用于快速应用程序开发的开源Java框架

java cuba传统上&#xff0c;自计算时代开始以来&#xff0c;企业软件开发自然面临着一个挑战&#xff0c;当时自然而然地&#xff0c;企业软件开发本应专注于解决实际的业务问题&#xff0c;但与此同时&#xff0c;开发人员必须在技术上花费大量时间和精力。解决方案的一面&am…

web project、web service project和java project的区别

java project就是普通的用java写的程序&#xff0c;直接就能运行的&#xff0c;web project,web service project不能直接运行&#xff0c;必须在容器里面运行&#xff0c;这个容器就是web server&#xff0c;例如tomcat,jboss。web project就是web工程&#xff0c;简单的讲做网…