المكتبات والعقود المجرّدة
استكشف كيفية استخدام المكتبات للدوال البحتة القابلة لإعادة الاستخدام، والعقود المجرّدة لتعريف الوظائف الأساسية.
المكتبات والعقود المجرّدة درس مجاني في Blockchain Smart Contracts with Solidity على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Blockchain Smart Contracts with Solidity، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Blockchain Smart Contracts with Solidity 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
Module: Code Reusability
Welcome to Libraries and Abstract Contracts! In this lesson, we'll explore two powerful Solidity features that enhance code reusability, modularity, and maintainability.
You'll learn how to build reusable utility functions with libraries and define common interfaces and base functionalities using abstract contracts.
What are Solidity Libraries?
Solidity Libraries are like special contracts that contain reusable code. They are designed for utility functions and cannot have state variables (with rare advanced exceptions) or hold Ether.
- They are deployed once and their code can be used by many contracts.
- This promotes code reuse and can be gas-efficient for complex operations.
- Functions within a library are typically
internalorpublic.
Defining a Utility Library
To create a library, you use the library keyword. Let's define a simple MathUtils library that provides basic arithmetic functions. Notice that library functions are often pure or view as they don't modify state.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
library MathUtils {
function add(uint a, uint b) internal pure returns (uint) {
return a + b;
}
function subtract(uint a, uint b) internal pure returns (uint) {
require(b <= a, "Subtraction overflow");
return a - b;
}
}Integrating a Library
To use our MathUtils library, we link it to a data type within our contract using the using A for B; syntax. This makes the library's functions available on that data type.
Try deploying the SimpleCalculator and calling its functions!
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
library MathUtils {
function add(uint a, uint b) internal pure returns (uint) {
return a + b;
}
function subtract(uint a, uint b) internal pure returns (uint) {
require(b <= a, "Subtraction overflow");
return a - b;
}
}
contract SimpleCalculator {
using MathUtils for uint; // Attaches MathUtils functions to uint
function performAddition(uint x, uint y) public pure returns (uint) {
return x.add(y); // Using the library's add function
}
function performSubtraction(uint x, uint y) public pure returns (uint) {
return x.subtract(y); // Using the library's subtract function
}
}What are Abstract Contracts?
An abstract contract is a contract that cannot be deployed on its own. It's like a blueprint or a partial implementation for other contracts.
- They define functions without implementing them (abstract functions).
- They can also have implemented functions and state variables.
- They serve as a base for other "concrete" contracts to inherit from, ensuring a common structure.
Blueprint with Abstract Contract
An abstract contract is declared using the abstract contract keyword. It must have at least one function declared without an implementation (meaning, without curly braces {}).
These unimplemented functions must be marked virtual in the abstract contract and override in the inheriting concrete contract.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
abstract contract BaseShape {
string public name;
constructor(string memory _name) {
name = _name;
}
// An abstract function - no implementation here
function getArea() public view virtual returns (uint);
// Can also have implemented functions
function getName() public view returns (string memory) {
return name;
}
}Implementing an Abstract Contract
To use an abstract contract, another contract must inherit from it using the is keyword and provide implementations for all its abstract functions.
This ensures that any contract inheriting from BaseShape will have a getArea function, guaranteeing a common interface for all shapes.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
abstract contract BaseShape {
string public name;
constructor(string memory _name) {
name = _name;
}
function getArea() public view virtual returns (uint);
function getName() public view returns (string memory) {
return name;
}
}
contract Circle is BaseShape {
uint public radius;
// For simplicity, we'll use radius^2 as area, ignoring Pi.
constructor(uint _radius) BaseShape("Circle") {
radius = _radius;
}
// Must implement the abstract function from BaseShape
function getArea() public view override returns (uint) {
return radius * radius;
}
}
contract Square is BaseShape {
uint public side;
constructor(uint _side) BaseShape("Square") {
side = _side;
}
function getArea() public view override returns (uint) {
return side * side;
}
}Libraries: Key Benefits
Libraries are a great choice when you need:
- Pure Functions: Operations that don't change state, like complex math, string utilities, or data conversions.
- Gas Efficiency: For external libraries, the bytecode is deployed once and its functions are called via a low-cost
DELEGATECALL. - Modularity: Keeps your main contracts cleaner by offloading utility logic.
- Reusability: Avoids duplicating common code across multiple contracts.
Abstract Contracts: Key Benefits
Abstract contracts are essential for:
- Interface Enforcement: Guaranteeing that inheriting contracts implement a specific set of functions.
- Base Functionality: Providing common state variables and implemented functions that all derived contracts will share.
- Design Patterns: Implementing patterns like 'template method' where a high-level algorithm is defined, but specific steps are left to concrete implementations.
- Polymorphism: Allowing different concrete implementations to be treated as the same base type.
Check Your Understanding
Which of the following statements about Solidity Libraries and Abstract Contracts are TRUE?
Recap: Libraries & Abstract Contracts
In this lesson, we explored two powerful tools for structuring Solidity code: Libraries and Abstract Contracts.
- Libraries provide reusable, stateless utility functions, promoting modularity and gas efficiency. They are linked to contracts to extend their functionality.
- Abstract Contracts act as blueprints, defining common interfaces and base functionalities that concrete contracts must inherit and implement. They enforce structure and promote consistency.
Mastering these patterns helps you write cleaner, more maintainable, and robust smart contracts in Solidity.
تعلم Blockchain Smart Contracts with Solidity مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 12
- الدروس
- 48
الأسئلة الشائعة
هل درس «المكتبات والعقود المجرّدة» مجاني؟
نعم — نص درس «المكتبات والعقود المجرّدة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Blockchain Smart Contracts with Solidity، انتقل إلى CoddyKit PRO. تتضمن دورة Blockchain Smart Contracts with Solidity 4 دروس في المجموع.
ماذا ستتعلم في «المكتبات والعقود المجرّدة»؟
استكشف كيفية استخدام المكتبات للدوال البحتة القابلة لإعادة الاستخدام، والعقود المجرّدة لتعريف الوظائف الأساسية. تتمرن على Blockchain Smart Contracts with Solidity مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Blockchain Smart Contracts with Solidity؟
لا تُشترط خبرة سابقة. Blockchain Smart Contracts with Solidity على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «المكتبات والعقود المجرّدة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Blockchain Smart Contracts with Solidity هذا؟
نعم. كل درس في Blockchain Smart Contracts with Solidity يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الوراثة والواجهات
- المكتبات والعقود المجرّدة
- معالجة الأخطاء باستخدام Revert/Require
- المعدِّلات ونمط Checks-Effects-Interactions