「BASIC」の版間の差分

いっぽう、Visual BasicなどのGUI対応したBASICは、文法と操作性が、古いBASICとは、かなり異なります。GUI対応BASICは、マウス入力に対応したGUIプログラミングに対応するために、新しい機能を大
(円の角度はラジアン単位。)
(いっぽう、Visual BasicなどのGUI対応したBASICは、文法と操作性が、古いBASICとは、かなり異なります。GUI対応BASICは、マウス入力に対応したGUIプログラミングに対応するために、新しい機能を大)
----
 
プログラミング言語[[w:BASIC|BASIC]](ベーシック)の使用法
 
== はじめに ==
=== BASICの分類 ===
まず、使用するBASICを起動して下さい。
 
BASICには大きくわけて、
* [[w:MS-DOS|MS-DOS]](エムエス ドス)時代までの「古いBASIC」 ([[w:N88-BASIC|N88-BASIC]]や[[w:F-BASIC|F-BASIC]]、[[w:MSX-BASIC|MSX-BASIC]]などを想定)
*「JIS規格BASIC」や[[w:QuickBASIC|QuickBASIC]](クイック ベーシック)以降の、「新しいBASIC」
* [[w:Microsoft Visual Basic|Microsoftマイクロソフト社 Visual Basic]](ビジュアル ベーシック)以降の、[[w:GUI|GUI]](グイ)に特化したBASIC
 
の3種類があります。ここでは最初の2種類のBASICを対象にしますが、ほとんどの構文については3つ目の種類のBASICにも「新しいBASIC」と同じことが通用します。違いについてはその都度、注記します。
 
本wikibooksの本ページ『BASIC』では、おもに、古いBASICやJIS規格BASICを基準に、文法を説明しております。
 
その理由は、古いBAISCは文法が単純であり、入門しやすく、また、古くからあるため、C言語などの他のプログラミング言語の多くにも影響を与えており、よって古いBAISCが他のプログラム言語にも応用しやすいからです。
 
=== GUI対応のBASICについて ===
いっぽう、Visual BasicなどのGUI対応したBASICは、文法と操作性が、古いBASICとは、かなり異なります。GUI対応BASICは、マウス入力に対応したGUIプログラミングに対応するために、新しい機能を大量に追加してあるため、そのため、キーボード入力を中心にあつかう古いBAISCとは、大幅に違っています。
 
GUI対応したBasicには、歴史的な経緯から、『BASIC』から派生した名前がついていますが、実態は、ほとんど別のプログラミング言語だと思ったほうが良いでしょう。
 
なお、2017年の現在、(GUIに特化している)Visual Basicを出しているマイクロソフト社が、入門者用に機能を簡易化した small basic というのを出しているので、GUIプログラミングの初心者は Visual Basic ではなく small basic (スモール ベーシック)で入門したほうが、学びやすいでしょう。
 
いまや Visual Basic は、入門用のプログラムを動作させるまでに、かなり覚えることが多くなってしまい、そのため、マイクロソフト社が、もはやVisual Basicは入門用には適さないと判断して、近年になって small basic を出すという事になった次第です。
 
=== 古いBASICの入手方法 ===
フリーソフトなどとして、BASICの実行環境が、無料配布されています。ネット上のフリーソフト配布サイト(「vector」などのサイトがある)などで公開されていますので、そこからダウンロードするなどの方法があります。
 
なお、ソフトによっては、「制作したソフトは必ず公開すること」などのライセンス条件をつけている場合があります(『十進BASIC』など)。研究用にBASICで計算プログラムを作る場合や、または商用アプリなどを作る際は、普通は非公開にする必要があるので、けっして公開義務のある種類のBASICでは制作しないように、気をつけてください。
 
なお、かつて、N-BASICやF-BASICを出していた会社は、現在はBASICを開発してないし、販売もしていません。
 
なぜなら、90年代〜2005年ごろ、それらのBAISCの開発企業が、そういう自社開発したBASICを生産していたにもかかわず、消費者に売れなかったからです。
 
代わりに、他の企業などがフリーソフトなどで、それら古いBASICの実行環境を再現したアプリケーションが制作しており、ネット上のフリーソフト配布サイト(「vector」などのサイトがある)などで公開されている、・・・といった事です。
 
の三種類があります。ここでは最初の二種類のBASICを対象にしますが、ほとんどの構文については三つ目の種類のBASICにも「新しいBASIC」と同じことが通用します。違いについてはその都度、注記します。
 
