热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

变量是作为参数还是作为类属性(变量)

问题起源:问题起源,在我写代码中,由于前期思路不清淅,编程较少,代码不断地DEBUG,测试功能,导致写了很多小代码块的方法,最后代码看起来有以下几个特点:1.类方法特

问题起源: 问题起源, 在我写代码中, 由于前期思路不清淅, 编程较少, 代码不断地DEBUG, 测试功能, 导致写了很多小代码块的方法,最后代码看起来有以下几个特点:
1. 类方法特别多, 有许多方法是为了帮助确定代码正确, 帮助调试,将一个一个方法变成了方法链, 最后多个方法组成一个方法。
2. 许多方法, 使用的同一个变量, 都采用的传参的方式,方法signature特别臃肿。
3. 类代码特别长。
总结起来就是:代码看起来尤其不干净。


最后,在程序完成的时候,为了将效率,代码整洁,封装,必须重构代码,就有了以下几个问题:
1. 重复用了几次的方法,首先从每一个使用它的方法中分离出去是有必要的,但是是否将这些放在这个类里却是一个问题。
2. 重复使用的变量是作为类属性呢?还是作为参数传参?

回答上面的问题,本人代码能力还十分欠缺,此时这个博客更多是将这个问题放在这里。

不过, 回答以上问题, 角度是一定的, 效率和代码整洁, 以及一些你采用的变量的问量, 比如如果你的类变量, 类似于Sockets这样的变量, 那么他与像int这样的变量是否有区别呢?


本人暂时有几方面觉得是对的:引用于讨论问答
1. 设计类属性是第一的, 那么这个参数如果是类属性, 方法就应该调用类属性,将它放在外面。 如果采用参数, 那么你必须有相应的理由。就可扩展性来说, 最可怕就是为了方便, 修改代码, 最后会导致你的代码很快膨胀, 和重复。
2. 将变量作为参数是有好处的, 比如能更快地从method’signature中知道方法的功能。其次作为参数能更好地避免变量在其它地方被修改, 导致异常。另外, 它在代码测试中有极大地帮助, 这也是我的代码变得臃肿的原因。
3. 这个问题不是在所有项目中是通用的概念。


总结如下:

作为参数变量:
1. 能更好地测试代码
2. 可能无副作用
3. 能帮助更好地理解代码


作为成员变量:
1. 能更好地封装
2. 代码看起来更整洁,
3. 调用类时, 更方便地调用方法


这个问题的平衡好像与一个问题有关, 在维基上有anti-pattern. 关于此篇下次补充。


推荐阅读
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • ARM汇编基础基于Keil创建STM32汇编程序的编写
    文章目录一、新建项目(1)工具介绍(2)创建项目:二、配置环境(1)配置芯片&#x ... [详细]
  • 单片机入门指南:基础理论与实践
    本文介绍了单片机的基础知识及其应用。单片机是一种将微处理器(类似于CPU)、存储器(类似硬盘和内存)以及多种输入输出接口集成在一块硅片上的微型计算机系统。通过详细解析其内部结构和功能,帮助初学者快速掌握单片机的基本原理和实际操作方法。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • R语言中向量(Vector)数据类型的元素索引与访问:利用中括号[]和赋值操作符在向量末尾追加数据以扩展其长度
    在R语言中,向量(Vector)数据类型的元素可以通过中括号 `[]` 进行索引和访问。此外,利用中括号和赋值操作符,可以在向量的末尾追加新数据,从而动态地扩展向量的长度。这种方法不仅简洁高效,还能灵活地管理向量中的数据。 ... [详细]
  • 译文:如何使用SocketAsyncEventArgs类(How to use the SocketAsyncEventArgs class)
    转载自:http:blog.csdn.nethulihuiarticledetails3244520原文:HowtousetheSocketAsyncE ... [详细]
  • UML 包图
    什么是包包可直接理解为命名空间,文件夹,是用来组织图形的封装,包图可以用来表述功能组命名空间的组织层次。•在面向对象软件开发的视角中&#x ... [详细]
  • python网络编程 day27 网络编程初识 ——socket
    一、内容回顾1、两个内置函数(装饰器)及类中的魔术方法 ... [详细]
  • 双指针法在链表问题中应用广泛,能够高效解决多种经典问题,如合并两个有序链表、合并多个有序链表、查找倒数第k个节点等。本文将详细介绍这些应用场景及其解决方案。 ... [详细]
  • 外观模式:为子系统中的一系列接口提供一个统一的访问入口,通过定义一个高层次的接口,使子系统的使用变得更加简便和高效。该模式特别适用于那些需要简化复杂子系统交互的场景,能够显著提升代码的可复用性和可维护性。对于具备一定面向对象编程基础的开发者来说,掌握外观模式将有助于更好地组织和管理复杂的软件架构。 ... [详细]
  • NFT市场热度持续攀升,波卡能否抓住机遇迎来NFT夏季热潮?
    NFT市场热度持续攀升,波卡能否抓住机遇迎来NFT夏季热潮? ... [详细]
  • 网络编程:其实就是在学socketsocket是什么?翻译过来称为套接字是对底层的TCPIPUDP等网络协议进行封装使得上层的应用程序开发者,不用直接接触这对复杂,丑陋的协议在程序 ... [详细]
  • 阿里首席架构师科普RPC框架
    RPC概念及分类RPC全称为RemoteProcedureCall,翻译过来为“远程过程调用”。目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程 ... [详细]
  • 一、安装telnet1.上传如下的rpm安装包http:mirrors.163.comcentos7.6.1810osx86_64Packagestelnet-0.17-64.el ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有