プログラミングというやつには色々苦労させられ、C++を始め多くの言語で躓いたトラウマも根強く私自身の中に刻み込まれている訳でちっとも先に進めない。私にはプログラミングは向いてないと思っていた。
しかし、プログラマーをしている知人は、私の性格や会話の内容からして「絶対にプログラマーに向いている」と言う訳だ。だけど「こういう所とかこういう所とか理解出来ない訳だよ」と話をすると、「それって難しく考えすぎてるからだよ。」と言われる訳だ。「そんなもの知らなくったってプログラミングできるし(w」みたいなやり取りになる。
とは言っても私には、私自身がプログラミングと納得行くレベルの作品が一個もない。例えばAndroid用にApp Inventorで作った計算ツールなんかもいくつか有るわけだが、それってブロックを組み合わせただけで、四則計算の式だけがカギ。それ以外は何もプログラミングじゃないしと思っていた。
しかし、どうやらApp Invantorのブロックの組み合わせこそがプログラミングを視覚的に表したもので、それはプログラミングでは無いという考えは間違っていると言うのだ。え?そういう事のか?じゃぁ勝手に自分でこれはプログラミングだと納得できてないだけの話か?
そういう訳で、恐らく最も自分を納得させられるであろうWindowsアプリを、より視覚的な手法でかつ手早く作れる方法として、Visual Studio C#を使ってみる事にした。BizSparkライセンスで開発用途なら使えるし、Microsoft社から無償版のExpress版もダウンロード出来る。
近々書籍を買い求めようと思っているが、その前に本当に自分が欲している方針に合う教え方を実感してみたくて、色々な入門記事を読んでみたら、多分これが今のところ一番求めていたものに近かった。デジタル時計を一つのウィンドウに表示するだけのシンプルなサンプルプログラムだが、私の探していたものがここにあった。
ようやく、Windowsアプリをチュートリアルと言えどもほぼ理解した上で作ることに成功した。大した成果では無いが私にとっては非常に嬉しい達成感を感じている。
このデジタル時計を表示するだけのサンプルプログラムは、フォーム、ラベル、タイマーオブジェクトの三要素だけで成立している。仕組みはフォーム(ウィンドウ)上にラベルを配置し、そのラベル文字をタイマーオブジェクトとリンクして1秒毎に書き換えるデジタル時計だ。そのリンクの部分のやりかたを早く知りたかった。
ソースコードとしては下記の様にシンプルなものになるが、ほとんどのコードはビジュアル的にフォームやラベル等のオブジェクトを配置したら勝手に生成される。特に下記のusing記述はSystem組み込みの機能ばかりなので、勝手に記述される事に疑問は無い。必要な記述なのでVisual Studioが生成してくれている。そんな事の理解は今はどうでも良いと割り切ればnamespace以降を理解する事に専念出来る。
そうすると、実にシンプルな内容でこのプログラムが動く様にしか記述されていない事が分かり、過去にC++で学習した呪文のような意味不明のお約束(おまじない)を記す事とかが馬鹿らしく思えていくる。C#はそういう面でも非常にスッキリしていてビギナーにも親切な新しい言語だとジワジワと感じ取る事が出来る。
Program.csの方はstatic void main()が記述されているので大きなプログラムの流れだということが分かる。しかし正直言うとApplication.Run(new Display())しか意味が分からない。アプリケーションを起動した時にRunでDisplay()を新しく読み込んでnewでインスタンスを生成していると思われる。その辺りの解説はVisual Studio 2010のひな型コードを理解する - @ITに書いてある。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace MyClock { static class Program { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Display()); } } } |
Display_Loadは、プログラムが実行されてフォームが表示された時のロード時のイベントを指定しているインスタンス。そしてsecTimer_Tickはタイマーオブジェクトが1000msec毎に時刻情報を発行するイベントを指定している。いずれもSetDisplayTime()を呼び出しているので、時分秒をテキスト形式でtimeNow.Textを通して戻している。つまりこれがラベル表示を更新して、あたかもデジタル時計が動いているかの様に見える訳だ。
ここまでシンプルなチュートリアルだが、それでデジタル時計が動くことを嬉しく思う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace MyClock { public partial class Display : Form { public Display() { InitializeComponent(); } private void Display_Load(object sender, EventArgs e) { SetDisplayTime(); } private void secTimer_Tick(object sender, EventArgs e) { SetDisplayTime(); } private void SetDisplayTime() { timeNow.Text = DateTime.Now.ToString("HH時mm分 ss秒"); } } } |