GO HOME

「初歩からはじめるREALbasic」追補情報


※ここは、拙著のREALbasic入門書「初歩からはじめるREALbasic」(アスキー、544頁CD-ROM付、3400円)に関するコーナーです。現在、初版の見直し作業をしていますが、校正情報やよくある質問の答えなどをここでまとめて掲載します。なお、ここに掲載したものの多くは第2刷で修正されます。



 ★バグ情報★

※ここでは、ソースコードや内容に関する記述間違いについて整理しておきます。が、現在までのところ致命的な間違い(?)や、間違いにより意味がわからなくなっているような部分は幸いまだ見つかっていません。



※P44 リスト2-1 2行目

「AMsgBox "…」→「MsgBox "…」

単純なつづりミスです。「AMsgBox」は、あたまのAが余計です。「MsgBox」とタイプして下さい。まあ、図やその後の説明を見ればわかることですが、最初にコードを書き始めたところの間違いなので、初心者は悩んでいる人もいるかも知れませんので、御注意を。



※P188 「補足」について

補足で「コード内からTabPanelのValueを変更してもChangeイベントが発生することに注意ください」とありますが、これだけでは何のことやらわからない人も多いでしょう。TabPanelのChangeイベントを利用したコード内でそのTabPanelのValueを変更すると、プロパティ変更の瞬間に、変更したTabPanelのChangeイベントが発生し、現在実行中のChagneメソッド自体がまた呼び出されてしまうのです。もし、そこで適確な処理をしていないと、そこでまたValueを変更し、それによりまたChangeが発生し、また呼び出されたChagneメソッドでValueを変更し…と無限にChangeを呼び出し続けることになってしまいます。この危険を指摘しているのだ、ということです。



※P469 リスト10-5

リスト10-5が2つありますね? これ、実は1つのサブルーチンでまとめるべきものです。当初、EditFieldとCanvasのAccept〜をそれぞれのOpenメソッドにまとめる予定だったのですが、DrawingCanvasがOpenイベントを用意していなかったので急きょWindowのOpenに移動しました。が、考えてみれば、それならEditFieldだけ別にわける必要はないわけで、なぜか意味もなく2つのメソッドに分かれるという状態になってしまいました。
 もちろん、コード自体としてはこのまま書いても全然問題ありませんし、正常に動きます。が、「なぜ、わざわざ2つに分けてあるのだろう? どういう意味があるのだろう?」と思う人のために「意味はない、1つにまとめてもいいです」ということであります。



 ★FAQコーナー★

※ここでは、本書の内容についての質問にお答えします。本書を読んでいて不明な点などありましたら、どうぞ掌田津耶乃までお問い合わせください。特に一般的な問題については、ここでFAQとしてまとめていきたいと思っています。



●「オブジェクト指向」というのが、どうもイマイチよくわからないんですが…。

答え)「オブジェクト指向」という考え方は、ちょっと一般的になじみのない専門用語や概念がいくつか登場しますので、それでわかりにくくなっているのかも知れません。考え方自体は決して難しくはないんですが…。
 オブジェクト指向を理解するためには、まず最も重要な考え方をしっかりと理解しておく必要があります。それらは以下の2つです。

「クラスとインスタンス」
オブジェクト指向では、登場する全ての部品(オブジェクト)は「クラス」と呼ばれるものとして用意されます。これは部品の動作や働きなどをまとめてある「設計図」です。そしてその設計図(クラス)をもとにして、実際にプログラムで使うための部品を作ります。これが「インスタンス」です。
 インスタンスは、一般的には「new」というものを使ってプログラム内から作成することができます(newを使わずにインスタンスを作るものももちろんあります)。

