Learn Solidity: General Value or Data Types in Solidity

In this post, we will understand the general value types or data types in Solidity programming 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%200.4.8%3B%20%0A%0A%2F*%0A*%20%40title%20A%20Simple%20Value%20Type%20Example%0A*%20%40author%20Toshendra%20Sharma%0A*%20%40notice%20Example%20for%20the%20Solidity%20Course%0A*%20%40dev%20This%20line%20is%20for%20developers%20only%0A*%20%0A*%2F%0A%2F*%0AHello%20guys%2C%20lets%20tak%20about%20the%20value%20types%20also%20known%20as%20data%20types%20in%20Solidity.%0A%0AThey%20are%20called%20value%20types%20because%20variables%20of%20these%20types%20will%20always%20be%20passed%20by%20value%2C%20%0Afor%20example%2C%20they%20are%20always%20copied%20when%20they%20are%20used%20as%20function%20arguments%20or%20in%20assignments.%0A%0ASo%20let’s%20start%20with%20out%20basic%20contract%20and%20understand%20the%20value%20types%20one%20by%20one.%0A%0AAs%20I%20have%20already%20explained.%20Pragma%20will%20be%20the%20first%20line.%20and%20then%20we%20will%20start%20the%20contract.%0A%0A%0A%0A*%2F%0Acontract%20generalValueTypesContract%20%7B%0A%0A%20%20%20%20%2F%2F%20first%20and%20the%20most%20common%20value%20type%20is%20uint.%20%0A%20%20%20%20%2F%2F%20uint%20is%20mostly%20used%20for%20currency%20value%20or%20amount%20as%20there%20is%20not%20float%20or%20double%20in%20that%20case%0A%20%20%20%20%2F%2F%20it%20can%20also%20be%20used%20for%20storing%20Unix%20timestamp%20as%20it%20store%20a%20very%20large%20number%0A%20%20%20%20%2F%2F%20uint%20stores%20the%20data%20in%20256%20bits%20or%2032%20byte.%20Due%20to%20being%20unsiged%20it%20can%20store%20a%20very%20large%20number.%0A%20%20%20%20%2F%2F%20this%20is%20how%20we%20declare%20uint%0A%20%20%20%20uint%20x%3B%0A%0A%20%20%20%20%2F%2F%20you%20can%20also%20initialize%20the%20uint%20during%20the%20declaration%20like%20this%0A%20%20%20%20uint%20x%20%3D%2045%3B%0A%0A%20%20%20%20%2F%2F%20int%20is%20a%20signed%20integer%20whose%20size%20is%20same%20like%20uint%20which%20is%20256%20bits%2C%0A%20%20%20%20int%20a%20%3D%2078%3B%20%0A%0A%20%20%20%20%2F%2Fif%20you%20make%20it%20constant%20by%20using%20the%20constant%20keyword%20like%20this%20%0A%20%20%20%20int%20constant%20variable1%20%3D%208%3B%0A%20%20%20%20%2F%2F%20then%20it%20cannot%20be%20changed%20after%20instantiation%20as%20it%20will%20be%20considered%20as%20constant%20by%20the%20compiler%0A%0A%20%20%20%20%2F%2F%20let’s%20specify%20the%20256%20explicitly%20then%20this%20will%20have%20same%20effect%20as%20line%20above.%20This%20is%20how%20we%20write%20it.%0A%20%20%20%20int256%20constant%20variable2%20%3D%208%3B%20%0A%0A%20%20%20%20%2F%2F%20you%20can%20also%20declare%20and%20then%20initialize%20the%20variable%20in%20hec%20like%20this.%20%0A%20%20%20%20%2F%2F%20Please%20note%20that%20constant%20will%20enable%20the%20compiler%20to%20relace%20all%20ouccurence%20of%20the%20variable%20in%20the%20code.%0A%20%20%20%20uint%20constant%20VERSION_ID%20%3D%200x123A1%3B%20%0A%0A%0A%20%20%20%20%2F%2F%20For%20int%20and%20uint%2C%20size%20can%20be%20explicitly%20set%20in%20steps%20of%208%20up%20to%20256%20for%20example%20int8%2C%20int16%2C%20int24%0A%20%20%20%20uint8%20b%3B%0A%20%20%20%20int64%20c%3B%0A%20%20%20%20uint248%20e%3B%0A%0A%20%20%20%20%2F%2F%20Let’s%20also%20check%20the%20typecasting%0A%20%20%20%20int%20x%20%3D%20int(b)%3B%0A%0A%20%20%20%20%2F%2F%20as%20you%20can%20see%20the%20variable%20b%20will%20be%20typecasted%20into%20int%20type%20and%20then%20stored%20in%20x%0A%0A%0A%20%20%20%20%2F%2F%20boolean%20variable%20can%20be%20declared%20by%20bool%20keyword%20like%20this%0A%20%20%20%20bool%20b%20%3D%20true%3B%20%0A%0A%20%20%20%20%2F%2F%20or%20this%20can%20also%20be%20declared%20by%20’var%20b%20%3D%20true%3B’%20for%20inferred%20typing%0A%20%20%20%20%2F%2F%20when%20you%20declare%20a%20variable%20using%20the%20var%20keyword%20then%20the%20variable’s%20type%20will%20be%20%0A%20%20%20%20%2F%2F%20defined%20by%20the%20first%20value%20which%20will%20be%20stored%20in%20it.%0A%20%20%20%20%20var%20a%20%3D%20true%3B%0A%0A%20%20%20%20%2F%2F%20let’s%20see%20how%20the%20address%20can%20be%20declared.%20%0A%20%20%20%20%2F%2F%20address%20is%20the%20soecial%20value%20type%20which%20holds%2020%20byte%2F160%20bit%20Ethereum%20addresses%20like%20this%0A%20%20%20%20address%20public%20owner%3B%0A%0A%20%20%20%20%2F%2F%20Bytes%20are%20also%20available%20from%201-32%20in%20size%20like%20this%0A%20%20%20%20%0A%20%20%20%20byte%20a%3B%20%2F%2F%20byte%20is%20same%20as%20bytes1%0A%20%20%20%20bytes2%20b%3B%0A%20%20%20%20bytes32%20c%3B%0A%0A%20%20%20%20%2F%2F%20dynamically%20sized%20bytes%20can%20also%20be%20declared%20like%20this%0A%20%20%20%20%0A%20%20%20%20bytes%20m%3B%20%0A%20%20%20%20%2F%2F%20it%20is%20actually%20a%20special%20array%2C%20same%20as%20byte%5B%5D%20array%20(but%20packed%20tightly)%0A%0A%20%20%20%20%2F%2F%20string%20is%20same%20as%20bytes%2C%20but%20string%20does%20not%20allow%20length%20or%20index%20access%20as%20of%20today.%0A%20%20%20%20%2F%2F%20this%20is%20how%20string%20is%20defined%0A%20%20%20%20string%20n%20%3D%20%22hello%22%3B%20%0A%20%20%20%20%2F%2F%20here%20string%20is%20stored%20in%20UTF8%2C%20note%20double%20quotes%2C%20not%20single%0A%0A%20%20%20%20%2F%2F%20lets%20check%20out%20the%20Arrays%0A%20%20%20%20%2F%2F%20this%20is%20a%20static%20array%20whose%20length%20is%205%20fixed%0A%20%20%20%20bytes32%5B5%5D%20nicknames%3B%20%0A%0A%20%20%20%20%2F%2F%20dynamic%20array%20whose%20length%20can%20be%20changed%20at%20any%20time%20can%20be%20specified%20like%20this%0A%20%20%20%20bytes32%5B%5D%20names%3B%20%0A%0A%20%20%20%20%2F%2F%20in%20an%20array%20you%20can%20add%20a%20new%20element%20using%20push%20function%20which%20returns%20new%20length%20of%20the%20array%20like%20this%0A%20%20%20%20uint%20newLength%20%3D%20names.push(%22John%22)%3B%20%0A%0A%20%20%20%20%2F%2F%20Dictionaries%20can%20also%20be%20defined%20in%20solidity%20which%20may%20any%20type%20to%20any%20other%20type%20like%20this%0A%20%20%20%20%2F%2F%20mapping(_KeyType%20%3D%3E%20_ValueType)%0A%20%20%20%20mapping%20(string%20%3D%3E%20uint)%20public%20balances%3B%0A%0A%20%20%20%20%2F%2Fplease%20note%20that%20value%20inside%20the%20mapping%20can%20also%20be%20the%20mapping%0A%0A%20%20%20%20%2F%2F%20Lets%20see%20Enums%20which%20are%20often%20used%20for%20state%20machine%20like%20this%0A%20%20%20%20enum%20State%20%7B%20Created%2C%20Locked%2C%20Inactive%20%7D%3B%20%0A%0A%20%20%20%20%2F%2F%20post%20this%20a%20variable%20can%20be%20Declared%20like%20this%0A%20%20%20%20State%20public%20state%3B%20%0A%0A%20%20%20%20%2F%2F%20Initializing%20the%20state%20can%20be%20done%20like%20this%0A%20%20%20%20state%20%3D%20State.Created%3B%0A%0A%20%20%20%20%2F%2F%20It%20is%20important%20to%20note%20that%20enums%20can%20be%20explicitly%20converted%20to%20ints%20like%20this%0A%20%20%20%20uint%20createdState%20%3D%20uint(State.Locked)%3B%20%0A%0A%0A%20%20%20%20%2F%2F%20Define%20consutruct%20here%0A%20%20%20%20function%20generalValueTypesContract(uint%20initialCoins)%20%7B%0A%20%20%20%20%20%20%20%2F%2F%20Initialize%20state%20variables%20here%0A%20%20%20%20%7D%0A%0A%7D” message=”” highlight=”” provider=”manual”/]

AD-Blockchain-Council-01
Previous: Layout of Solidity Source FileNext: Ether & Time Units in Solidity