首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在函数中更改公共变量是可以的,还是这是不好的做法?

在函数中更改公共变量是可以的,但这通常被认为是不好的做法。以下是详细解释:

更改公共变量意味着在函数内部修改了在函数外部定义的变量。这样做可能会导致以下问题:

  1. 可读性和可维护性下降:当多个函数都可以修改公共变量时,代码变得难以理解和维护。因为无法确定哪个函数会修改变量的值,导致代码的行为变得不可预测。
  2. 并发问题:如果多个线程或进程同时访问和修改公共变量,可能会导致竞态条件和数据不一致的问题。这种情况下,需要使用锁或其他同步机制来确保数据的一致性。
  3. 调试困难:当程序出现错误时,更改公共变量的函数可能是问题的根源。由于多个函数都可以修改变量,调试问题变得更加困难,需要跟踪和分析多个函数的执行路径。

为了避免这些问题,通常建议使用函数的输入参数和返回值来传递和获取数据,而不是直接修改公共变量。这种做法被称为"封装",它提供了更好的代码组织和模块化,使得代码更易于理解、测试和维护。

如果确实需要在函数中修改公共变量,可以考虑以下方法来减少潜在的问题:

  1. 明确文档化:在函数的注释或文档中明确说明该函数会修改公共变量,并解释为什么需要这样做。
  2. 限制访问:将公共变量限制在一个特定的作用域内,只允许特定的函数修改它。这样可以减少对变量的直接访问,提高代码的可控性。
  3. 同步机制:如果多个线程或进程同时访问和修改公共变量,确保使用适当的同步机制,如锁或信号量,来避免竞态条件和数据不一致的问题。

总之,虽然在函数中更改公共变量是可行的,但应该尽量避免这种做法,以提高代码的可读性、可维护性和可靠性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

cuda函数可以按地址调用普通变量么?

