ชนิดข้อมูลอ้างอิง
อาร์เรย์ สตรักต์ แมปปิง
ชนิดข้อมูลอ้างอิง เป็นบทเรียน Web3 & DApp Development Fundamentals ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Web3 & DApp Development Fundamentals และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Web3 & DApp Development Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
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.
คำถามที่พบบ่อย
บทเรียน “ชนิดข้อมูลอ้างอิง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ชนิดข้อมูลอ้างอิง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Web3 & DApp Development Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Web3 & DApp Development Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ชนิดข้อมูลอ้างอิง”
อาร์เรย์ สตรักต์ แมปปิง คุณปฏิบัติ Web3 & DApp Development Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Web3 & DApp Development Fundamentals หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Web3 & DApp Development Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ชนิดข้อมูลอ้างอิง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Web3 & DApp Development Fundamentals นี้ได้ไหม
ได้ บทเรียน Web3 & DApp Development Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