Remove Assignments to Parameters (移除对参数的赋值)

Summary:

以一个临时变量取代该参数的位置。

Motivation:

首先,我们解释清楚“对参数赋值”这个说法的意思。如果你把一个名为foo的对象作为参数传给某个函数,那么,“对参数赋值”意味着改变foo,使它引用另一个对象。如果你在“被传入对象”身上进行什么操作,那没问题。我们只针对“foo被该而指向另一个对象”这种情况来讨论:

 void amethod(Object foo){

   foo.modifyInSomeWay();  //that’s OK

  foo=anotherObject;          //trouble and despair will follow you

这种做法降低了代码的清晰度,而且混用了按值传递和按引用传递这两种参数传递方式。Java 只采用按值传递方式,我们的讨论也正是基于这一点。

在按值传递的情况下,对参数的任何修改,都不会对调用端造成任何影响。那些用过按引用传递方式的人可能会在这一点上犯糊涂。

另一个让人糊涂的地方是函数本体内。如果你只以参数表示“被传递进来的东西”,那么代码会清晰得多,因为这种用法在所有语言中都表现出相同语义。

在java中,不要对参数赋值:如果你看到手上的代码已经这样做了,请使用Remove Assignments  to Parameters

当然,面对那些使用“出参数”的语言,你不必尊徐这条规则。

Mechanics:

1.建立一个临时变量,把待处理的参数赋值予它。

2.以“对参数的赋值”为界,将其后所有对此参数的引用点,全部替换为“对此临时变量的引用”

3.修改赋值语句,使其为对新建之临时变量赋值。

4. 编译,测试。

范例

我们从下面这段简单的代码开始

double discount( int inputVal, int quantity, int yearToDate )
    {
        if( inputVal > 50 )
        {
            inputVal -= 2;
        }
        if( quantity > 100 )
        {
            inputVal -= 1;
        }
        if( yearToDate > 10000 )
        {
            inputVal -= 4;
        }
        return inputVal;
    }
以临时变量取代对参数的赋值动作,得到下列代码:
double discount(int inputVal, int quantity, int yearToDate )
    {
        int result = inputVal;
        if( inputVal > 50 )
        {
            result -= 2;
        }
        if( quantity > 100 )
        {
            result -= 1;
        }
        if( yearToDate > 10000 )
        {
            result -= 4;
        }
        return result;
    }


转载于:https://my.oschina.net/u/134516/blog/125556

### 回答1: pgsql中multipleassignmentstosamecolumn指的是在同一个SQL语句中,将多个值分配给同一个列。在PostgreSQL中,这种操作是允许的,但可能会导致数据的不一致性和错误。因此,建议在编写SQL语句时避免使用这种操作,以保证数据的完整性和正确性。 ### 回答2: 在pgSQL中,"multiple assignments to same column"是一种错误,表示在同一个语句中多次给同一列赋值。通常情况下,每个列在一条语句中只能有一个赋值。 这个错误通常出现在UPDATE语句中。例如,如下的语句就会导致这个错误: ```sql UPDATE table_name SET column_name = value1, column_name = value2 WHERE condition; ``` 在这个语句中,尝试给同一个列column_name赋予两个不同的值value1和value2。这违反了语法规则,因为每个列只能有一个赋值。 为了解决这个错误,需要根据具体的需求和逻辑来修改语句。如果要对同一个列进行多次赋值,可以考虑使用子查询或者多个单独的UPDATE语句来实现。 例如,使用子查询可以通过将多次赋值的值作为一个列表进行更新,如下所示: ```sql UPDATE table_name SET column_name = (SELECT array_agg(value) FROM (VALUES (value1), (value2), ...) AS t(value)) WHERE condition; ``` 这样就可以将多个值以列表的形式更新到同一个列中。 总之,在pgSQL中,无法在同一条语句中多次给同一个列赋值。需要根据具体的情况来修改语句,使其符合语法规则,并实现预期的逻辑操作。 ### 回答3: 在pgsql中,"multiple assignments to same column" 是指在一次查询中对同一列进行多次赋值操作。 这种情况可能发生在UPDATE语句中,当我们想要同时更新一列的多个值时。举个例子,假设我们有一个名为"students"的表,其中包含了学生的姓名(name)和年龄(age)两列。现在我们希望将名为"John"的学生的年龄同时更新为20和21。我们可能会写出类似于下面的UPDATE语句: UPDATE students SET age = 20, age = 21 WHERE name = 'John'; 然而,这样的语句会导致"multiple assignments to same column"的错误。这是因为在一次UPDATE语句中,对同一列进行多次赋值是不被允许的。 为了解决这个问题,我们可以使用逗号分隔的形式来分开不同的赋值操作,每个赋值操作只赋给一个值。例如: UPDATE students SET age = 20 WHERE name = 'John'; UPDATE students SET age = 21 WHERE name = 'John'; 这样做就能够分别将学生"John"的年龄更新为20和21,避免了"multiple assignments to same column"的错误。 总结起来,在pgsql中,如果出现了"multiple assignments to same column"的错误提示,我们应当检查语句中是否对同一列进行了多次赋值操作,并将其拆分为多个独立的赋值语句来执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值