请问cuda函数可以按地址调用普通变量么?...但需要注意这个问题: (1)最终指向global memory地址空间指针,可以本次kernel启动,或者下次kernel启动任何线程中都是有效。...如果错误本次kernel启动本block其他线程使用,则自动得到被替换成对应线程对应local memory位置值。...另外两点需要注意: (4)部分平台支持P2P Access情况下,则指向一张卡global memory指针,可以另外一张卡上kernel中被使用,类似情况(1)。...(例如可以参考Pascal具有的显存作为缓存模式(可以看成GPUL3 cache,或者看成GPU支持虚拟内存---例如一张3GB的卡可以使用“虚拟“8GB显存,并且并非所有位置访问概率相同情况下

3.1K70

记住,永远都不要在 Flutter 中使用全局变量

全局变量似乎很棒 Flutter 程序组件,因为它们被声明一次并且可以被程序每个函数访问。...但是,这些变量成本比你想象要高,主要是因为: 如果删除一个全局变量,则必须搜索整个程序并重构每个有权访问已删除全局变量函数 它们很难测试,因为你必须在测试用例之间重置它们 很难跟踪更改,因为每个函数可以修改全局变量...本文中,我们将详细了解全局变量缺点,并学习如何以更有效方式管理状态。 Flutter 全局变量是什么? 全局变量公共变量可以被 Flutter 程序每个方法和对象访问。...Flutter 中使用全局变量缺点 Flutter 中使用全局变量一直受到质疑和批评,通常被认为不好做法。以下使用全局变量缺点: 1....全局变量导致“面条”代码 由于程序每个函数可以修改全局变量,因此很难跟踪更改。如果你正在构建一个大型应用程序, Flutter 中使用全局变量情况会升级。

3.4K30

干货!嵌入式C语言源代码优化方案

自带硬件乘法器AVR单片机,如ATMega163,乘法运算只需2个时钟周期就可以完成。...需要特别指出,编译器提取公共子表达式前不能按照代数等价关系重新安排表达式。这时,程序员要手动地提出公共子表达式(VC.NET里有一项“全局优化”选项可以完成此工作,但效果就不得而知了)。...否则,请在函数一开始把指针指向数据保存到本地变量。如果需要的话,函数结束前拷贝回去。 不好代码: // 假设 q !...虽然不好代码分支可以简单地预测,但是由于推荐代码进入循环前分支已经确定,就可以减少对分支预测依赖。...循环不变计算 对于一些不需要循环变量参加运算计算任务可以把它们放到循环外面,现在许多编译器还是能自己干这件事,不过对于中间使用了变量算式它们就不敢动了,所以很多情况下你还得自己干。

2.6K40

代码优化技巧·代码编写好习惯·代码规范

JDK API对于RandomAccess接口解释:实现RandomAccess接口用来表明其支持快速随机访问,此接口主要目的允许一般算法更改其行为,从而将其应用到随机或连续访问列表时能提供良好性能...推荐以后写并发时候复习一遍 代码规范 注释 不要给不好名字加注释,一个好名字比好注释更重要 不要“拐杖注释”,好代码 > 坏代码 + 好注释 文件/类级别使用全局注释来解释所有部分如何工作...,而非明显细节 不要在代码中加入代码著作信息,git可以干的事情不要交给代码 源代码html注释一种厌物, 增加阅读难度 注释一定要描述离它最近代码 注释一定要与代码对应 公共api需要添加注释...某个公共函数调用私有函数紧随其后 最理想参数零参数,最长不要超过三个入参,尽量不要输出参数 如果函数传入三个及以上参数最好将其抽象为类 标识参数十分丑陋,向函数传入布尔值用于区分不同业务做法很丑陋...,尽可能将条件表达为肯定形式 不要继承常量,比如接口中定义常量,不要使用继承欺骗编程语言作用范围规则 模块不应了解它所操作对象内部情况 DTO(Data Transfer Objects)一个只有公共变量没有函数

1.1K10

Go 进阶训练营 – Go 工程化实践三:配置管理

expvar 包提供了一种标准化接口用于公共变量,例如针对 server 操作计数器; expvar 以 JSON 格式通过 HTTP /debug/vars 来暴露这些变量; 针对这些公共变量...业务配置最好做到管理后台,运营同事才好使用 全局配置 通常,我们依赖各类组件、中间件都有大量默认配置或者指定配置,各个项目里大量拷贝复制,容易出现意外,不好维护。...方式二:统一使用可选函数配置 不管根据配置文件进行配置,还是其他地方需要配置,都使用可选函数模式,不要提供多种初始化方式,这样基础库才精简。...另外毛老师说kratos讲配置定义pb文件生成go代码时,直接额外生成转option函数这是不可行,因为option基础库里定义,kratos现在也并没有这么做。...最佳实践 代码更改系统功能一个冗长且复杂过程,往往还涉及Review、测试等流程,但更改单个配置选项可能会对功能产生重大影响,通常配置还未经测试。

40510

C语言执行效率如何保证?

这是因为,使用了嵌入汇编,便限制了程序可移植性,使程序不同平台移植过程,卧虎藏龙,险象环生!同时该招数也与现代软件工程思想相违背,只有迫不得已情况下才可以采用。...需要特别指出,编译器提取公共子表达式前不能按照代数等价关系重新安排表达式。...这时,程序员要手动地提出公共子表达式(VC.NET里有一项“全局优化”选项可以完成此工作,但效果就不得而知了)。 不好代码: float a, b, c, d, e, f;。。。...虽然不好代码分支可以简单地预测,但是由于推荐代码进入循环前分支已经确定,就可以减少对分支预测依赖。...只有递归函数需要传递大量参数,可能造成瓶颈时候,才应该使用循环代码,其他时候,还是用递归好些。 13、变量 (1)register变量 声明局部变量时候可以使用register关键字。

6.1K108

C#几个经常犯错误汇总

1、C#编程,字符型类型最容易处理出错地方,代价是非常昂贵,.Net Framwork,字符串一个相当特别的引用类型,string本省就是一个不可继承密封类,但是它具有了值类型所应用特点...,但是它在CLR内存还是保存于托管堆之上,也就是说,当我们每次定义一个字符串类型时候,就在堆内存开辟一端内存,而当我们字符串被修改之后,它会创建一个新内存,注意这里内存不连续,而是通过修改栈内地址引用而拼凑字符串...其实在C#,已经为我们提供了StringBuilder和String.Fromat来解决此问题,虽然他们可以实现同样功能,但是他们有质变化,StringBuilder在内存开辟一段连续内存,...资源处理被尽早释放,当然这个方法也适用于实现IDisposable接口类,当时个人不推荐这样做,非常有把握情况下可以手动释放,但是没把握还是叫给.net系统释放,因为本身类析构函数就实现这个方法...4、学会合理管理公共变量,我们系统中经常会滥用公共变量,没有做到合适封装好。

10710

C语言代码优化方案

既使没有内置硬件乘法器AVR单片机,乘法运算子程序比平方运算子程序代码短,执行速度快。 如果求3次方,如: a=pow(a,3.0); 更改为: a=a*a*a; 则效率改善更明显。...需要特别指出,编译器提取公共子表达式前不能按照代数等价关系重新安排表达式。这时,程序员要手动地提出公共子表达式(VC.NET里有一项“全局优化”选项可以完成此工作,但效果就不得而知了)。...虽然不好代码分支可以简单地预测,但是由于推荐代码进入循环前分支已经确定,就可以减少对分支预测依赖。...只有递归函数需要传递大量参数,可能造成瓶颈时候,才应该使用循环代码,其他时候,还是用递归好些。 10、变量 (1)register变量 声明局部变量时候可以使用register关键字。...这就使得编译器把变量放入一个多用途寄存器,而不是堆栈,合理使用这种方法可以提高执行速度。函数调用越是频繁,越是可能提高代码速度。

6.7K108

干货:嵌入式C语言源代码优化方案(非编译器优化)

需要特别指出,编译器提取公共子表达式前不能按照代数等价关系重新安排表达式。这时,程序员要手动地提出公共子表达式(VC.NET里有一项“全局优化”选项可以完成此工作,但效果就不得而知了)。...虽然不好代码分支可以简单地预测,但是由于推荐代码进入循环前分支已经确定,就可以减少对分支预测依赖。...8、函数优化 (1)Inline函数 C++,关键字Inline可以被加入到任何函数声明。这个关键字请求编译器用函数内部代码替换所有对于指出函数调用。...只有递归函数需要传递大量参数,可能造成瓶颈时候,才应该使用循环代码,其他时候,还是用递归好些。 10、变量 (1)register变量 声明局部变量时候可以使用register关键字。...这就使得编译器把变量放入一个多用途寄存器,而不是堆栈,合理使用这种方法可以提高执行速度。函数调用越是频繁,越是可能提高代码速度。

1.5K10

WordPress开发人员犯12个最严重错误

这种做法不好,原因如下: 1.该文件可以随着主题变化而变得非常大,正在积极开发,将会增加功能,有时您将看到大小为1 MB文件。该文件将在全站范围内加载,即使某些页面只需要文件10%代码。...2.使用那些变量函数、常量或类太常见名称 开发插件时,最好使用一种命名约定来防止代码冲突,以防有其他插件使用相同名称。...这就是为什么许多开发人员在他们变量函数名前面加上了一些与插件本身相关独特东西。除了消除代码冲突之外,启用了大量插件时,还可以更容易地发现问题。...实时环境这是一个推荐选择,因为它会使私有服务器路径和脚本隐藏在公共视图中,这对于安全性原因非常有用。然而,开发阶段,最好将它设置为“true”,因为它将通知我们代码任何错误。...PHP方法中使用HTML代码通常是一种不好做法(当然对于小HTML代码也有例外),特别是对于一个由多个开发人员维护插件来说。

2.9K10

Vuex-1 ===>vuexdemo,getters,Mutation

其实我一开始学习看到Vuex集中式管理组件状态,我就想这不就是一个拿公共变量吗?...不论我们用全局配置做,还是全局变量可以做到,甚至利用浏览器localstorecookie session也不是问题啊?...}}得到counter值 我测试时候有App.vue通过点击按钮直接改变store.state.counter值,这样虽然可以进行但是这是不对或者说不被推荐,理由如下 Vuex官方文档说到为了...比如上面的案例,我们希望返回大于传过来年龄对象 注意: - 这里getter里函数,我们必须先返回一个函数函数内指定接收参数 - 并在函数内return一个返回值. 六....具体做法: 我们可以创建一个文件: mutation-types.js, 并且在其中定义我们常量.

