当前位置: 首页 > news >正文

代码坏味道与重构之全局变量

文章目录

    • 1. 为什么全局变量是坏味道
    • 2. 重构全局变量的目标
    • 3. 重构全局变量的技巧

1. 为什么全局变量是坏味道

全局变量的作用范围是全局,通常指类变量或单例等,可以在代码中任一角落修改的数据,而且没有任何有效的机制检测出全局变量修改的位置。因此全局变量引发的bug,都是一些诡异的bug,难以定位。

2. 重构全局变量的目标

目标就是尽可能的消除全局变量,非必要且必须,否则不要使用全局变量。

《重构》书中提到:

良药与毒药的区别在于剂量。少量的全局变量影响或许有限,但数量越多,处理的难度就会指数上升。因此即便只有少量的数据,我们也愿意将它封装起来。

3. 重构全局变量的技巧

我们可以通过封装变量抽提函数 消除全局变量。

操作快捷键
抽取方法Ctrl + Alt + M
移动静态成员F6
转换为实例方法Ctrl + Alt + Shift + T -> Move Instance Method
鼠标右键 -> refactor -> Move Instance Method
抽取字段Ctrl + Alt + F

相关文章:

  • 伪原创-伪原创软件-免费伪原创软件
  • Vue - 插值 - 指令 - 过滤器 - 计算属性与监听属性 - 购物车案例
  • 自己的思考
  • 电脑无线5g网卡发现不了网件R7000的Wifi 5g网络
  • 刷题记录:牛客NC201628纸牌游戏
  • 线性表与链表的详解
  • 常量指针、指针常量,指针数组、数组指针,函数指针、指针函数
  • java基于ssm+vue+elementui楼盘房屋销售系统 前后端分离
  • FastAPI 学习之路(三十三)操作数据库
  • 网络技术-Cisco路由器
  • 【halcon案例01 】金属工件几何测量
  • 第十章Redis_主从复制
  • 牛客 NC24858 [USACO 2009 Nov S]Job Hunt
  • 687 最长同值路径——Leetcode 天天刷(2022.9.2)【DFS】
  • 新店速递丨白玉兰(商务)酒店赣榆吾悦广场店 正式上线
  • [LeetCode] Wiggle Sort
  • angular2开源库收集
  • iOS编译提示和导航提示
  • IOS评论框不贴底(ios12新bug)
  • Java基本数据类型之Number
  • js递归,无限分级树形折叠菜单
  • Linux Process Manage
  • v-if和v-for连用出现的问题
  • webpack+react项目初体验——记录我的webpack环境配置
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 程序员最讨厌的9句话,你可有补充?
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 正则学习笔记
  • hi-nginx-1.3.4编译安装
  • 积累各种好的链接
  • ​水经微图Web1.5.0版即将上线
  • #FPGA(基础知识)
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (八)c52学习之旅-中断实验
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • @Pointcut 使用
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [C++] new和delete
  • [IDF]被改错的密码
  • [LeetCode]—Implement strStr() 寻找子串匹配第一个位置 (KMP)
  • [LeetCode]—Rotate Image 矩阵90度翻转
  • [Linux]进程信号(信号入门 | 信号产生的方式 | 信号捕捉初识)
  • [Linux_IMX6ULL驱动开发]-基础驱动
  • [Redis实战]分布式锁-redission
  • [Rust学习:二]变量和传参
  • [sqlmap]学习笔记#1
  • [sqoop] sqoop 小试牛刀