漢字の「永」の字には、書に必要な以下の技法8種が全て含まれている。
- 点
- 横画
- 縦画
- はね
- 右上がりの横画
- 左はらい
- 短い左はらい
- 右はらい
このことを永字八法(えいじはっぽう)というらしい。
カッコイイ!
つまり書の練習に「永」という漢字をチョイスすれば、必要な技法を効率よく身に付けることができるというわけだ。
さて、書の解説はこれくらいにしてプログラミングの話に移ろう。
はじめてプログラミングをする方は、まず書籍のコードを見ながらそのままそっくりタイプすることから入る。
これを俗に「写経」という。
thom.hateblo.jp
ではどんなコードを写経したら良いだろうか。
まずは「Hello, world!」から。これは大体どんなブログラミング言語でも共通だ。
書でも最初は漢字の「一」を書くと決まっている。
VBAではこう書く。
Sub Main() MsgBox "Hello, world!" End Sub
そのあとは、文字列の結合、計算、変数、制御構文などの単純なテーマを学習していく。
では一通り基礎をやったら次はどうしようか。
書の「永字八法」に相当するような題材はないだろうか。
つまり、プログラミングに必要な技法が色々と含まれていながらそこまで複雑にならない初級の題材にふさわしいコード。
今回3つピックアップしたのでそれぞれ紹介しようと思う。
九九
言わずと知れた九九。小学校で習うアレをプログラムでExcelシート上に書いてみようというコードがこちら。
Sub KuKu() Dim i As Integer Dim j As Integer For i = 1 To 9 For j = 1 To 9 ThisWorkbook.Sheets(1).Cells(i, j) = i * j Next Next End Sub
制御構造として順次・反復が含まれ変数、オブジェクトと一通り扱う良い題材だ。
For文のネストを扱っているのも良い。
FizzBuzz
これもプログラマーには有名なネタ。1から順に数字を数え上げていくが、3の倍数ならFizz、5の倍数ならBuzz、3と5の倍数ならFizzBuzzと発言するという英語圏の遊びである。
Sub FizzBuzz() Dim i As Integer For i = 1 To 100 If i Mod 15 = 0 Then Debug.Print "FizzBuzz" ElseIf i Mod 5 = 0 Then Debug.Print "Buzz" ElseIf i Mod 3 = 0 Then Debug.Print "Fizz" Else Debug.Print i End If Next End Sub
制御構造は順次・選択・反復と3種類すべてが含まれ、剰余算、デバッグプリントまで扱う。
これも良い素材だと言えると思う。
じゃんけん
もはや説明するまでもない。
Sub JyanKen() Dim you As Integer Dim com As Integer Do you = CInt(InputBox("じゃんけんの手を数字で入力" & vbNewLine & _ "1:グー、2:チョキ、3:パー")) com = WorksheetFunction.RandBetween(1, 3) Select Case com Case 1 MsgBox "相手はグーを出しました。" Case 2 MsgBox "相手はチョキを出しました。" Case 3 MsgBox "相手はパーを出しました。" End Select If you = com Then MsgBox "あいこです。もう一度。" ElseIf (you = 1 And com = 2) Or (you = 2 And com = 3) Or (you = 3 And com = 1) Then MsgBox "あなたの勝ちです。" Else MsgBox "あなたの負けです。" End If Loop While you = com End Sub
こちらも制御構造は順次・選択・反復と3種類すべてが含まれ、加えて入力処理、ワークシート関数の利用、型のキャストまで含まれる。
ちょっと複雑で考えることも増えるけれど、まだまだ初級ネタとして使えそうだ。
結論
九九、FizzBuzz、じゃんけん。
いずれも基礎がたくさん詰まった良題である。
これらを写経することで、プログラミングに必要な技法を効率よく身に付けることができるのではないかと思う。
というわけで上記3点を「プログラミングの永字八法」として勝手に認定したいと思う。
ちなみに私の字はきたない。