Types référence
arrays, structs, mappings
Types référence est une leçon Web3 & DApp Development Fundamentals gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Web3 & DApp Development Fundamentals, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Web3 & DApp Development Fundamentals comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
What Are Reference Types?
Reference types describe data that is too large to fit in one slot, so variables refer to a location rather than holding the data directly.
The three reference types are arrays, structs, and mappings. When you use them you must think about their data location: storage, memory, or calldata.
Fixed-Size Arrays
A fixed-size array has a length set at compile time and cannot grow. The type uint[3] always holds exactly three values.
Use .length to read the size. Out-of-bounds access reverts.
<code>uint[3] public scores = [10, 20, 30];
function first() public view returns (uint) {
return scores[0];
}</code>Dynamic Arrays
A dynamic array can grow and shrink. Declare it as uint[]. In storage you can push to append and pop to remove the last element.
<code>uint[] public nums;
function add(uint n) public {
nums.push(n);
}
function removeLast() public {
nums.pop();
}</code>Bytes and String
bytes is a dynamically-sized byte array and string is its UTF-8 text cousin. Both are reference types.
Note: string has no .length or indexing; convert to bytes first to inspect raw bytes.
<code>string public name = 'Alice';
function nameLength() public view returns (uint) {
return bytes(name).length;
}</code>Defining Structs
A struct groups related variables into one custom type. It is ideal for modeling entities like users, orders, or tokens.
<code>struct User {
string name;
uint256 balance;
bool active;
}</code>Using Structs
You can create a struct with positional or named arguments and store it. Reading a struct from storage gives you a reference you can modify.
<code>User public owner;
function setup(string memory n) public {
owner = User({ name: n, balance: 0, active: true });
}</code>Mappings
A mapping is a key-value store, like a hash table. It is one of the most used structures in smart contracts, for example tracking balances per address.
Keys are not stored, so you cannot iterate a mapping or get its length.
<code>mapping(address => uint256) public balances;
function deposit() public payable {
balances[msg.sender] += msg.value;
}</code>Nested Mappings
Mappings can be nested to model relationships, such as allowances where one owner permits multiple spenders.
This pattern is the heart of the ERC-20 allowance system.
<code>mapping(address => mapping(address => uint256)) public allowance;
function approve(address spender, uint256 amount) public {
allowance[msg.sender][spender] = amount;
}</code>Combining Structs and Mappings
A powerful pattern is mapping keys to structs. This lets you store rich records keyed by an id or address.
<code>struct Order {
uint256 amount;
bool paid;
}
mapping(uint256 => Order) public orders;
function createOrder(uint256 id, uint256 amt) public {
orders[id] = Order({ amount: amt, paid: false });
}</code>Arrays of Structs
You can keep a dynamic array of structs when you need ordered, iterable records. Combine it with a mapping for fast lookup.
<code>struct Item { string name; uint256 price; }
Item[] public items;
function addItem(string memory n, uint256 p) public {
items.push(Item(n, p));
}</code>Reference Semantics
When you assign a storage reference type to a local storage variable, both point to the same data. Changes through one are visible through the other.
A memory copy, in contrast, is independent.
<code>uint[] public data;
function tweak() public {
uint[] storage ref = data; // alias
ref.push(42); // also changes data
}</code>Quick Check
Test your understanding of reference types.
Recap
You explored Solidity reference types:
- Arrays (fixed and dynamic), plus
bytesandstring - Structs to group related fields
- Mappings and nested mappings for key-value storage
- Powerful combinations like mapping-to-struct and arrays-of-structs
Reference types share locations, so always be deliberate about storage versus memory.
Questions Fréquemment Posées
La leçon « Types référence » est-elle gratuite ?
Oui — le texte complet de « Types référence » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Web3 & DApp Development Fundamentals, passe à CoddyKit PRO. Le cours Web3 & DApp Development Fundamentals comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Types référence » ?
arrays, structs, mappings Tu pratiques Web3 & DApp Development Fundamentals avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Web3 & DApp Development Fundamentals ?
Aucune expérience préalable n'est requise. Web3 & DApp Development Fundamentals sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Types référence » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Web3 & DApp Development Fundamentals ?
Oui. Chaque leçon Web3 & DApp Development Fundamentals inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.