Solidity - ตัวแปร

Solidity รองรับตัวแปรสามประเภท

  • State Variables - ตัวแปรที่มีการจัดเก็บค่าอย่างถาวรในที่เก็บสัญญา

  • Local Variables - ตัวแปรที่มีค่าอยู่จนถึงฟังก์ชันกำลังดำเนินการ

  • Global Variables - ตัวแปรพิเศษมีอยู่ในเนมสเปซทั่วโลกที่ใช้รับข้อมูลเกี่ยวกับบล็อกเชน

Solidity เป็นภาษาที่พิมพ์แบบคงที่ซึ่งหมายความว่าจำเป็นต้องระบุสถานะหรือประเภทตัวแปรโลคัลระหว่างการประกาศ ตัวแปรที่ประกาศแต่ละตัวจะมีค่าเริ่มต้นตามประเภทเสมอ ไม่มีแนวคิด "ไม่ได้กำหนด" หรือ "ว่าง"

ตัวแปรสถานะ

ตัวแปรที่มีค่าถูกเก็บไว้อย่างถาวรในที่เก็บสัญญา

pragma solidity ^0.5.0;
contract SolidityTest {
   uint storedData;      // State variable
   constructor() public {
      storedData = 10;   // Using State variable
   }
}

ตัวแปรท้องถิ่น

ตัวแปรที่มีค่าพร้อมใช้งานภายในฟังก์ชันที่กำหนดไว้เท่านั้น พารามิเตอร์ของฟังก์ชันจะอยู่ในพื้นที่ของฟังก์ชันนั้นเสมอ

pragma solidity ^0.5.0;
contract SolidityTest {
   uint storedData; // State variable
   constructor() public {
      storedData = 10;   
   }
   function getResult() public view returns(uint){
      uint a = 1; // local variable
      uint b = 2;
      uint result = a + b;
      return result; //access the local variable
   }
}

ตัวอย่าง

pragma solidity ^0.5.0;
contract SolidityTest {
   uint storedData; // State variable
   constructor() public {
      storedData = 10;   
   }
   function getResult() public view returns(uint){
      uint a = 1; // local variable
      uint b = 2;
      uint result = a + b;
      return storedData; //access the state variable
   }
}

เรียกใช้โปรแกรมข้างต้นโดยใช้ขั้นตอนที่ให้ไว้ในบทSolidity First Application

เอาต์พุต

0: uint256: 10

ตัวแปรส่วนกลาง

ตัวแปรเหล่านี้เป็นตัวแปรพิเศษที่มีอยู่ในพื้นที่ทำงานทั่วโลกและให้ข้อมูลเกี่ยวกับคุณสมบัติบล็อกเชนและธุรกรรม

ชื่อ ผลตอบแทน
blockhash (uint blockNumber) ส่งกลับ (bytes32) แฮชของบล็อกที่กำหนด - ใช้ได้เฉพาะกับ 256 บล็อกล่าสุดไม่รวมบล็อกปัจจุบัน
block.coinbase (ที่อยู่ที่ต้องชำระ) ที่อยู่ของคนงานเหมืองบล็อกปัจจุบัน
block.difficulty (uint) ความยากของบล็อกปัจจุบัน
block.gaslimit (uint) แก๊สลิมิตบล็อกปัจจุบัน
block.number (uint) หมายเลขบล็อกปัจจุบัน
block.timestamp (uint) การประทับเวลาบล็อกปัจจุบันเป็นวินาทีนับตั้งแต่ยุคยูนิกซ์
gasleft () ส่งคืน (uint256) ก๊าซที่เหลืออยู่
msg.data (ไบต์ calldata) กรอก calldata
msg.sender (ที่อยู่เจ้าหนี้) ผู้ส่งข้อความ (ผู้โทรปัจจุบัน)
msg.sig (ไบต์ 4) สี่ไบต์แรกของ calldata (ตัวระบุฟังก์ชัน)
msg.value (uint) จำนวน wei ที่ส่งมาพร้อมข้อความ
ตอนนี้ (uint) การประทับเวลาบล็อกปัจจุบัน
tx.gasprice (uint) ราคาก๊าซของธุรกรรม
tx.origin (ที่อยู่ที่ต้องชำระ) ผู้ส่งธุรกรรม

ชื่อตัวแปร Solidity

ในขณะที่ตั้งชื่อตัวแปรของคุณใน Solidity โปรดคำนึงถึงกฎต่อไปนี้

  • คุณไม่ควรใช้คีย์เวิร์ดที่สงวนไว้สำหรับ Solidity เป็นชื่อตัวแปร คำหลักเหล่านี้จะกล่าวถึงในส่วนถัดไป ตัวอย่างเช่นชื่อตัวแปรเบรกหรือบูลีนไม่ถูกต้อง

  • ชื่อตัวแปร Solidity ไม่ควรขึ้นต้นด้วยตัวเลข (0-9) ต้องขึ้นต้นด้วยตัวอักษรหรือขีดล่าง ตัวอย่างเช่น 123test เป็นชื่อตัวแปรที่ไม่ถูกต้อง แต่ _123test เป็นชื่อที่ถูกต้อง

  • ชื่อตัวแปร Solidity คำนึงถึงขนาดตัวพิมพ์ ตัวอย่างเช่นชื่อและชื่อเป็นตัวแปรสองตัวที่แตกต่างกัน