重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

今までC-Builderを使用しており、今回、会社の方針でVBでプログラムを書き始めた者です。
データーの比較を行いたいのですが、VBには文字定数と言う概念ありますか?
C ですと以下の様なコーディングが可能です。

iDataが65の時flagを1に、それ以外の時にflagを2にする。
int iData;

   i f( iData == 'A' )
flag = 1;
else
flsg = 2;

現在VBで if iDat = 65 then
flag =1
else
flag = 2
end if

と書いていますが、もしVBに文字定数の概念があれば65ではなく'A'の値と比べて居る様にコーディングしたいのです。
もちろんコメントに書いて置けば良いのですが方法があればそれを使って見たいと思っています。
若しくはVBにはその様な概念は無いとの回答でも構いません。
色々探しましたが、分かりませんでしたので、お分かりに成る方、宜しくご回答下さい。

A 回答 (7件)

#3のコードをコンパイルしたものを、ILSpyで逆コンパイルしてみました。


 Dim iTst As Integer = 65
 Dim iSts As Integer
 If iTst = 65 Then
  iSts = 0
 Else
  iSts = 1
 End If
Microsoft.VisualBasic.Asc("A"c)をちゃんと定数に展開してくれているみたいです。
    • good
    • 0
この回答へのお礼

再度のご回答ありがとうございます。

ASC()は関数の形をして居ますが、プレコンパイル形式なんでしょうかね。
ILSpyは使った事が無いので、これで構造を確認して、使えそうならこのコーディングにしてみます。

ありがとうございました。

お礼日時:2014/02/06 18:59

「Goに行ってはGoに従え」


他の言語の手法を無理に持ってこない、というのが、プログラミングのコツだと思っています。

Cでは、純粋な「文字」という型がありません。
char は整数の一つであって、「文字」ではありません。

VBでは、純粋な文字を表現するための型があります。数値で代用する必要がありません。
A という文字には、もともと番号なんてありません。65というのは、ASCIIで決めたものです。
「iDataの数値が"A"のASCIIコードだったら」という意味を明確に表わしているのは、VBの方では。


また、最近の言語は、いろんな最適化が行われます。
下手なチューニングは逆効果、ということもあります。

VBでは、数値も「オブジェクト」です。Cの数値のような高速性を求めてはいけません。


iDataも、CharやStringする方が簡単、とかはないですか?
    • good
    • 0

Keys列挙体だと'A'は判定できても'a'は判定できない気が……

    • good
    • 0

VB.netから言語仕様が変更されて文字の定数はなくなり列挙体となりました。


Keys 列挙体でヘルプを参照してください。

if iDat = Keys.A then
  flag =1
else
  flag = 2
end if
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

Keysに関してMSDNを読んでみましたが、これはキーボードのキーと1対1で設定されている定数で、私の目的とする定数とは異なるものでした。

ありがとうございました。

お礼日時:2014/02/06 18:56

こんな感じかな?



Dim iTst As Integer
Dim iSts As Integer

iTst = 65
If iTst = Microsoft.VisualBasic.Asc("A"c) Then
 iSts = 0
Else
 iSts = 1
End If
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

このコーディングでコンパイラーは通りました。
ただ、これはasc関数ですよね、定数では無いと思います。
すると、やはりVBには文字定数と言う概念は無いのかも知れませんね。
* 定数 そのまま値として使用出来る。この場合、値を変換する処理時間は不要。
 即ちコンパイラーが値を処理し、実行時には即値と成っているので処理時間は不要。
 関数 その値を処理して値を返す。この場合は値を変換するのに実行時に処理時間がかかる。

ありがとうございました。

お礼日時:2014/02/05 23:02

"A"cのように書きます。



MSDNでは,
文字型 (Char) (Visual Basic)
http://msdn.microsoft.com/ja-jp/library/7sx7t66b …
の「プログラミングのヒント」に,
> 型宣言文字。 1 文字のリテラル文字列に、リテラルの型文字 C を追加すると、Char データ型に変換されます。 Char には識別子の型文字はありません。
のように書かれています。
# 見つけにくいですが……。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ただ、残念ながら私が探しているコードとは異なる物と思われます。
試しにコーディングしてみた所、エラーと成ってしまいました。

Dim iTst As Integer
Dim iSts As Integer

iTst = 65
If iTst = "A"c Then
iSts = 0
    else
iSts = 1
End If

でIf iTst = "A"c Then の所に"演算子'='は、型'Integer'および型'Char'に対して定義されていません。"と表示されました。
上記コーディングでAの値はデシマルの65ですからiStsが0に設定出来ればよいのですが。

ありがとうございました。

お礼日時:2014/02/05 21:32

const のことを言ってます?


http://msdn.microsoft.com/ja-jp/library/cyxe49xw …
探しましたか。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

ただ、私が求めているのは Const では無い感じです。
Constは文字を定数に定義しているので、コーディング上は使えると思いますが、私のやりたいのは(VBに存在いるとして) コーディングして居る行にそのまま値を書く方法です。
多分ConstはC で言う#define AAA 5    // AAA を 5とする
と同じだと思います。Const A as integer 65 とすれば良いのでしょうけど、Aが65である根拠がこの行では表現出来ず、コメントで 65は 文字のAの値であると書かないと成らないと思います。

ありがとうございました。

お礼日時:2014/02/05 21:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!