== 古いBASICでのプログラムの入力 ==
まず、使用するBASIC(ベーシック)を選び、起動して下さい。
BASICで画面に文字を表示するためには '''PRINT''' 文を使います。ただし、新しいBASICを使っている方は、この節は読み飛ばしてもらっても構いません。
 
BASICで画面に文字を表示するためには '''PRINT''' 文を使います。ただし、新しいBASICでは、まったく別のコマンド文になります()。
 
 
BASICが起動すると、「Ok」「Ready」など(BASICや機種によって異なる)の文字の下に「■」(カーソル)が出ます。カーソルはカーソルキーの上下左右で移動できます。このカーソルが出ているときに、BASICのプログラムを編集できます。
の様に入力すると、画面に '''Hello BASIC''' と表示されます。画面の左端にカーソルがある状態で、
PRINT 2+3
の様に入力するとして(最後にEnterキーを入力して改行します。機種によってはRETURNキー、CRキーとも言います。以下、同じなので省略します)、RUNを実行すると(実行方法は機種によって異なる。それぞれの機種を参考のこと)、'''5''' と計算の結果が表示されます。
 
いっぽう、
PRINT "2+3"
を実行すると、画面に"2+3"とそのまま表示されます。
 
つまり、二重引用符 " " は、「引用符内の文字列を、画面にそのまま表示しろ」という意味の記号です。
 
 
他のプログラミング言語でも、「print」という語をテキスト表示命令に用いるプログラミング言語は多いです。また、他のプログラミング言語でも、文字列を表示する場合は、二重引用符 " " で くくるのが、普通になっています。
 
もし、二重引用符でくくらないと、
PRINT Hello BASIC
は「エラーのある文なので実行不可能」的な報告を コンピューターから報告されたり、あるいは、まったく予期せぬ数値や文字が表示されるなどのエラーを起こします。
 
 
=== 行番号 ===
 
 
== 以下は基本的に古い形式で説明します ==
* ここで 古い形式を N-BASIC, MSX-BASIC とします。それ以降のBASICで働くように考慮します。
 
 
* 空白に意味があります、注意しましょう。
 
 
※ 他のプログラム言語でも、似たような文法の言語は、多くあります。他のプログラム言語によくあるのは、主に、
:特別な指示がないかぎり、上から下に向かって順に実行される。
:空白に意味がある。
です。
 
== 注釈(コメント) REM ==
注釈(ちゅうしゃく)をつけるには'''REM'''を使います。「レム」と読みます。注釈とは「何も実行しない」という命令で、プログラムの説明を書いたり、[[w:デバッグ|デバッグ]](エラーの原因をさがす作業のこと)などで一時的に命令を実行させないようにするとき、などに使います。
 
<pre>
 
== 表示 PRINT ==
画面に表示させるには PRINT文を使います。「プリント」と読みます。
 
<pre>
 
== 変数の初期化 ==
命令 NEW で、変数を初期化します。
 
たとえば、上のプログラムを実行したあとに、
PRINT A
 
つまり、プログラムを終了しても、それだけでは変数の内容は消去されません。
 
命令 NEW を使うと、BASICで扱っている変数にすべてゼロ 0 を代入し、初期化(しょきか)します。
 
もし、上の節「代入と計算」のプログラムの実行直後に、まったく別のプログラムを実行する必要があったとして、そこでも同じ変数名の変数が使われていたとしたら、その変数は初期化をしていないと、エラーの原因になってしまいます。
 
まったく別のプログラムでも、同じ変数名「A」や「B」を、まったく別の内容で使うこともありますので、必要に応じて NEW 命令を使いましょう。
 
と書いて実行すれば、このプログラムの実行前にどんなプログラムで変数「A」を用いていようが、それを初期化できます。
 
なお、上記のプログラムの実行結果として、計算結果として「16」が表示されます。
 
このプログラムの場合なら、わざわざNEWで変数Aを初期化しなくても、その次の行で <nowiki>A=7</nowiki>と記述しているので、じつは初期化の必要はありません。
 
ですが、作ろうとするプログラムが複雑になってくると、あつかう変数の個数が多くなり、変数ひとつずつ初期化をするのが大変になる場合もありますし、個数が多いと一つづつ初期化する方法だと、初期化しわすれる変数も出て来るかもしれません。
 
なので、ねんのため、 NEW 命令で、いっきに、すべての変数を初期化してしまいましょう。初期化される対象は、そのBASICで扱っている「変数」だけですので、安心しても平気です。
 
 
なお、下記のように、もし計算途中に、NEWを入れると、
 
