# Compound assignment statement

This statement performs arithmetic operations and assignments at the same time.

Table of contents:

## Format

The format are:

lvalue *= expression ;

lvalue /= expression ;

lvalue %= expression ;

lvalue += expression ;

lvalue -= expression ;

Each is equivalent to the following assignment statement.

lvalue = left * right ;

lvalue = left / right ;

lvalue = left % right ;

lvalue = left + right ;

lvalue = left - right ;

The lvalue is things that can be placed on the left side of the assignment symbol. In Rice, they are variables, fields, expressions that end with a setter, and expressions that end with an indexer operator.

Arithmetic operation is performed on the instances returned by the expressions on the left and right sides of the assignment symbol, and the lvalue is changed by the result.

If the lvalue ends with a variable or field, changes the address referenced by the lvalue.

If the lvalue ends with a setter, it is converted to a setter call.

If the lvalue ends with an indexer operator, changes an item of corresponding list class.

## Lvalue

The lvalue is things that can be placed on the left side of the assignment symbol. In Rice, they are variables, fields, expressions that end with a setter, and expressions that end with an indexer operator.

The lvalue of the compound assignment statement is evaluated as an expression for arithmetic operations before the assignment and returns an instance. The returned instance must be an int, long, or real class.

## Assignment symbols

Assignment symbols are:

*=

/=

%=

+=

-=

Each corresponds to an arithmetic operator. Arithmetic rules are the same as the corresponding operator.

The assignment rules are the same as the assignment statement.

## Expression

The expression returns an instance for arithmetic operations. The returned instance must be an int, long, or real class.

## Semicolon

The end of a compound assignment statement is represented by a semicolon.

## Example

1: | class example |

2: | int var1; |

3: | open method void someMethod() |

4: | var1 = 10; |

5: | var1 += 10; // var1 is 20. |

6: | em |

7: | ec |