初心者のためのC#プログラミング本格入門116 - 機能の拡張を考えつつ学習しよう
皆様は何かの学習が続かなかった経験がありませんか?何かの学習を使用としたけど、それが続かないというのはよく聞く話です。かくいう私も、英語の学習がなかなか継続できなくて困っています。そういった誰にもある学習の壁が「継続」なのです。学習は意外と継続するのが難しいです。でも、心配貼りません。プログラミングの学習を継続するコツと方法を知っています。これから、学習を継続する方法とコツについて書きます。
今回までで、結構プログラムを作りました。簡単な計算機を作りましたし、テストもやったし、データを追加できますし、削除もできるデータ構造も作りました。きっと、多くの初心者の方は結構満足したと思います。でも、プログラミングの世界はまだまだ終わりではありません。もっと楽しいことがあります。それを知るにはやはり学習が必要です。しかし、当然初心者の方はプログラミングの世界をまだよく知らないので、学習する方法はわからないと思います。実は、そんな手探り状態でも学習ができる方法があります。それは、素直に問いかける事です。サンプルをもとに実際にやってみます。
基本的な機能を持つリスト(サンプルプログラム)を作りました。このオブジェクトは、データを管理するためのもので、データの追加・削除・参照ができます。ここで、素直になって考えてみましょう。今のところ、データの追加と削除は、最後の位置にしかできません。ですが、最後の位置にこだわる必要はありません。必ず最後の位置なのは不便です。好きな場所にデータを追加したり、削除したりできたら便利です。こんな具合に、リラックスして素直に思いついたことを実際にやってみましょう。
オブジェクトに「データを任意の場所に追加する」といった新しい機能を付け加える場合、インタフェースとなるメソッドの名前と引数を考えます。そして、今までやってきたように、自分が望むプログラムが作れたのかチェックするテストを考えます。
簡単テストプログラムを掲載しますので参考にしてください。
//関係のないプログラムは省略しています
class SimpleListTest : Test
{
private SimpleList target;
//全てのテストを返えします
protected override System.Action[ ] GetTests()
{
System.Action[ ] tests = new System.Action[ ] {
this.OneElementAdd,
this.OneElementRemove,
this.CurrentTest,
this.AddElementCheck,
this.EnumeratorWhenRemoveElement,
this.ForeEachTest,
this.ForeEachTest2,
this.InsertTest //←忘れないように注意
};
return tests;
}
private void InsertTest()
{
base.Execute( );
//初期値を用意する
int count = 10;
for ( int i = 0 ; i < count ; ++i ) {
this.target.Add( i );
}
//位置を指定して値を挿入したい
int index = 5;
int value = 100;
this.target.Insert(index, value );
//正しく挿入されたかチェック
if ( value != this.target[ index ] ) {
string message =
"指定された位置に値を挿入できませんでした。";
throw new TestFail( message );
}
}
}
以上のようにテストは最初簡単にして後で追加していきます。何故ならば、最初から難しいテストを考えると、これから作るプログラムではなく、テストのプログラムで悩んで、学習意欲がそがれてしまうからです。そんなことになってしまっては、もともこうもありません。くれぐれも最初は、一目でわかるぐらい簡単にしましょう。次回から「データを任意の場所に追加する機能」を作ります。お楽しみに。