読者です 読者をやめる 読者になる 読者になる

t-hom’s diary

主にVBAネタを扱っているブログです。

九九、FizzBuzz、じゃんけんの3つをプログラミングの「永字八法」に認定する

VBA プログラミング

漢字の「永」の字には、書に必要な以下の技法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点を「プログラミングの永字八法」として勝手に認定したいと思う。

ちなみに私の字はきたない。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。