プログラムのお話(その1)

目次

始めに

プログラミングが出来るという事
職業としてのプログラマーやシステムエンジニアだけがプログラムが出来る人ではありません
学校でそれらの教育を受けた人だけでもありません
趣味で独学で出来るようになった人も沢山います
何をもって出来ると言えるのか、ここに変なこだわりのある人が居ますが
要は、プログラミング的思考が出来るかどうか、ではないのでしょうか

プログラミング的思考

学習指導要領に含まれることで最近になってマスコミがこぞって使い始めた言葉ですが
プログラミングをする人の感覚としては、昔からある物です
頭の良い人がうまく言葉にしてくれました「完成に至るまでの過程を考え行動すること」
うんうん、これです、コレ!
プログラムって、動いてほしい事をすべて書かないといけないんです
例えば、キーボードで「A」って打ったら画面に「A」って表示させたい時
キーボードはスイッチの塊で、PCは常時そのスイッチを監視しています
監視してる部分もプログラム、どのスイッチが今ONなのかOFFなのかをずーっと監視してます
「A」が押されると、Aに対応したスイッチがONになったよ!って監視してるプログラムから通達が来ます
その通達が本当なのかを調べて、本当なら、画面に「A」という文字を表示させろ!というプログラムを書きます
簡単に書こう書こうと思うと、どんどんドツボにはまっていく良い例になりましたがw
日常生活でも、欲しい物が突然目の前に現れるわけじゃないんだよ!それが目の前にあるのは
それまでに様々な過程を経てそこにあるんだよ!という過程を理解する必要があるって事を
プログラミングに準えて「プログラミング的思考」って呼んでます

出会いはBATファイル

私がプログラムと出会ったのは、今の業界に入った頃です
まあ、理解せずに触れ合ったのは中学生の頃ですが、理解してないからノーカウント
それをプログラムと呼んじゃう?って言われるかもしれませんが、大きく分ければ該当するかと
最初は、BATファイルと言われる物、当時のOSはMS-DOSという物
MSは今でもおなじみマイクロソフトの事、DOSはディスクオペレーションシステムの略
Windowsの様にマウスで操作するのではなく、コマンド入力で操作するOSです
このMS-DOSでPC起動時に毎回同じコマンドを複数個実行する必要があって
それを一つにまとめたBATファイルを書いたのが始まり
バッチ処理って言って、上から順次実行っていう処理何ですけど、詳しくは書きません
MS-DOSでは起動時にBATファイルを自動実行させる機能があって、Autoexec.batっていうんですけど
それを色々いじって自分に使いやすいバッチファイルを作った、これが最初
バッチファイルと言っても、メニューを作ったり条件分岐をさせたりと、結構頭使います

https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%83%81%E5%87%A6%E7%90%86

AutoLISP

設計屋さんになってから使い始めたAutoCADというCADアプリは前に紹介しましたが
このAutoCADには様々なカスタマイズ機能が備わっています
前回紹介した通り、汎用のCADで、専用機能は別売り、この専用機能部分を作るための
様々なカスタマイズ機能が付いているのは必然だったんですね
簡単なところでは、メニューを増やしたり、ツールバーを増やしたり
BATファイルの様な順次実行のマクロやスクリプトを作ったり
その中で当時の専用機能を作る時に使われていたカスタマイズ言語が「AutoLISP」と言う物
元は「Lisp」とい人工知能に強い言語、MIT(マサチューセッツ工科大学)で開発された言語です

スポンサーリンク
https://ja.wikipedia.org/wiki/LISP

AutoLISPが最初の本格的プログラム言語だったわけですが、これで良かった
何がよかったかというと「インタプリタ」だったというところ
突然出てきた「インタプリタ」なんだよそれwってなると思いますが
プログラム言語には大きく分けて2種類あります「コンパイル型」と「インタプリタ型」
前者は実行速度は速いけど、実行するのに機械語に変換する必要があるという物
後者は実行速度は遅いけど、書いたものそのまま実行できるという物
大分かみ砕いて説明していますが、プログラムが分からない人には「なんのこっちゃ」でしょう
まあ、それは仕方がないので聞き流しておいてください