「継承(インヘリタンス)」
あるクラスのもつ機能全てを利用できるような新しいクラスを作るのに用いられる機能です。あるクラスを継承して新しいクラスを作ると、元になったクラスの全ての機能をそのまま受け継ぎ、使えるようになります。

 この2つにプラスして、REALbasicのプログラム動作の基本である「イベントとメソッド」の関係、計3つの考え方をまずしっかり身につけて下さい。そして、比較的簡単なクラスのインスタンス(例えば、ColorやFontなど)を実際に使ってみて、インスタンスというのがプログラムの中でどのように利用されるかを確認してみましょう。更に、もう少し本格的な機能をもったインスタンス(例えば、Pictureなど)をプログラム内からいろいろと操作してみましょう。
 オブジェクト指向は、「習うより慣れよ」です。頭の中だけで理解しようとしてはいけません。まず、なによりも実際にコードを書いて動かす、それが最善の道です。



●結局、オブジェクト指向を理解しないとREALbasicは使えないんですよね?

答え)もちろん、REALbasicの全ての機能を引き出すためには、オブジェクト指向の理解は不可欠です。が、「オブジェクト指向がわからないとREALbasicは使えない」と思うのはあまりに早計でしょう。まだREALbasicの基本がしっかり身についていないうちから背伸びして無理矢理覚える必要など全くありませんし、そうすべきではありません。
 オブジェクト指向は、REALbasicをある程度使えるようになり、更に上を目指そうとしたときに初めて理解する必要を感じるものでしょう。まだその必要性を十分に感じていない間は、無理に「理解しないとダメだ」と思わなくてもよいですよ。



●この本では、命令も関数もみんなメソッドだと説明していますが、同じアスキーから出ている「すぐに使えるREALbasic入門」という薄い本では、命令や関数とメソッドは分けて説明してありました。どっちが正しいんでしょう?

答え)実をいえば、この分類がもともとかなりいい加減なのです。REALbasicの開発者たちはそういう用語に無頓着な面があって、メソッド、コマンド(命令)、関数、プロパティといったあたりの切り分けについては、かなり首をかしげる部分があります。そこで、本書では混乱をさけるために、筆者の独断で全て「メソッド」として説明をしてあります。一応、REALbasicのリファレンスに掲載されているのが正しい分類でしょうが、納得しにくい分類も多いので、「もともとあんまり厳密に分けて考えてないのだ」と思った方がいいでしょう。



●作ったCheckboxのVisibleを、Window1のOpenでで変更して表示するようにしてあるのですが、なぜかアプリケーションにすると、きちんと変更されずウィンドウデザイナに作り込んだままの状態で表示されてしまいます。オン・ザ・フライでは正常に動作するのですが。

答え)それは、おそらく68Kコードでコンパイルしたアプリケーションではないですか? PPC用にコンパイルしてみてください。正常に動作するはずです。現在の2.0.2Jの68Kコンパイラには細かいバグがいくつか残っています。そのうちの1つに、コントロールのVisible、Enable、Valueプロパティなどを画面表示前に変更してもそれが表示に反映されない、という問題があります。これについては、2.1で修正されているようなので、2.1の日本語版のリリースを待ってください。PPC用のコンパイラにはこのバグはありません。



●オブジェクト指向の説明で「オブジェクトはみんなNewして作られる」とあります。けれど、プロジェクトに組み込んだウィンドウ類は、みんなNewしなくてもShowだけで表示できます。これはどういう扱いになるのでしょう?

答え)これが、一番答えに弱るところなのです。「起動した時点で、ウィンドウ関係に関しては自動的にインスタンスが1つ作られる」と考えれば一番わかりやすいのですが、いろいろ挙動を調べてみると、そう断言できない部分もあります。「最初に出てくるものは、クラスがそのまま動かせるようになっているんだ」と考えた方が納得がいくような部分もあったりするんです。
 どうもREALbasicは、細かな部分についてはあんまりきちんと概念モデルを考えないで作られているフシがあります。この「1枚目のウィンドウ」もそういう感じです。とりあえず、自動的に生成されるインスタンスと考えて間違いではありませんが、細かな挙動については実際に自分で確認しながらコードを書いていくようにしてみてください。時々、変な挙動にぶつかることがありますから。




GO BACK
GO HOME