我的方法在这方面看起来很大吗?
以下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
我的方法在这方面看起来很大吗?相关推荐
- 你只是看起来很努力_我的方法在这方面看起来很大吗?
你只是看起来很努力 以下Java方法的大小是多少? public Collection getDescription() {SystemLibrary systemLib = registry.get ...
- 犀牛科技陈一昕:医疗的蛋糕看上去很大,但是不好切丨清华人工智能研习社
大数据文摘作品 大数据文摘记者 刘涵 魏子敏 作为AI领域落地的重要赛道,医疗行业近两年正在迎来新的风口.而相比其他领域,政策等因素在这个领域的影响更大更重,研发的困难也相应更高."医疗的蛋 ...
- 属性子集选择的基本启发方法_一文看懂数据预处理最重要的3种思想和方法
导读:本文我们考虑应当采用哪些预处理步骤,让数据更加适合挖掘.数据预处理是一个广泛的领域,包含大量以复杂的方式相关联的不同策略和技术.我们将讨论一些最重要的思想和方法,并试图指出它们之间的相互联系. ...
- 三星识别文字_三星手机实现音频转文字、文字录入的方法,不知道的看这里!一遍就会了...
原标题:三星手机实现音频转文字.文字录入的方法,不知道的看这里!一遍就会了 很多办公的朋友在会议记录的时候都会用手写笔记活码字来记录会议内容,这样的话很难跟上会议发言人的速度,有得时候还会因为漏了重点 ...
- html在小的电脑屏幕字体缩小,网页的字变小了怎么办?教你3种方法,让你看网页不再费眼~...
原标题:网页的字变小了怎么办?教你3种方法,让你看网页不再费眼~ 使用电脑的时候,最离不开的就是网络.但是最近有位朋友在使用电脑浏览器浏览网页的时候,发现字体突然变小了,看起来很不舒服,但是又不知道恢 ...
- 正确理解和判断PR劫持的方法(站长必看)
正确理解和判断PR劫持的方法(站长必看) PR劫持经常出现在站长探讨网站建设和SEO之中,那到底什么是PR挟持呢?我专门搜集了网络上关于PR挟持概念比较正确的解释.PR挟持的概念是SEO最重要的概念之 ...
- nc提示java过期_用友NC系统使用过程中常见问题和解决方法!财会必看!
原标题:用友NC系统使用过程中常见问题和解决方法!财会必看! 用友NC系统使用过程中常见问题和解决方法: 1.无法安装客户端插件,不能进入NC系统登陆界面 问题现象 现象1:可以打开web界面,但无法 ...
- CVPR论文解读 | 剁手有了新方法,明星同款边看边买
注:CVPR是由全球最大的非营利专业技术学会IEEE(电气和电子工程师协会)举办的计算机视觉领域的国际顶会,2017 CVPR收到超过2500篇论文投递,最终收录不到800篇,阿里巴巴集团iDST和A ...
- 微信服务通知消息找回_微信好友删除了怎么找回?史上最快的找回方法,确定不看下么?...
微信好友删除了怎么找回?史上最快的找回方法,确定不看下么? 微信好友删除了怎么找回?随着现在微信使用的越来越频繁,导致手机通讯录的功能已经退化,可以说现在一个人可能会没有对方的手机号,但是一定不会没有 ...
最新文章
- 马斯克“做空”特斯拉
- Synchronized和Lock有什么区别
- 【学习笔记】rabbitmq设置队列ttl和使用延迟插件的代码示例
- python编写自定义函数判断n1-n2范围内的素数_【每日道代码题001】- PYTHON基础复习...
- 洛谷P1434滑雪(逆向图的遍历搜索递归+记忆化,最长路问题)
- 关于跨域问题的解决办法
- sun8134的Blog
- 有哪些行业或生意是电商无法取代的?
- 剑指offer值二叉树的下一个结点
- 关于java加壳和代码混淆
- ubuntu apt 卸载 golang
- windows下面刷新dns
- 对数似然值 matlab,matlab aic准则 怎么计算对数似然值
- “天天向上“py代码
- 用友t6请先设置文件服务器,用友T6-餐饮管理软件标准版发版说明
- hdfs单点故障和内存受限问题
- 大三、大四期间去实习,要不要签三方协议?
- 行业分析-全球与中国Wi-Fi6和Wi-Fi6E芯片组市场现状及未来发展趋势
- python agg函数_Python pandas.DataFrame.agg函数方法的使用
- 京东测试之道,这些你早该知道!
热门文章
- Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
- Java GC系列(1):Java垃圾回收简介
- 内存不足The following exception is caused by a lack of memory or swap, or not having swap
- 相比学习好的学生,老师最喜欢努力认真学习的学生
- 《白鹿原》金句摘抄(二)
- 2015蓝桥杯省赛---java---B---8(饮料换购)
- 使用Jersey跨服务器上传图片 报405 Method Not Allowed错误
- Struts2下创建自定义类型转换器(表单中日期的处理)
- java虚拟机的内存模型_JVM(Java虚拟机)内存模型(转载/整理)
- spring 注释_Spring@懒惰注释