AB開発

バイトが重なれば疲れもたまるってもんです。昨日、一昨日と、作業はあまり進みませんでした/(--)/。ということで、今日は本気モードで取り組み中。先日思いついた自動インデントによる効率化、ペアステートメントのコード補完機能の追加について書いていきます。

  • Class 〜 End Class
  • Do 〜 Loop
  • Enum 〜 End Enum
  • For 〜 Next
  • Function 〜 End Function
  • Select 〜 End Select
  • Sub 〜 End Sub
  • Type 〜 End Type
  • While 〜 Wend
  • With 〜 End With


ABには、上記のように、ペアになっているステートメントが存在します。コーディングを行う際、大概の場合はこれらのステートメント間の領域はインデントを付加し、コードに対して視覚性の向上を行います。ここでポイントになるのは下の2点です。一見、単純なポイントのように見えますが、言語仕様に対して非常に重要な問題です。

  1. 人間が読みやすいように、適切なインデントを付加する必要がある
  2. ペアステートメントは一区間(ブロック)として捉えることができる


プログラマーがインデントを意識しながらコーディングを行うと、見やすいコードが出来上がります。これは熟練者であればあるほどです。ハードに直接関係の無い点ですが、ソースコードの保守管理という観点から、長期的な目で見ると、「拡張性、保守管理のし易さの向上」「バグの軽減」などに関わってくることは確かなようです。現在の市場において、皆さんの周りにある一般的な開発環境ならば、これらに対して「基本事項」としてサポート機能が搭載されていることと思います。同時に、ABも重視していかなければならない点です。


では、具体的にインデントに対してどのような制御が必要になってくるのでしょうか。これは、人間がいちいち考えて入力する必要が無いコード(前後の構文から予測できるインデントコード)はエディタが自動的に生成やろうというなんすね。ABは以前のバージョンから自動的にインデントを付加してくれる機能がついていましたが、その原理は非常に単純なものであり、まだまだ改良の余地が見られます。今回はそのことはじめとして、インデントの付加により視覚性が向上すると思われるペアステートメント区間内を、プログラマーが一度もインデントを入力せずにコーディングを行える環境というものを考えてみました。単純に、ブロックの初めと終わりのタブ文字の追加と削除を全自動にしてしまおうということなんですな。これが、改良してみると非常に使いやすいです。


今日は同時に、もう一工夫加えることにしました。こいつはBasic言語という代物がどんなに個性的な言語仕様であるか、私自身疑問に感じてきた点でもあります…。


私はC言語のスタイルが好きです(ABのヘビーユーザーさんであれば、薄々勘付いている方もいたのでは…!?)。C言語は扱う記号が多いです。C++ともなれば、私も知らないような仕様があったりと、奥が深いってもんです。単語数が少なく、キー入力の手間が省けるC/C++言語。しかもハードレベルでの制御が可能なその言語仕様は右に出るものはいないときます。逆を返せば、そのオモテヅラに馴染めないなんて場合もあるのかもしれませんが…。

  • Basic言語 … 冗長的ではあるものの、確立された単語を利用している。扱う文字数は多いが、視覚性に優れる。
  • C言語 … 記号による意味付けを積極的に取り入れている。ある程度の慣れが必要だが、熟練者であれば効率的なコーディングが期待できる。


これらの点を踏まえると共に、Basic言語はその言語仕様が抱える自らの矛盾を直視していかなければなりません。


Function name() As Long

End Function


よく考えてみてください。これって、いくらなんでも冗長的ですよね。Functionって、8文字ですよ、8文字!これをC風に書くと、


Long name(){

}


となります。カッコという制御記号を加えるという動作で、"Function"は"{"に、最後の"End Function"(なんと12文字)は"}"に収束されています。こればかりは、超えることのできない言語仕様ってもんです。言語仕様から来る入力文字数の違い、私は魔法使いにはなれないので、どうしようもありません。その代わり、「コーディングという事象のみに特化すれば…」という視点から考えると、この問題をチャラにすることはできます。それが今回追加するペアステートメントのコード保管機能です。


コード補完機能というやつは、本来は対象位置の前後のソースコードを解析し、予測できる語句をプログラマーに代わって画面に表示してくれる、更にそいつを入力までしてくれるという、ありがた〜い機能なんです。先ほどの話に戻りますが、ABのエディタにより高度な解析能力を備え付ければそれが可能になり、最終的にはコーディングに必要なキー入力の回数はC言語に限りなく近づくことができると思います。先ほどの、"Function"は8文字って話に戻りましょう。さすがに、打ち込み始めの"Function"ばかりは予測不能ワードなので、ご勘弁いただきたいのですが、"Function"という語句がカーソルよりも上の行に存在すれば、その下には"End Function"が来ることは確かです。

  • 数行前に"Function"という記述がある
  • 今、プログラマーが"e"という英単語を入力した


これらの2点の事象を掛け合わせ、プログラマーは"End Function"を入力したいのかな?といったことを予測します。と同時に、"End Function"をカーソルのすぐ下にポップアップ表示させ、Enterキーの入力を待ちます。プログラマーがそのポップアップに気付き、Enterを押せば、"End Function"が自動的に入力されると共に、数行前のインデントを自動的に認識し、適切な量のインデントが付加されます。ここまでの手順は、C言語で閉じカッコ"{"を入力するためのキー入力の回数と同等のものです。


とまあ、今日は作業が順調に進んで時間的に余裕があったので、長々と書いてみました。正式リリースに向けて、もう一がんばりです。せっかくなので、AB3から何にも進展していないデバッガについても改良を施したいと思います。これはまた後日…