1.1K30

新一代响应式设计:适应多设备最佳解决方案

因为无论我“移动优先”还是“桌面优先”,我都会发现自己需要大量CSS覆盖!而且如果有一件事我CSS中学到,那就是CSS覆盖邪恶!...创建一个 SASS 文件(例如:_devices.scss),将常见断点作为变量。 现在只需使用变量即可: 当设计师突然觉得断点需要更改时,这个技巧可以帮助您避免更改大量代码行。...网络上常见做法使用仅以最小宽度为起点而没有最大宽度断点(称之为“开放式断点”),这是一个非常大问题!你问为什么?因为你几乎无法控制上层断点会受到什么影响!...您可以同一个媒体查询中使用尽可能多断点,使用逗号(表示“或”),因为我们已经将这些断点保存在变量,所以可以轻松使用它们。 CSS封装威力与闭合断点 现在让我们再来看看这个主标题组件。...总结 从这篇文章需要了解重点是什么: 以小组件为单位工作 单独文件定义SASS变量常见闭合断点 每个需要组件中使用SASS变量断点 工作和思考时要“基本优先”!

17830

Vue15个最佳做法

这是很有必要,这样Vue就可以跟踪组件状态,并对不同元素有一个常量引用。使用动画或Vue转换时,key 非常有用。 如果没有key ,Vue只会尝试使DOM尽可能高效。...2.事件中使用短横线命名 发出定制事件时,最好使用短横线命名,这是因为父组件,我们使用相同语法来侦听该事件。...我们通过函数返回数据对象来实现这一点。 // 好做法 data () { return { name: 'My Window', articles: [] } } 5....// 不好做法 问题 Vue 优先使用v-for指令,而不是v-if指令。...另外,通过使用webpack导入功能,我们可以搜索与命名约定模式匹配组件,并将所有组件自动导入为Vue项目中全局变量

