- 変数の適切な宣言とオーバーフロー
- 足し算について
- 引き算について
- 掛け算について
- フォーム上への表示メソッド
実習7では故意にオーバーフローの出る問題を作成しました。
前にも述べたようにバリアント型だとなんでも格納できるかわりに,メモリを多く消費してしまいます。
そのために適切な型宣言が大切です。
「足し算」について考えましょう。
int結果 = 32767 + 1
…ここで32768になるはずですが,int結果は整数型なので,正は32767までしか扱えません。
そこでオーバーフローし,処理がとまります。
frm実習7.Print "32767+1=", int結果…は実行されません。
整数型では正は32767までしか扱えません。
なぜかというと整数型は2バイト,つまり16ビットだからです。
正は0111111111111111〜負は1000000000000000までしか表せないのです。
ためしに32767を2で割っていって2進数に直してみましょう。
0111111111111111になりますね。直し方はここでは割愛します。
「引き算」について考えましょう。
int結果 = 100 ― 1.1! …予想では98.9のあと,切り捨てられて98になりそうです。
が,答えは99です。
整数型では「小数」は扱えません。「丸め」が行われ,小さい桁は無視されます。
また「1.1!」は1.1という数値を単精度浮動小数点数で扱うことを宣言しています。
変数のところで説明したように変数は型を意識する必要があります。
では,生の数字はどうかというと型宣言文字を使用することによって数字もいろいろな型で扱えるのです。
たとえば1.1$なら1.1という文字列として,1.1@なら通貨として扱います。
普通はVBが自動的に判断するので,数値について通常は型宣言文字を付加していませんが。
frm
実習7.Print
"100 ― 1.1=", int結果…99が表示されます。
「掛け算」について考えましょう。
cur結果 = 100000000000000@ * 75 / 100…@なので通貨として扱うことを意味しています。
この例では,一見75/100で数値が小さくなるから演算できそうに見えますが,
75をかけたときに,通貨型が表現できる整数部15ケタを超えるためにオーバーフローになるわけです。
これは通貨型なのでオーバーフローしますが,@のかわりに#を使うと倍精度型なので大丈夫です。
また75/100ではなく,0.75をかけてもOKです。
frm実習7.Print "100000000000000@ * 75 / 100=", cur結果…オーバーフローが表示されます。
この実習7では,フォーム上に表示させる場合,次のような記述をします。
frm実習7.Print
これはfrm実習7というオブジェクト(ここではフォーム)に対して,なにかをPrint(表示)させなさい,という命令をしていまず。
このようにオブジェクトに対して命令を行うもの,動作させるものを「メソッド」といいます。(詳細は実習02を参照)
メソッドにはその命令のあとになにか記述するもの(パラメータという)とそうでないものがあります。
例えば,frm実習7.print だけでは「どのように」printするのかわかりませんから,そのあとに具体的に“HELLO”などが必要となります。
一方,frm実習7.clsは「frm実習7の画面を消去しなさい」という命令なので,「どのように」はいりません。
このようにメソッドの場合は,「なに」(オブジェクト)を「どのように」(パラメータ),「具体的な動作」させなさい,という形をとるか,「どのように」が必要ないか,どちらかの形をとって記述します。
VBでは,オブジェクトのあとにピリオドを打った時点で,そのオブジェクトに対するメソッドとプロパティがドロップダウンリストに表示されます。逆にいえば,このリストにないものは実行できません。
最初はメソッドとプロパティの区別が難しいと思いますが,基本的なプログラムならばそのうちのいくらかを覚えれば大丈夫です。
今後少しずつ増やしていきましょう。
作成者情報
Copyright © [VBSchool] All rights reserved.
最終更新日: 2001/10/08.