状態の読み取りと書き込み
CoddyのSolidityジャーニー「基礎」セクションの一部。レッスン 27/53。
view 関数はコントラクトの状態を読み取れますが、変更することはできません。状態を書き込む関数には、view または pure を付けることはできません。値を読み取る getter と、値を変更する setter を分けて、それぞれの関数の目的を明確にします。
これをコントラクトのスコープで宣言します。
uint256 stored;
function setValue(uint256 n) internal {
stored = n;
}
function readValue() internal view returns (uint256) {
return stored;
}提供されている main 関数内で使用します。
setValue(18);
console.log(readValue());setValue は共有された保存変数に書き込みます。readValue は、その変数を変更せずに返すため view です。main も setValue を呼び出すことで間接的に書き込むため、そのヘッダーには view や pure 修飾子がありません。
コントラクトの状態に書き込む関数には、view を付けることはできません。
チャレンジ
簡単状態 level、セッター setLevel、およびビューゲッター getLevel を宣言してください。main は、渡された nextLevel に level を設定し、その後ゲッターの結果を出力する必要があります。
テストは次の順序で引数を main に渡します: uint256 nextLevel。各テストは新しいコントラクト状態から開始されます。
要求された出力には console.log を使用してください。要求された値のみを、1 行に 1 つずつ出力し、タスクで指定されていない限り余分なラベルは付けないでください。
自分で試してみよう
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import "forge-std/console.sol";
contract Main {
function main(uint256 nextLevel) external {
// ここに解答を書いてください。
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Solidityプレイグラウンド