(あまり、よくないプログラム)
<pre>
20 LET A=7
25 NEW
30 PRINT A+9
40 END
</pre>
 
このプログラムなら、PRINT命令で「9」が表示されたりします。なぜならAが初期化されてしまい、Aに0が代入されているからです。
 
 
== 条件分岐 IF THEN ELSE ==
 
プログラム中である条件に当てはまるかで実行する内容を変えるときには '''IF'''~'''THEN'''~'''ELSE'''文 を使用します。
 
条件分岐では IF という語句を、ほぼ、かならず使うので、条件分岐命令のことを「IF文」とも言います。「IF」とは、「イフ」と読み、意味は「もし 〜〜 ならば、」という意味の、英語の接続詞です。(日本では、中学校の英語の授業で 接続詞 IF を習うだろう。)
 
ほかのプログラム言語でも、条件分岐命令のことを普通は「IF文」と言います。なお、THENは「ゼン」と読み、ELSEは「エルス」と読みます。
 
<pre>
</pre>
 
ここで使っているA > Bの '''>''' は'''比較演算子'''(ひかく えんざんし)といい、数値の比較に使います。
 
{| class="wikitable"
|}
 
他のプログラム言語でも、IF文 の考え方と 比較演算子 の考えかたは、ほぼかならず使います。なので、いまここのBASICの学習で、比較演算子の考え方を、しっかりと理解しましょう。
IF文は、IFとTHENの間に条件式を書き、THENから条件式が成立するときの命令を書きます。そして成立しなかったときのことはその後ろにELSEに続けて書きます。
 
IF文は、IFとTHENの間に条件式を書き、THENから条件式が成立するときの命令を書きます。そして成立しなかったときのことはその後ろにELSEに続けて書きます。なお、THENは「ゼン」と読み、ELSEは「エルス」と読みます。
 
THEN の意味は、「そうであれば〜〜」という意味です。ELSEの意味は、「そうでなければ〜〜」という意味です。
 
例の30行目は、もし A > Bが成立すればPRINT "A is bigger than B"を実行し、もし成立しなければPRINT "B is bigger than A"を実行するという意味であります。文字列の場合は、
無条件でジャンプします。
 
条件分岐ではない、強制の分岐には'''GOTO'''命令を使います。「GOTO」は「ゴー トゥー」と読みます。GOTOの後に行番号を入れると、対応する行の命令を実行します。
 
<pre>
</pre>
 
このプログラムを実行すると、画面に「2」「1」と表示します。が、このようにGOTOの飛び先が入り組んだプログラムは「スパゲティ・プログラム」と呼ばれて、「他の人が見てもプログラムの構造を一目では把握しづらい」ために、通常のプログラムでは 禁じ手(きんじて) とされています。
 
<pre>
 
新しいBASICでもGOTO命令は使用できますが、推奨はされません。
 
どうしてもGOTO文を使う必要のある場合には、REM文などによるコメント機能も活用しましょう。GOTO文の前の行で、REM文による説明で、GOTO文の行き先を説明したり、あるいは処理しようとしている内容などを記述すると、他の人がプログラム内容を把握しやすくなるでしょう。
 
 
== 繰り返し FOR NEXT ==
ここまでは数値の整数で行いました。
 
割り算で割り切れないときに扱う小数点の処理、浮動小数点の定数、変数について説明します。誤差についても
 
BASICでは小数点を付けると、小数点付きの実数として扱われます。
ただし、これは古いBASICの文法なのであまり使わない方が良い。
 
{{-}}
== グラフィック関連 ==
== マルチメディア関係 ==
=== 直線 ===
円や直線などの画像を表示したり、音声を鳴らしたりなどの機能の命令は、BASIC対応のパソコンを作っている会社ごとに違っていた。
 
ハードウェア側の性能にも関係する事であり、そのため、仕様統一しきれない。
 
いちおう、BASICの国際規格も存在しているが、実際には、この規格に従ってないBASICも多い。おそらく、特に、画像表示や音声などのマルチメディア関係の機能では、そのような規格外の仕様が多いだろう。
 
本wikibooks日本語版『BASIC』では、日本の読者を対象にしていることもあり、日本で普及した日本産パソコンのハードウェアを想定して、BASICの、画像表示や音声などのマルチメディア関係のプログラムを記述する。
 
