mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Add section about default values of variables
This commit is contained in:
parent
b23c300792
commit
0db67b8895
@ -151,9 +151,17 @@ Assigning *to* a state variable always creates an independent copy. On the other
|
||||
Scoping and Declarations
|
||||
========================
|
||||
|
||||
.. index:: ! scoping, ! declarations
|
||||
.. index:: ! scoping, ! declarations, ! default-value
|
||||
|
||||
In Solidity, a variable declared anywhere within a function will be in scope for the *entire function*, regardless of where it is declared.
|
||||
In Solidity, a variable which is declared is automatically assigned its default value. It will be assigned on contract
|
||||
initialization if it is a contract-level variable or at the beginning of a function call if it is a local variable.
|
||||
This is because the EVM must run deterministically so it would be inappropriate to initialize any variables to random garbage values.
|
||||
The "default values" of variables are the typical "zero-state" of whatever the type is. For example, the default value for a ``bool``
|
||||
is ``false``. The default value for the ``uint`` or ``int`` types is ``0``. For statically-sized arrays and ``bytes``, each individual
|
||||
element will be initialized to the default value corresponding to its type. Finally, for dynamically-sized arrays, ``bytes``
|
||||
and ``strings``, the default value is a zero-length member of its respective type.
|
||||
|
||||
A variable declared anywhere within a function will be in scope for the *entire function*, regardless of where it is declared.
|
||||
This happens because Solidity inherits its scoping rules from JavaScript.
|
||||
This is in contrast to many languages where variables are only scoped where they are declared until the end of the semantic block.
|
||||
As a result, the following code is illegal and cause the compiler to throw an error, ``Identifier already declared``::
|
||||
|
Loading…
Reference in New Issue
Block a user