Learn Solidity: Scoping and Declarations in Solidity

In this post, we will understand the scoping & declaration of variables in Solidity Language.

Notice: This is one of the multi-post series of Learn Solidity - Build Decentralized Application in Ethereum. This is an attempt to teach you all about Solidity - A Programming Language for Ethereum Based Smart Contracts. If you want to take this as a video course please signup using below button.

[pastacode lang=”javascript” manual=”pragma%20solidity%20%5E0.4.0%3B%0A%0A%2F%2F%20A%20variable%20which%20is%20declared%20will%20have%20an%20initial%20default%20value%20whose%20byte-representation%20%0A%2F%2F%20is%20all%20zeros.%20The%20%E2%80%9Cdefault%20values%E2%80%9D%20of%20variables%20are%20the%20typical%20%E2%80%9Czero-state%E2%80%9D%20of%20whatever%20%0A%2F%2F%20the%20type%20is.%20For%20example%2C%20the%20default%20value%20for%20a%20bool%20is%20false.%20The%20default%20value%20for%20%0A%2F%2F%20the%20uint%20or%20int%20types%20is%200.%20For%20statically-sized%20arrays%20and%20bytes1%20to%20bytes32%2C%20each%20%0A%2F%2F%20individual%20element%20will%20be%20initialized%20to%20the%20default%20value%20corresponding%20to%20its%20type.%20%0A%2F%2F%20Finally%2C%20for%20dynamically-sized%20arrays%2C%20bytes%20and%20string%2C%20the%20default%20value%20is%20an%20%0A%2F%2F%20empty%20array%20or%20string.%0A%0A%2F%2F%20A%20variable%20declared%20anywhere%20within%20a%20function%20will%20be%20in%20scope%20for%20the%20entire%20function%2C%20%0A%2F%2F%20regardless%20of%20where%20it%20is%20declared.%20This%20happens%20because%20Solidity%20inherits%20its%20scoping%20%0A%2F%2F%20rules%20from%20JavaScript.%20This%20is%20in%20contrast%20to%20many%20languages%20where%20variables%20are%20only%20%0A%2F%2F%20scoped%20where%20they%20are%20declared%20until%20the%20end%20of%20the%20semantic%20block.%20As%20a%20result%2C%20%0A%2F%2F%20the%20following%20code%20is%20illegal%20and%20cause%20the%20compiler%20to%20throw%20an%20error%2C%20Identifier%20already%20declared%3A%0A%0Acontract%20ScopingErrors%20%7B%0A%20%20%20%20function%20scoping()%20%7B%0A%20%20%20%20%20%20%20%20uint%20i%20%3D%200%3B%0A%0A%20%20%20%20%20%20%20%20while%20(i%2B%2B%20%3C%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20uint%20same1%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20while%20(i%2B%2B%20%3C%202)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20uint%20same1%20%3D%200%3B%2F%2F%20Illegal%2C%20second%20declaration%20of%20same1%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20minimalScoping()%20%7B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20uint%20same2%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20uint%20same2%20%3D%200%3B%2F%2F%20Illegal%2C%20second%20declaration%20of%20same2%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20forLoopScoping()%20%7B%0A%20%20%20%20%20%20%20%20for%20(uint%20same3%20%3D%200%3B%20same3%20%3C%201%3B%20same3%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20for%20(uint%20same3%20%3D%200%3B%20same3%20%3C%201%3B%20same3%2B%2B)%20%7B%2F%2F%20Illegal%2C%20second%20declaration%20of%20same3%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20foo()%20returns%20(uint)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20baz%20is%20implicitly%20initialized%20as%200%0A%20%20%20%20%20%20%20%20uint%20bar%20%3D%205%3B%0A%20%20%20%20%20%20%20%20if%20(true)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20bar%20%2B%3D%20baz%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20uint%20baz%20%3D%2010%3B%2F%2F%20never%20executes%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20bar%3B%2F%2F%20returns%205%0A%20%20%20%20%7D%0A%7D” message=”” highlight=”” provider=”manual”/]

AD-Blockchain-Council-01
Previous: Control Structure in Solidity Next: Input and Output Parameters in Solidity