我的方法在这方面看起来很大吗?

以下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个字节(确实如此)。 但是使用字节码具有极大的双重优势,因为它完全是客观的(程序员不必再为方法是两行还是三行长而费解),脚本和解析器可以自动连续地获取信息。

也没有永远的程序员必须学会如何在他们的头上做任何事情的可笑的编译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 雄猫(土狼) 44
Spoiklin Soice 29 卡桑德拉 53
Struts 30 Lucene 55
FitNesse 31 动物园管理员 55
马文 35 卡塔琳娜 57

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

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

摘要

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

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

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

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

相关文章

arduino 舵机接线图_求用5个电位器分别控制舵机的arduino的原码和连线图

按照上图连线,按照如下代码烧程序。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#define Sin_1 A0 //设置变阻器1路电压采集端口为A0#define Sin_2 A1 //设置变阻器2路电压采集端口为A…

Leetcode 152.乘机最大子序列

乘积最大子序列 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2: 输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2,…

Matlab sumsqr函数

功能:求矩阵所有元素的平方和 调用形式: [s,n] sumsqr(x) 例1 a [1 2 3;1 2 3]; [s,n] sumsqr(a) s 28 n 6 例2 c [1 2 3 4;1 2 3 4]; [m,n] sumsqr(c) A sumsqr(c) m 60 n 8 A 60 可以看出n返回值是矩阵元素个数

Kali linux安装漏洞扫描工具Nessus指南

引子:Nessus是著名信息安全服务公司tenable推出的一款漏洞扫描与分析软件,号称是"世界上最流行的漏洞扫描程序,全世界超过75,000个组织在使用它"。尽管这个扫描程序可以免费下载得到,但是要从Tenable更新到所有最新的威胁信息,每年…

*p++和*(p++)的区别_同是华为顶级旗舰,P系和Mate系谁最值得购买?明白这点很重要!...

近两年,华为手机凭借P系列和Mate系列的优异设计和销量口碑,已经毫无争议地成为了国产品牌高端代表。同时,华为自身也牢牢占据住中国大陆市场份额第一名宝座,在全球名次中以微弱差距排在第三,与第二名的苹果iPhone厮杀激…

Matlab xlim ylim zlim函数

xlim([xl xr]); 用于限定x轴上下限,其中, xl:x轴下限 xr:x轴上限 ylim([yl yr]);zlim([yl yr])同理。 例子 x [1:0.1:10]; y 3*sin(x); subplot(2,1,1); plot(x,y) subplot(2,1,2); plot(x,y); ylim([-1,1]); …

在Myeclipse buildpath 加server lib (server runtime)

使用Myeclipse,将eclipse下的工程复制过来后,发现提示Tomcat 7.0 unbound。缺少Server Runtime。 解决方法如下: 1,File->New->Other->Server->Server(注意在new时,需要勾上Show All Wizards),下一步,选择…

Go--4大基本数据类型之布尔类型

一:布尔类的定义 布尔类型只取值true和false,且布尔类型只占一个字节,多用于逻辑判断 二:使用举例 转载于:https://www.cnblogs.com/louis181214/p/10196338.html

Excel中数字、数值和文本的区别

数字包括文本型数字和数值型数字两种形式,数值型数字可以计算,文本型数字不能计算。 例1:文本型数字不能计算 例2:数值型数字可以计算 数值型数字如果输入大于11位数,则会显示为科学计数法。如果输入001,则…

单片机全局有必要封装_MCU-C程序基本编程规范(转)

为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范。本标准规定了程序设计人员进行程序设计时必须遵循的规范。本规范主要针对单片机编程语言和08编译器而言,包括排版、注释、命名、变量使用、代码可测性、程序效率、…

The selected server is enabled,but is not configured pro

The selectedserver is enabled,but is not configured properly.Deployment to itwill not be permitted until the problem is corrected.Pleasenavigate to the server preference pages and verify the field withthe prompt:tomcat jdk name: 翻译:选定的服务器…

懒惰评估

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

python基础_格式化输出(%用法和format用法)

%用法 1、整数的输出 %o —— oct 八进制%d —— dec 十进制%x —— hex 十六进制 >>> print(%o % 20) 24 >>> print(%d % 20) 20 >>> print(%x % 20) 14 2、浮点数输出 2.1 格式化输出 %f ——保留小数点后面六位有效数字  %.3f,保留…

CSV大文件的处理(以ngsim数据为例):分割、导入与合并

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列&…

python用scrapy爬虫豆瓣_爬虫教程——用Scrapy爬取豆瓣TOP250

最好的学习方式就是输入之后再输出,分享一个自己学习scrapy框架的小案例,方便快速的掌握使用scrapy的基本方法。本想从零开始写一个用Scrapy爬取教程,但是官方已经有了样例,所以还是不写了,尽量分享在网上不太容易找到…

context-param与init-param的区别与作用

<context-param>的作用:web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param>2.紧接着,容器创建一个Servl…

如何快速批量修改文件名

文件太多&#xff0c;文件名太乱&#xff0c;希望快速批量修改文件名&#xff0c;以下的两种方法可以帮到你&#xff0c;亲测好用。 方法一 1.选中需要批量修改的文件&#xff0c;如图1 图12.按F2键&#xff0c;输入文件名。如图2. 图23.Enter&#xff0c;效果如图3. 图3方法…

【LUOGU???】WD与积木 NTT

题目大意 把 \(n\) 个有标号物品分到一些有标号的箱子中且不允许为空&#xff0c;问期望箱子的数量。 多组询问。 \(n\leq 100000\) 题解 记 \(f_i\) 为 \(i\) 个有标号物品分到一些有标号的箱子中且不允许为空的箱子的数量之和。 记 \(g_i\) 为 \(i\) 个有标号物品分到一些有标…

7对讲机调频软件_对讲机怎么配对?

有好多朋友买到了新对讲机和老对讲机的频率不一样&#xff0c;从而导致了新旧对讲机无法通联。买到了新对讲机&#xff0c;我们要先知道旧对讲机的频率是多少。要想知道旧对讲机的频率是多少&#xff0c;我们就要需要一定的工具&#xff0c;首先我们要有一台XP系统的电脑&#…

RTK、IMU、RT3000

GPS/RTK 全球卫星定位系统(GPS)的全面建成和发展&#xff0c;导致了导航和测绘行业的一场重大深刻的技术革命。常规的静态GPS测量方法越来越多地应用于高精度控制网的建立&#xff0c;但利用该方法无法在野外对观测数据进行实时检核&#xff0c;从而造成观测结果不合格而需要返…