Java 调用带参数和不带参数的函数有什么区别?
假设我有两个功能: 我有一个全局变量Java 调用带参数和不带参数的函数有什么区别?,java,Java,假设我有两个功能: 我有一个全局变量字符串username,它的值来自文本字段 public void sample_function() { // initialize connection, prepared Stmnt and resultset. String query="select id from test_table where name=?"; pst = c.prepareStatement(query); pst.set
字符串username
,它的值来自文本字段
public void sample_function() {
// initialize connection, prepared Stmnt and resultset.
String query="select id from test_table where name=?";
pst = c.prepareStatement(query);
pst.setString(1, username);
rs = pst.executeQuery();
if(!rs.next())
{
// something
}
else
{
do{
// something
}while(rs.next());
}
}
每当我想调用execute这个代码块时,我只使用sample_function()代码>这很有效。我见过一些代码,其中字符串作为参数传递,如
public void sample_function(String username) {
// initialize connection, prepared Stmnt and resultset.
String query="select id from test_table where name=?";
pst = c.prepareStatement(query);
pst.setString(1, username);
rs = pst.executeQuery();
if(!rs.next())
{
// something
}
else
{
do{
// something
}while(rs.next());
}
}
使用sample_函数(用户名)调用该函数代码>
我的问题是:
当查询从textfield获取所需的输入时,为什么首先要传递一个参数
如果这是编写函数的方法,为什么sample_function()与sample_function(username)一样好用
我们应该在哪些用例中传递参数/参数,以及何时只使用()空括号
使用带有参数的函数可以使用不同的数据执行相同的函数
假设您希望使用此函数不仅为一个用户名执行代码,而且为一行中的三个用户名执行代码。调用函数的代码看起来如何
对于参数,它将如下所示:
sampleFunction("User One")
sampleFunction("User Two")
sampleFunction("User Three")
但是,当函数使用全局变量作为输入时,代码看起来会更加笨拙:
username = "User One"
sampleFunction()
username = "User Two"
sampleFunction()
username = "User Three"
sampleFunction()
这段代码不仅更难看,而且更难理解
想想你的队友,他们想从他们的代码中使用你的函数(记住,软件通常是在团队中开发的)。在调用此函数之前,他们如何知道需要将全局变量username
设置为某个有意义的值?是的,他们可以在您的文档中查找(如果您编写了文档)或询问您(如果您有时间)。但是对于函数参数,开发环境通常会告诉他们“嘿,这个函数想要一个字符串用户名作为输入,而你没有给它一个”。(但可能取决于语言。例如,在JavaScript中,所有函数参数都是可选的,因此忘记参数在语法上是正确的,即使这可能导致运行时出现意外行为)
阅读此代码并试图理解其工作原理的人如何?他们必须猜测,将username
设置为某个值与稍后调用sampleFunction
有关。在这个特殊的例子中,它仍然是很明显的。但是在一个实际的程序中,这两个步骤可能发生在相隔几行甚至不同的源代码文件中。因此,sampleFunction
对username
全局变量的依赖性并不明显
出于这些原因,通常最好将函数所需的任何信息作为参数传递,而不是将其存储在全局变量中,然后由函数读取。这只是一个设计决策,而不仅仅是根据使用情况使代码干净、可重用且结构良好
我举几个例子:
示例1:
如果类中的许多方法中都使用了用户名
,,那么最好将其作为类属性,而不是将其作为参数传递给每个方法,使其成为全局属性或与所有方法共享
另一方面,如果sample_function()
仅使用username
,username
,则无需将其设置为类属性,也无需使用不可用的变量使类变得凌乱难看,尤其是当类具有名为username
的属性时
示例2:
让我们考虑<代码> SAMPLE函数()/Case>只是一个搜索方法,被称为代码> SexByUrEnMeNe()/<代码>。为了使此方法具有可读性和意义,它应该将
用户名
作为参数,并且与它的类紧密耦合,特别是如果该类是存储库
示例3:
您可以根据在输入字段中设置用户名
值的位置以及调用sample\u function()
的时间来决定。如果有一个搜索按钮,当用户单击它时,您应该从文本字段中读取用户名
值,然后调用示例函数()
,示例函数()
应将用户名
作为参数作为用户名
这里是按钮函数中的本地,无需将其传递给全局变量并在示例函数()中重新读取
但是如果在设置了username
值的之外的位置调用sample\u function()
,则最好将username
保存在全局变量中,以便在sample\u function()
。。。越来越多的例子这是一个普遍的问题,比如为什么不将其他参数移动到变量,为什么不将函数分成两个函数,创建语句,然后在其他地方读取结果集。什么样的设计在您的特定类/应用程序中最有效取决于您。使用参数使函数更线程安全。请不要再问同样的问题。非常有用的例子philip和@Yomna Hesham。我开始学习,这对更好地理解很有帮助。你是对的,我一直在使用示例函数1(用户名1)、示例函数2(用户名2)等等。以后我不会再使用了!