表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
33/37

第三十一話 関数の分割



 翌日。ついに最後の日となった。

 俺は部室のドアを開ける。

 すると中には、すでに皆が集まっていた。

「イツキくん、ご苦労ー」

 先輩の声もする。

「あはは、とうとうここまで来たのねぇ」

 岸井先輩も珍しく部室にいた。

「ユカも見たいんだって」

「後輩の奮闘を見過ごすわけにはいかないものねー」

「あんたは、単に面白そうだから、でしょー」

 二人はさっそくやりあっている。いつもの事だ。

「イツキくん、今日も頑張りましょうね」

「お兄ちゃん、見ているから……」

 西原さんとサヤちゃんとも挨拶する。


 俺は自分のPCの前に座ると、ブートさせる。

 そしてWindows画面が出たら、sampleフォルダへ移動して、kazuate.cを開いた。


「じゃ、これからどう改造していこう」

「もうほとんど作り終わったわね。それじゃ、今日は関数の分割について考えみようよ」

「関数の分割?」

「メイン関数に、いろいろ詰め込みすぎでしょ? こうなってくると、読みにくくなるじゃない。だから、なるべくサブの関数に分割して、メインは呼び出すだけにしておくのよ」

「うーむ。言われてみれば。じゃあ、ゲーム部分を、別の関数にしてみます」

 俺はvoid game(void)という関数を作って(勿論、プロトタイプ宣言も忘れない)、while(1)の中のブロックをすべて移動させた。

「これで、いいのかな?」

「そんな訳ないでしょー。変数はどうするのよ? メイン変数のscoreとseikaiは、game関数では読み込めないわよ」

「あ、そうか」

 甘かったな、こりゃ。

「な、なら、こうすれば……」

 俺はgame関数の引数、戻り値を int game (int score, int seikai)と入れた。

 そして、正解したif文のbreakの代わりに、return scoreと入れておく。

「これで、スコアとseikaiが中でもわかるし、正解した時にはscoreが呼び出したメイン関数にもわかります」

「うん。ま、これで問題ないけど、scoreはグローバル変数にするって方法もあるのよ」

「グローバル変数?」

「どこからでも参照できる変数のことよ。やり方は簡単。関数の外で変数を宣言するだけよ」

 先輩は、コードを書き換えて、score変数を外に置いた。


int score = 10;


int main(void)

{

 (略)

}


「これで、どこからでも読み込めるんですか?」

「そ。main関数からも、game関数からもね。だから、game関数は、void game(int seikai)だけで、いいわよ」

「こんな簡単な方法があるんだったら、すべてグローバル変数にすれば……」

「あまーい!」岸井先輩がツッコミを入れてくる。

「えっ!?」

「そうしたら、簡単にどこからでも値を変えられるでしょ。もしそれが間違っててバグだったらどうする? プログラムが大きくなれば、どこの関数がグローバル変数を変えたのか、すぐにわからなくなるじゃない。全部の関数を調べる羽目になるわ。でも変数のスコープが小さければ小さいほど、発見は簡単になるのよ」

「ユカの言うとおりね。グローバル変数はなるべく使わない。これは現代のプログラミングの常識よ。関数内のローカル変数をなるべく使うようにするわけ」

「そうなのか」

「ま、今回はグローバル変数を教えたかったから使うけど。あと、入力に使うbuf配列とkazu変数は、メインから削除してgame関数へ移行ね」

「あ、そうでした」

 俺は変数を移動させる。


「これでもう完成、かな?」

「そうだねー。これ以上、弄くりようがなくなってきたから、これで完成でいいわ」

 先輩のお墨付きが付いて、俺はガッツポーズを取る。

「よっしゃー!」


「ところで、変数にはローカルとグローバルの他に、もう一つ、ヒープってのもあるの。イツキくんにも、そろそろ教えるわ」

「ヒープ?」

「ふふふっ。またメモリーの話よ」

 先輩は話を続けた。

評価をするにはログインしてください。
この作品をシェア
Twitter LINEで送る
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