编程基本功:如何拆分一个大函数_如何拆解函数-程序员宅基地

技术标签: 行业点评  编程基本功  

  一个大函数,有好处,有坏处。总体来说,坏处大于好处。所以要拆分。听起来很简单,做起来就发现问题。原函数运行正常,拆分之后就错了,还不知道哪里有问题,也没有人问。怎么办?

  近日因为工作关系,拆分了一个大函数。有了一些体会。写出来,也许有人需要呢?咱这也是全网首发了。

  拆分大函数,难题就是如何把变量变成小函数的参数。象C这样的有指针的还好说,一个指针下去就万事大吉。对于JAVA这种语言就很麻烦:值传下去容易,问题是变量会变。这种情形有两种办法:

  • 搞一个结构体。一般不使用这种方法,因为这表示进入函数就要新建一个对象;而且仅仅为了当前函数,浪费。
  • 把参数变成字段。如果是静态函数就转变为成员函数。一般推荐这种办法。

 

  在传递过程开发中,为了确保正确,有两个技巧:

  • 参数变为字段后,就把参数从原函数删除(在调用之前,可以使用一个init()把这些字段赋值)。这样函数内修改时全部修改的字段,不会产生歧义。
  • 小函数的参数,要加上final/const,表示禁止修改。避免修改了还不知道,出错了也不好查。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/quantum7/article/details/110661478

智能推荐

【学习笔记】基于遗传算法的BP神经网络优化算法_遗传算法优化 bp 染色体-程序员宅基地

文章浏览阅读6.8k次,点赞11次,收藏111次。一、背景介绍BP神经网络是一类多层的前馈神经网络。它的名字源于在网络训练的过程中,调整网络的权值的算法是误差的反向传播的学习算法,即为BP学习算法。BP神经网络是人工神经网络中应用广泛的算法,但依然存在着一些缺陷,例如学习收敛速度太慢、不能保证收敛到全局最小点、网络结构不易确定等。另外,网络结构、初始连接权值和阈值的选择对网络训练的影响很大,但是又无法准确获得,针对这些特点可以采用遗传算法对神经网络进行优化。二、算法流程创建网络;确定网络的初始权重值和阈值,对其进行编码得到初始种群;while_遗传算法优化 bp 染色体

Redis6 主从复制及哨兵机制_redis 6 哨兵-程序员宅基地

文章浏览阅读316次。Sentinel(哨兵)进程是用于监控Redis集群中Master主服务器工作的状态在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用(HA)其已经被集成在redis2.6+的版本中,Redis的哨兵模式到了2.8版本之后就稳定了下来。......_redis 6 哨兵

C语言 | 链表的建立和剔除_snode *init()-程序员宅基地

文章浏览阅读363次。单向链表,定义、插入、剔除操作,模块化能直接调用_snode *init()

wide find - replace [转]-程序员宅基地

文章浏览阅读84次。wide find - replace最后更新:2008-09-09, Ver 2.3.4.0909 简介 wfr   - 支持多国语言的字符串批量查找和替换   - 批量字符集编码转换 纯 unicode 规则匹配内核,..._iso-2022-cn-ext

Stable-Diffusion ubuntu服务器部署,报错解决方法(小白教程)_stable diffusion app, local_url, share_url = share-程序员宅基地

文章浏览阅读1.7k次,点赞18次,收藏18次。Stable Diffusion是一个深度学习模型,专注于生成高质量的图像。它由CompVis团队与Stability AI合作开发,并在2022年公开发布。这个模型使用文本提示(text prompts)生成详细、逼真的图像,是目前人工智能图像生成领域的一大突破。它属于文本到图像(Text-to-Image)生成模型的范畴,使用了一种称为潜在扩散模型(Latent Diffusion Model, LDM)的技术。_stable diffusion app, local_url, share_url = shared.demo.launch(

ASP.NET Core 运行原理解剖[5]:Authentication-程序员宅基地

文章浏览阅读3.1k次。在现代应用程序中,认证已不再是简单的将用户凭证保存在浏览器中,而要适应多种场景,如App,WebAPI,第三方登录等等。在 ASP.NET 4.x 时代的Windows认证和Forms认证已无法满足现代化的需求,因此在ASP.NET Core 中对认证及授权进行了全新设计,使其更加灵活,可以应付各种场景。在上一章中,我们提到HttpContext中认证相关的功能放在了独立的模块中,以扩展的方式来展_.net core authenticationhandler httpcontext

随便推点

Linux系统100条命令:关于Ubuntu和 CentOS 7 相同功能的不同的终端操作命令_ubuntu 命令跟centos-程序员宅基地

文章浏览阅读718次。CentOS 7:ip link set interface_name up 或 ip link set interface_name down。Ubuntu:ifconfig interface_name up 或 ifconfig interface_name down。CentOS 7:编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 文件。Ubuntu:编辑 /etc/network/interfaces 文件。_ubuntu 命令跟centos

windows10下VS2019编译jpegsrc.v9e.tar.gz为lib静态库(已验证)_jpeg library error vs2019-程序员宅基地

文章浏览阅读652次。jpegsr9e windows vs2019生成方法,以及库下载_jpeg library error vs2019

重磅?华为 Mate60/Pro 系列网速实测结果公布,最高 1205.57 Mbps_华为mate60pro+核实网络-程序员宅基地

文章浏览阅读647次。总的来说,华为Mate 60/Pro系列手机的高速网速表现引起了广泛的关注,这也是消费者对该系列手机购买热情高涨的一个重要因素。可以看出,华为Mate 60/Pro系列手机的网速表现非常出色,这也是消费者购买该系列手机的一个重要原因。此前,华为Mate 60 Pro的供应量已经增至1500万至1700万台,而最新消息称,华为Mate 60 Pro和Mate 60 Pro+的出货量甚至已上调至2000万台。目前,在中国市场上,手机竞争愈发激烈,不仅华为Mate 60系列,其他品牌的手机也都受到了高温的迎接。_华为mate60pro+核实网络

access查找出生日期年份_access怎样利用出生日期计算年龄呀!-程序员宅基地

文章浏览阅读7.1k次。公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解。话题:access怎样利用出生日期计算年龄呀!回答:lt;%set rs = server.createobject("adodb.recordset") curid=request("id") sql = "UPDATE pany SET a_num=a_num+1,day_count=day_count+1 WHERE day_lda..._access出生年份表达式

python 内置函数-程序员宅基地

文章浏览阅读75次。Python内置函数(1)——absPython内置函数(2)——divmodPython内置函数(3)——maxPython内置函数(4)——minPython内置函数(5)——powPython内置函数(6)——roundPython内置函数(7)——sumPython内置函数(8)——bool...

希望OL修改服务器经验,希望OL服务端架设技术教程-程序员宅基地

文章浏览阅读2.8k次。经测试自带的MYSQL可能有问题,也可能没问题。如果有问题请下载安装MYSQL5.0然后导入端里面自带的guaiwu.sql希望ol教程=========================================客户端SO3D.exe需要改IP 我这里是在服务器上录像的,我把客户端的SO3D.exe复制到服务端这里了具体更改用UE搜索MessgerIp 在附近找到他的ip 改成你自己的,我这..._希望ol 服务器架设

推荐文章

热门文章

相关标签