Classic MacでC++で始めようとしてトラウマになった
プログラミングというやつには色々苦労させられ、C++を始め多くの言語で躓いたトラウマも根強く私自身の中に刻み込まれている訳でちっとも先に進めません。私にはプログラミングは向いてないと思っていました。
しかし、プログラマーをしている知人は、私の性格や会話の内容からして「絶対にプログラマーに向いている」と言う訳です。だけど「こういう所とかこういう所とか理解出来ない訳だよね」と話をすると、「それって難しく考えすぎてるからだよ。」と言われる訳です。
「そんなもの知らなくったってプログラミングできるし(w」みたいなやり取りになります。
とは言っても私には、私自身がプログラミングしたと納得行くレベルの作品が一個もないのです。
例えばAndroid用にApp Inventorで作った計算ツールなんかもいくつか有るわけですが、それってブロックを組み合わせただけで、四則計算の式だけがカギです。それ以外は何もプログラミングじゃないしと思っていました。
しかし、どうやらApp Invantorのブロックの組み合わせこそがプログラミングを視覚的に表したもので、それはプログラミングでは無いという考えは間違っていると言うのです。
え?そういう事のか?
じゃぁ勝手に自分でこれはプログラミングだと納得できてないだけの話か?
そういう訳で、恐らく最も自分を納得させられるであろうWindowsアプリを、より視覚的な手法でかつ手早く作れる方法として、Visual Studio C#を使ってみる事にしました。BizSparkライセンスで開発用途なら使えるし、Microsoft社から無償版のExpress版もダウンロード出来ます。
Visual Studio C#
近々書籍を買い求めようと思っているのですが、その前に本当に自分が欲している方針に合う教え方を実感してみたくて、色々な入門記事を読んでみたら、多分これが今のところ一番求めていたものに近かった。
デジタル時計を一つのウィンドウに表示するだけのシンプルなサンプルプログラムなのですが、私の探していたものがここにあった気がします。
ようやく、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に書いてありました。
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を通して戻している。つまりこれがラベル表示を更新して、あたかもデジタル時計が動いているかの様に見える訳です。
ここまでシンプルなチュートリアルですが、それでデジタル時計が動くことを嬉しく思います。
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秒"); } } }
コメント