1.2K10

读《代码整洁之道》

远离重复,拒绝重复,方法有很多,抽象到基类或放到底层公共类库。 没有人能一次性就将函数很完美,好函数通过重构得到。...有的开发人员喜欢注释中签上自己名字,这种做法也没没有必要,因为我们有源码管理工具。...单元测试好处: 有了测试不用担心对代码修改 有了测试可以毫无顾虑去改进架构和设计 如果您是做项目,快速满足客户需求就可以了,没有必要在项目中添加单元测试,如果开发产品,单元测试还是非常重要,因为产品快速迭代就像在给高速飞行飞机加油一样...类 类通常由变量、属性和方法组成。按照书中所讲Java约定,类应该由一组变量开始,如果有静态公共常量,应该放在前面,然后私有静态变量和私有实体变量。...公共函数跟在变量之后,一些供公共函数调用私有工具函数公共函数之后。 和函数一样,类也应该要尽可能短小。但和函数不同不是以代码行数来权衡,而是以职责。

85720

【译】编写高质量JavaScript模块4个最佳实践

这篇文章介绍了有关如何更好地组织JavaScript模块4种最佳实践。 1.优先使用命名导出 当我开始使用JavaScript模块时,我使用默认语法来导出模块定义单个块,不管还是函数。...`; } } 随着时间推移,我注意到了重构默认导出类(或函数)困难。重命名原始类时,使用者模块类名没有改变。 更糟糕,编辑器没有提供有关要导入类名自动完成建议。...: JSON.parse(bigJsonString) }; 这是一个问题,因为bigJsonString解析模块级范围内完成。...,模块级范围作用是定义模块组件、导入依赖项和导出公共组件:这是依赖项解析过程。...3.尽可能使用高内聚模块 内聚性描述了模块内部各个组件在一起程度。 高内聚模块函数、类或变量密切相关。他们专注于单个任务。

93420

如何写出优雅 JS 代码,变量函数正确写法

开发变量名,函数名一般要做到清晰明了,尽量做到看名字就能让人知道你意图,所以变量函数命名挺重要,今天来看看如果较优雅方式给变量函数命名。...无需添加不必要上下文 如果类名/对象名已经说明了,就无需变量重复。...一个很好解决方案addItemToCart总是克隆cart数组,编辑它,然后返回克隆。这可以确保购物车引用其他函数不会受到任何更改影响。...JS 一种不好做法,因为可能会与另一个库发生冲突,并且在他们生产中遇到异常之前,API 用户将毫无用处。...当具有if语句类和函数时,这是告诉你使用者该函数执行不止一件事情。 不好写法 class Airplane { // ...

3.8K30

MFC中注释含义

这是因为 MFC 基于成员变量函数使用而非允许访问类型来分隔它们。MFC 对 private 使用很保守;即使被视为实现详细信息项通常都受保护,但很多时候它们公共。...成员变量和成员函数可以出现在此节将来 MFC 版本,该行下面的所有内容都可能更改。不应依赖 // Implementation 行下详细信息,除非只能这样做。...注意    // Implementation 注释上方或下方可以找到其余类型注释。无论出现在上方还是下方,这些注释都描述它们下面声明成员类型。...“Get”和“Set”函数可以是虚拟,也可以不是虚拟。“Get”函数一般为 const,因为大多数情况下它们都没有副作用。这些成员通常是公共;受保护属性和私有属性通常在实现节。...另一方面,CDocument 类列出了大约 10 个可重写成员函数某些类可以看到注释 // Advanced Overridables。这些只有高级程序员才应尝试重写函数

1.1K70

Python 太糟糕了?开发者总结了 8 大原因

而更糟糕地方在于,对于大多数语言来说,导入代码就只是导入代码,如果存在带有构造函数全局对象,那么一些语言会执行代码,但这通常被认为一种不好做法。...7、按对象引用传递变量 大多数编程语言都按值传递函数参数,但是 Python 默认使用 pass-by-object-reference 参数执行函数,这意味着更改变量可能会使引用值改变。...这是程序、函数和和面向对象编程语言之间重大差异之一,如果每个变量都是通过对象引用传递,并且对变量任何更改都会在任何地方更改引用,那么可以直接使用全局变量来处理所有变量。...但是全局变量弊端有目共睹。...但是 Python 这么做不行

61550

开源测试平台横向测评系列『流马』篇:测试界“木流牛马”

Metersphere公共参数放在环境中进行管理,它是一个环境下挂多个变量概念,而流马中环境则是和变量进行分开,一个项目可以新增多个环境,一个项目可以新增多个公共参数,环境和公共参数之间互不干扰。...函数,引用方式见下图标: 添加、引用自定义函数 某些情况下,内置函数可能无法满足生成参数需求,这是可以创建一些自定义函数。...类型变量: 参数值没加引号、传参时不会自动带上引号 也不能在定义变量时给参数值加上引号 只能在接口引用变量时,外层带上双引号 举个例子可能会直白一点: 假如我们登录接口需要传入密码参数,而我们提前公共参数定义了这个变量...举个例子,如果我只测试用例A添加或更改了某个接口请求头,那么其他测试用例B、C、D则需要一一更改。...(value)来返回 接口header和用例断言中都可以引用公共参数和提取变量,但是提取变量值传参时如果类型不同、需要提前转换类型 用例,如果用到了一些自定义公共参数或自定义函数,需要将其一一勾选导入

1.9K10
领券