https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%97%E3%83%AA%E3%82%BF

AutoLISPはAutoCADを使いやすくするための追加機能を作るための言語なので
プログラミングはCADの画面を開いた状態でするんです、すぐ確認できるようにね
AutoCADというアプリは例えば線を1本引きたいとき、メニューの線分をクリック
ツールバーの線分をクリック、キーボードで[LINE]と入力、キーボードで[L]と入力
どの方法を使っても線が引けます、線を引きたいという宣言方法が複数あるという事
Windowsで動くアプリだとツールバーとショートカットと右クリックとって複数あるけど
それはWindowsになるまでは無かった機能なんですが、AutoCADには昔からありました
で、キーボードでコマンドを入力するという機能があるおかげでCADの画面内に入力欄があるんですよ
米国製なのでコマンド名はすべて英語ですが、線が引きたかったら[Line]円なら[Circle]
消したかったら[Erase]回転なら[Rotate]複写なら[Copy]移動なら[Move]とても分かりやすい

AutoLSIPで何を作るのか、例えばクリックした場所から30度で15mmの赤い線を引きたい
こんな注文があった時、一つ一つ作業をすると、コマンド[LINE]を宣言して1点目をクリック
長さを15mmにして角度を30度にして線を引いて、次は色を変えるコマンドを宣言して
色を変えたい図形を選んで、変えたい色を選んで実行する。結構手間がかかります
これを1つのコマンドにしちゃうのがプログラミングです
ちなみに、今の事をさせるプログラムはこう書きます

スポンサーリンク
(defun c:Redline ()
(if (setq p0 (getpoint "\n基点を指示: "))
(progn
(command "._LINE" p0 "@15<30" "")
(command "._CHPROP" "L" "" "C" "1" "")
)
)
)

ものすごく久しぶりに書いたのと、デバッグはしていないので、動かないかもw
見やすい様にプログラム的に字下げをして書いていますが、本来改行は必要ありません
これを改行を省いて1行にすれば、AutoCADのコマンドラインにコピペで動きます
インタプリタ型というのはデバッグが直感的に出来るので学習には最適なのです
簡単な解説を書いておきます
1行目の[(defun c:Redline ()]これはRedlineという名のコマンドを作りますって宣言してます
2行目の[if (setq p0 (getpoint “\n基点を指示: “))]これは二つに分けて考えます
一つ目は[ (setq p0 (getpoint “\n基点を指示: “)) ]クリックした点の座標をp0と言う名の変数に代入します
二つ目は[if]これはプログラムの基本、条件分岐で「もし~だったら~しなさい」という命令
もし、p0があったら、以降を実行しなさい、無かったら終了しなさいという意味になります
3行目の[(progn]はおまじないです、いまは説明する必要のない行になります
4行目の[ (command “._LINE" p0 “@15<30" “") ]は線分コマンドを実行して順番に1点目と2点目を宣言して終了しなさいと書いています
5行目の[ (command “._CHPROP" “L" “" “C" “1" “") ]はプロパティを変更するコマンドを実行して最後に書かれた図形を赤色に変更しなさいと書いてあります
以下の行は、LISP言語は開かれたカッコは閉じなければいけないというルールがあるので、開いた個数分閉じてます
まあ、分らないとは思いますが、分ってくるとわかるようになりますw当たり前ですね

当たり前に書いていましたが「デバッグ」とはバグをつぶす、エラー個所を探して直すっていう意味です
「変数」とは変化する値の事、数学でxとかyを使いますよね、それと同じ事です

AutoLISPは今でも現役のカスタマイズ言語ですが、日本語の解説本はありません
公式の関数リファレンスとネットに転がっているユーザ情報だけが開発のお供です
英語の解説本は存在しますがAutoLISPは日々進化しているのに、本の情報は相当古い物です
私は仕事としてAutoLISPを使って専用機能プログラムを書いた経験があるので
解説サイトを作るノウハウはあるのですが、AutoLISPを使いたがる人が少ないw
覚えてもAutoCADとごく一部の互換CADでしか通用しないスキルですからねw

3DCGのお話同様に、プログラムのお話も1回では書ききれませんでした

著者のプロフィール
noheyaのアバター