Java (void方法类型vs返回的方法)用于更改私有全局变量

Java (void方法类型vs返回的方法)用于更改私有全局变量,java,c#,c++,oop,Java,C#,C++,Oop,假设我们有一个名为x的全局变量,如下所示: public class test { private int x = 0; //lots of code here... } 现在让我们假设,我们希望在某个任意点,在类测试中改变x的值(而不是从类外部) 有两种方法可以做到这一点: 使用无效方法: public class test { private int x = 0; //lots of code here... changeX();

假设我们有一个名为x的全局变量,如下所示:

public class test
{
    private int x = 0;
    //lots of code here...
}
现在让我们假设,我们希望在某个任意点,在类测试中改变x的值(而不是从类外部)

有两种方法可以做到这一点:

使用无效方法:

public class test
{
     private int x = 0;
     //lots of code here...
     changeX();

     private void changeX()
     {
         // calculate stuff
         this.x = newXValue;
     }
}
public class test
{
     private int x = 0;
     //lots of code here...
     x = changeX();

     private int changeX()
     {
         // calculate stuff
         return = newXValue;
     }
}
使用int类型方法:

public class test
{
     private int x = 0;
     //lots of code here...
     changeX();

     private void changeX()
     {
         // calculate stuff
         this.x = newXValue;
     }
}
public class test
{
     private int x = 0;
     //lots of code here...
     x = changeX();

     private int changeX()
     {
         // calculate stuff
         return = newXValue;
     }
}
有什么理由让我选择一个而不是另一个吗?安全原因?可读性


我在整个程序中都会遇到这种情况,我很难决定使用哪种约定。

只要您的代码对类是私有的,我看不出有任何理由会出现安全问题。我个人会选择该方法的无效版本,因为任何调用changeX()方法的人也可以直接访问x(在同一个类中)。返回int打开了局部变量执行操作的可能性,这些操作应该在类变量上执行。

如果我们在这里清楚地谈论私有内容(私有方法和私有字段),那么我几乎总是更喜欢函数版本的方法:返回值

如果您可以将所有计算封装在这个方法的主体中,那么我认为没有理由强迫它也更新私有字段。这些方法应该做一件事,并且做得很好。只需计算并返回值,然后让类中其他地方的调用代码随意处理它,因为该代码将了解一般情况


但是,您显然会将方法的名称更改为类似于
calculateY()
,其中Y不是指字段的名称,而是指它所包含的数据(字段X将被命名为描述它对类如何有用,而Y将描述它是如何计算的,这可能是也可能不是两个不同的东西,取决于用例).

您所展示的代码在您标记问题的任何语言中都无效。因此,哪一种语言也不好,因为这两种语言都不编译。您的示例都不会用C#编译。这不是一个语言不可知的问题-如果这样做“合适”,环境会有很大影响。这是一个与l有关的逻辑问题isted语言,不仅仅是一个特定于代码的问题。您提供了一些代码,就好像在类的主体中有一些“main”代码在执行。事实并非如此。运行此“main”我认为,方法中的代码会破坏问题的目的,因为它将在一个无效的方法中运行,反过来调用另一个方法。请通过提供的编译代码澄清您想要什么。但由于副作用,它不是“功能”版本;无论它的名称如何。一些语言(以及类似的生态系统)是一个严格的修改/读取拆分,而其他人则鼓励修改+返回。@user2864740该方法没有副作用,它只是计算并返回一个值。调用方然后将该值分配给字段或不分配给字段,但这取决于调用方,这不是调用该方法的副作用。也许我在我的句子中不清楚,我想我会rified now.@user2864740关于你评论的第二部分,我认为它更多地取决于精确的用例和计算,而不是语言/生态系统。我可以是Java或C,我仍然会发现将计算与你使用它的方式分离是最好的(我必须在这里明确指出,我们谈论的是私有方法,这不能推广到公共方法)。是什么让你认为它“应该[总是]在类变量上执行”?