カテゴリー
サインイン 新規登録

間違いや改善の指摘

内容の技術的な誤り・誤字脱字やミスのご報告・解説やトピックの追記/改善のご要望は教材をさらに良くしていく上でとても貴重なご意見になります。

少しでも気になった点があれば、ご遠慮なく投稿いただけると幸いです🙏

実際には誤りではなく勘違いであっても、ご報告いただけることで教材のブラッシュアップにつながります。

質問ポリシー①

教材受講者みなさんのスムーズな問題解決のために、心がけていただきたいことがあります。

教材の内容に関する質問を投稿しましょう

教材の内容に関係のない質問や教材とは異なる環境・バージョンで進めている場合のエラーなど、教材に関係しない質問は推奨していないため回答できない場合がございます。

その場合、teratailなどの外部サイトを利用して質問することをおすすめします。教材の誤字脱字や追記・改善の要望は「文章の間違いや改善点の指摘」からお願いします。

0-3

電卓を作ってみよう

1.3 電卓を作ってみよう

ここでは四則演算するスマートコントラクトを作ります。繰返しforと条件分岐ifも使ってみましょう。

javascript
12345678910111213141516171819202122232425262728293031323334353637383940414243444546
Copied!
// コンパイラのバージョンを指定します pragma solidity ^0.4.25; // ①スマートコントラクトを宣言する contract calculator { // ②変数の宣言 int public wa; // 和を保存する int public sa; // 差を保存する int public seki; // 積を保存する int private shou; // 商を保存する // ③2数の足し算を行う関数 function tasu(int x, int y) public { wa = x + y; } // ④2数の引き算を行う関数とif文 function hiku(int x, int y) public { // 大きい数から小さい数を引きます if (x > y) { sa = x - y; } else { sa = y - x; } } // ⑤2数の掛け算を行う関数とfor文 function kakeru(int x, int y) public { seki = 0; for (int i = 0; i < y; i++) { seki = seki + x; } // (注)for文を示すためにこのような書き方をしています。2数の積は以下で求めることができます。 // seki = x * y; } // ⑥2数の割り算を行う関数とshou(商)のゲッター function waru(int x, int y) public returns(int) { shou = x / y; } function get_shou() view public returns(int) { return shou; } }

① スマートコントラクトを宣言する

javascript
123
Copied!
contract calculator { // ここにスマートコントラクトの内容を書きます }

calculatorという名前のスマートコントラクトを宣言します。

② 変数の宣言

javascript
1234
Copied!
int public wa; // 和を保存する int public sa; // 差を保存する int public seki; // 積を保存する int private shou; // 商を保存する

int型の変数を宣言します。public変数は誰でも中身を取得可能な状態でブロックチェーンに記録されます。private変数はコントラクトの外部から直接参照できません。値の取得には後ほどご説明するゲッターが必要になります。 なお,スマートコントラクトでは変数のことをステートと呼びます。ステートのアクセス修飾子は以下の4つがあります。

Copied!
・public  コントラクトの内部,外部から参照可能 ・private  コントラクトの内部からのみ参照可能 ・external  コントラクトの外部からのみ参照可能 ・internal  コントラクトとその子コントラクトからのみ参照可能

③ 2数の足し算を行う関数

javascript
123
Copied!
function tasu(int x, int y) public { wa = x + y; }

xyを足してwa(和)に代入する関数を定義しています。publicという修飾子を設定した関数は,スマートコントラクトの外部から呼出し可能な状態になります。

④ 2数の引き算を行う関数とif文

javascript
12345678
Copied!
function hiku(int x, int y) public { // 大きい数から小さい数を引きます if (x > y) { sa = x - y; } else { sa = y - x; } }

xyの大小を比較して,大きい数から小さい数を引く関数を定義しています。Solidityでは他の言語と同様にif文が記述できます。

⑤2数の掛け算を行う関数とfor文

javascript
123456
Copied!
function kakeru(int x, int y) public { seki = 0; for (int i = 0; i < y; i++) { seki = seki + x; } }

xyの積を求める関数です。今回はfor文を示すためにこのような書き方をしていますが,2数の積は以下で求めることができます。

javascript
1
Copied!
seki = x * y;

⑥ 2数の割り算を行う関数と変数shou(商)のゲッター

javascript
1234567
Copied!
function waru(int x, int y) public returns(int) { shou = x / y; } function get_shou() view public returns(int) { return shou; }

xyで割った商は変数shouに代入されますが,shouprivate変数なので外部からアクセスできません。そこでget_shouというゲッターを介してその値を取得します。viewを付与するとコール専用関数(変数の変更を伴わない関数)となります。また,returnsで戻り値の型を宣言しています。

1.1と同じやり方で電卓スマートコントラクトをデプロイし,動作を確認してみて下さい。

1-5.png