=== グラフィック関連 ===
==== 直線 ====
:※ BASICの書籍が入手できないので、記憶とネット上の情報に頼って記述しております。
 
FはFILLの意味です。
 
==== 円 ====
書式は
CIRCLE (中心のx座標,中心のy座標),半径,色
 
 
==== 点のプロット ====
命令「PSET」を使うと、指定した位置に、点をひとつ追加します。
 
 
 
=== 音 ===
 
BEEP
 
たとえば、
 
== 1970〜80年代のパソコン事情が背景にある ==
BASICは、形式的には、BASICはプログラム言語であるとして分類されています。
 
しかし、実際には、古いBASICを21世紀に再現したBASICでは、現在でいうところの、ハードウェアを仮想的に再現する「エミュレーター」というアプリケーションや、あるいは、まるで一部の「ミドルウェア」というOSっぽい機能をもつアプリケーションのような機能があり、「エミュレーター」や「ミドルウェア」としての性能は低いものの、古いBASICを再現したBASICには、そのような特徴が あります。
 
 
どういうことかというと、実際の古いBASICの流行した1970年代ごろは、21世紀の今とはパソコン販売の状況が違っています。1970年代ごろの当時は、まだOS(オペレーティング システム)が高度化する前だった事もあり、さらに、OSとパソコン本体がくっついて販売されてたこともあり、1970年代ごろは、BASICが販売されているパソコンと一緒に、OSと一緒にパソコン本体に組み込まれている状態で、販売されていました。
 
このため、実際の1970〜80年代に市販されていたパソコンに組み込まれていたBASICでは、画面に円や直線などを表示したりする画像表示の命令や、ブザー音を鳴らすなど命令なども、簡単にプログラム記述できるようになっています。
 
本来、画像表示のための処理は、ディスプレイの種類ごとに、解像度がバラバラだったりするので、パソコン内部動作を分ける必要があるので、オペレーティングシステムの機能を使って、画像を表示したりすることになります。
 
 
しかし、当時のBASICでは、オペレーティングシステムの仕組みなんて、意識する必要はありませんでした。なぜなら、特定企業のパソコンに組み込まれた状態でBASICが配布されていてので、なので、その特定企業のディスプレイやスピーカーといったハードウェアを、簡単に制御できるように、BASICが改良してあったのです。
 
このような事情のため、そもそも当時のほとんどの消費者は、そもそもオペレーティング システムいう概念すら知りませんでした。
 
このように、BASICの機能の背景には、1970〜80年当時のパソコン事情があります。
 
 
1970年当時は、各パソコン会社のBASICが最初から特定の自社パソコンに対応した状態で、パソコンに組み込まれていて販売されていたので、BASICから直接オペレーティングシステムの機能を利用できるわけです。
 
このため、1970年ごろのBASICの機能は、現在の「プログラム言語」とは、やや違っています。
 
 
 
まるで、古いBASICを21世紀に再現したアプリケーションも、現在でいうところの、ハードウェアを仮想的に再現する「エミュレーター」というアプリケーションや、あるいは一部の「ミドルウェア」というOSっぽい機能をもつアプリケーションのような機能が、1970〜80年当時の実際に(市販パソコンに組み込まれて)販売されていたBASICには、あります。
 
古いBASICそのものも、現代の視点で見れば、まるでOSの機能を使うためのコマンド郡である「API」(エー ピー アイ)のような特徴が、古いBASICには、あるのです。
 
このように、BASICは、現代でいう純粋なプログラム言語とは、やや、ちがっています。
 
 
さて21世紀の現在、プログラムで画像を表示したり、あるいは音声を鳴らしたりなどのプログラムを記述したい場合には、オペレーティングシステムの機能を活用する必要があります。
 
オペレーティングシステムには、ウィンドウズやマックOSやリナックスなど、色々とありますが、それぞれのOSごとに仕組みが違うので、プログラムの記述作業も、それぞれのOSごとに、プログラムを分ける必要があります。
 
 
上述のようなパソコン事情が、1970年頃と現代では大きく違うので、もはやBASICだけでは、高度なアプリケーションを作ろうとしても、あまり簡単には作れなくなってしまいました。
 
なので、もし、21世紀の現代の人が、独学でBASICを学ぶ場合は、けっして古いBASICだけで満足せずに、なるべく、C言語を学んだり、さらに、その後の時代の他のプログラム言語も、学びましょう。
 
 
== 参考リンク ==
 
 
{{stub}}
23,377

回編集