编程中为什么要把一些变量私有?

比如Java中把一些变量声明成私有的,或是在JavaScript中用闭包来隐藏一些变量不被意外修改;

我想问的是:既然是自己编写的程序,自己还不清楚哪些东西该不该修改?如果放在自己负责的模块中,团队合作的时候也不必担心队友会修改啊。大家相互调用,传参,干嘛要修改别人定义好的变量?

没有经历过什么实际开发,求经验人士解惑

回复
阅读 7.4k
6 个回答

这个,与其整天铭记着“这个不能改,诶那个可以改”,不如让编译器或者解释器进行检查。

而且把什么变量设为私有,什么变量设为公有,也能反映出开发者对某个抽象模型的设计。如果能够分出公有和私有的变量,代码的逻辑就会更加清楚啊。

将成员变量声明为private,可以赋予

  • 客户访问数据的一致性。这样就使得所有的public接口均为函数,客户就不需要在打算访问class成员时迷惑地试着记住是否该使用小括号,他们只要做就是了,因为每样东西都是函数。
  • 可细微划分访问控制。如果令成员变量为public,每个人都可以读写它,但如果你以函数取得或设定其值,你就可以实现出“不准访问”、“只读访问”以及“读写访问”,甚至是“只写访问”。毕竟每个成员变量都需要一个getter函数和setter函数很少见。
  • 允诺约束条件获得保证。某些成员变量有约束条件,诸如年龄等,这些成员变量的约束条件可在public接口函数中进行判别约束。
  • 提供class实现编写者以充分的实现弹性。成员变量的封装性与“成员变量的内容改变时所破坏的代码数量”成反比。假如我们有一个public成员变量,而我们最终取消了它。多少代码可能会被破坏呢?所有使用它的客户码都会被破坏,而那是一个不可知的大量。因此public成员变量完全没有封装性。从封装的角度看,只有两种访问权限:private(提供封装)和其他(不提供封装)。

簡單的講就是, 因為看別人的代碼很難, 尤其是在代碼命名不規範的情況下.
通俗的講就是, 因為團隊合作, 要寫出更加符合規範的代碼, 易讀比易寫更重要. readbility over writibility.
專業的講就是, 看 樱空释 的解釋.

你也清楚private是为了安全性,防止变量被意外修改,但就是认为这个意外应该是不会发生的对吗?所谓意外就是意料之外的事情。你自己肯定是知道自己的程序的运行逻辑,在你自己写的程序中一般还不容易出错。但是别人调用你的程序时,你不能做假设他一定是很明智的调用,而是应该按他就是想让程序崩溃这个角度来写代码,这样写出的代码才健壮。就像错误处理一样,真正可用的项目是一定要有的。
class a
{
func1
func2
var a1
}
本来只有你的func1、func2应该访问a1的,别人在调用你的程序时,意外修改了a1,那么就很有可能导致在接下来调用func1、func2时出错,因为func1和func2的运行时依赖于a1的。

将代码设为私有的,然后再生成get、set方法,这是java特点-->封装,而且也会将常用的属性封装到类里,这是写作规范,也是比较安全的,建议多看看、多敲敲代码、多想想。

新手上路,请多包涵

变量设为设为私有主要有两个原因:1.通过接口获取数据,隐藏可能的数据转换细节(也顺带提供了统一的转换方法)2.限制了修改数据的可能性于一个函数入口,因为函数中可以做安全判断,保证了数据安全。《C++ effective:改善55》中国有一篇比较详细的说明

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