ページ 11

Dimと型

Posted: 2005年7月18日(月) 22:38
by BingoMan
C言語では

コード: 全て選択

int A,B;
とすると、A,Bともにint型になります。
しかしActiveBasicでは

コード: 全て選択

Dim A,B As String
としてもAがString型になりません。
このプログラムでもA,BともにString型になるようにしていただきたいです。

Re: Dimと型

Posted: 2005年7月19日(火) 01:09
by Mario2

コード: 全て選択

Dim A,B As String
> としてもAがString型になりません。
たしかこの場合、AはDouble型になっていると思います(確か、数字関係の関数だったような・・・)。

でも、確かに、上記のようにしてもAがString型になるようにして欲しいですね。(でも、昔から上記の使い方をしてプログラミングしている人には、後ろの書き方(型)によってはプログラムのバグを引き起こしてしまいそうですが・・・)
まぁ、上の書き方が、VBでも同じ動作((関数だけなら)何かの型になるの)なら、どうなんでしょうかね?(Cでは2つとも同じのになるみたいですけどね。)

Re: Dimと型

Posted: 2005年7月19日(火) 07:56
by イグトランス
> まぁ、上の書き方が、VBでも同じ動作((関数だけなら)何かの型になるの)なら、どうなんでしょうかね?(Cでは2つとも同じのになるみたいですけどね。)

> Dim A,B As String
たしかVB6までだとAは型が省略されたと扱われ、VB.Net以降だとString型になるのだったと思います。
たとえVB6まででもVBにはVariant型という何でもありの型があり、変数宣言でこのように型を省略したときにもこの型が使われるので、気づきにくいようです。
Variant型のないABでは問題にならないと思いますが。

Re: Dimと型

Posted: 2005年7月19日(火) 15:15
by hira
> たとえVB6まででもVBにはVariant型という何でもありの型があり、変数宣言でこのように型を省略したときにもこの型が使われるので、気づきにくいようです。
> Variant型のないABでは問題にならないと思いますが。

興味のある話題が出たので、VB6から入った人間からコメントさせていただきますと…
イグトランスさんの仰るとおり、VB6ではAは型が省略されたものとして扱われます。
しかし、正直バグの原因になりますよ(^^;
それにもかかわらず、(VBAを含めて)いい加減な本だったら平気で
Dim A,B As Long
のような書き方がされています(もちろん、AはVariantではLongになることを期待して書かれているのですが、VB6の仕様ではこれは間違いです)。

なお、ActiveBasicでは型省略はDouble型として扱われます。しかし、普通はDouble型変数を宣言するときも型省略などしないはずです(それより、Long型やString型で処理すべきところで型名を忘れてしまってハマることの方が多いです)。
例えば、
Dim A,B As String
ここで A="ActiveBasic" はアウトになります。AはDouble型だからです。
しかし、「省略したらDoubleになる」と知っている人がどれだけいるのかがそもそも疑問ですし、それを知らない人にとってはこれは難解な問題ということになってしまいます。
そのため、最初から型の省略をできないようにする、という手もありではないかと思いますが…。

それって、こういう風に書いた時に・・・

Posted: 2005年10月15日(土) 09:22
by konisi

コード: 全て選択


Dim (A,B) As String
って言う表記にした時にAとBの両方がString型になるようにしてもらえばいいんじゃないかな?今のところこの書き方は使えないけど。<<AB4.10.01

Posted: 2005年10月15日(土) 10:47
by イグトランス
Dim (A,B) As Stringよりは単に1行で1変数だけを宣言するスタイルを推奨すれば十分だと私は思います。

Posted: 2005年10月15日(土) 11:16
by konisi
確かにそうだが、どーも面倒なところがないだろうか。