ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月28日(木) 21:05

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 7 件の記事 ] 
作成者 メッセージ
 記事の件名: String Class比較演算
投稿記事Posted: 2006年9月27日(水) 18:42 
オフライン

登録日時: 2005年5月31日(火) 09:39
記事: 35
お住まい: 岐阜
クラスの定義で

Function Operator== (lpszText As LPSTR) As Long
If lstrcmp(This, lpszText) = 0 Then Return TRUE
End Function

がありますが、

Dim a As String
a = "2"
If a == "1" Then
MsgBox 0, "test", "a", MB_OK
End If
End

このソースで文法エラーが発生します。


通報する
ページトップ
 記事の件名: Re: String Class比較演算
投稿記事Posted: 2006年9月27日(水) 19:03 
オフライン

登録日時: 2005年5月31日(火) 18:51
記事: 473
お住まい: 新潟県
> このソースで文法エラーが発生します。
正しくは以下のように書きます。
コード:
Function Operator== (lpszText As LPSTR) As Long
	If lstrcmp(This, lpszText) = 0 Then Return TRUE
End Function

Dim a As String

	a = "2"
	If a = "1" Then
		MsgBox 0, "test", "a", MB_OK
	End If

	End


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年9月27日(水) 19:08 
オフライン

登録日時: 2005年5月31日(火) 09:39
記事: 35
お住まい: 岐阜
そのつもりで検証してましたが、

Dim a As String
a = "1"
If a = "1" Then
MsgBox 0, "test", "a", MB_OK
End If
If Not(a = "1") Then
MsgBox 0, "test", "a", MB_OK
End If
End

これを実行するとメッセージボックスが2つ出ます。
そこで、クラス定義をみて、'=='で試してもだめだったので報告しました。


通報する
ページトップ
 記事の件名: 追加
投稿記事Posted: 2006年9月27日(水) 19:38 
オフライン

登録日時: 2005年5月31日(火) 09:39
記事: 35
お住まい: 岐阜
今気づいたけどABでは IF は 0 以外は入るみたいで、
Not は、数値に対して '(数値 + 1) * (-1)' する関係で
コード:
If 0 Then
	MsgBox 0, "test", "0", MB_OK '非表示
End If
If 1 Then
	MsgBox 0, "test", "1", MB_OK '表示
End If
If -1 Then
	MsgBox 0, "test", "-1", MB_OK '表示
End If
If Not(0) Then
	MsgBox 0, "test", "Not(0)", MB_OK '表示
End If
If Not(1) Then
	MsgBox 0, "test", "Not(1)", MB_OK '表示
End If
If Not(-1) Then
	MsgBox 0, "test", "Not(-1)", MB_OK '非表示
End If
こういうコードで見るとわかりやすいけど、
コード:
Function Operator== (lpszText As LPSTR) As Long 
    If lstrcmp(This, lpszText) = 0 Then Return TRUE 
End Function 
これは
コード:
Function Operator== (lpszText As LPSTR) As Long 
    If lstrcmp(This, lpszText) = 0 Then Return -1 
End Function 
このほうが、前の'String型'との互換性が強いかもしれません。
もしくはTRUEの数値を'-1'にするか・・・


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年9月27日(水) 20:26 
オフライン

登録日時: 2005年5月31日(火) 10:52
記事: 264
お住まい: 高知
これは以前からある問題です。

ActiveBasicが真偽値として-1と0を使うのに対し
C言語などのTRUEやFALSEは1と0に対応していますよね。

situmonさんのご指摘どおりActiveBasicのNot算は前者の方に従って
計算されますからTRUEが戻り値として返ると面倒なことになります。


新たにBASIC_TRUEとBASIC_FALSEのようなものを定義して区別するか、
Cのようにtrueとfalseのようなものを定義してそちらを-1と0に対応させるのか、
どちらにしても混乱はますます深まりそうですね。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年9月27日(水) 22:53 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
あるいはCのようにビット演算子と論理演算子を分離するという手もあります。
And, Or, Notに相当する論理演算子は,C/C++のように0か非0かをオペランドに取り,BASIC風に結果を0か-1を返すという具合です。

ますますBASICからは離れていきそうですけどね。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年9月27日(水) 23:21 
bool/Boolean型を作って比較演算は常にそれを帰すようにすればいいのでは?
他のBasic言語ではVisualBasic,PureBasic,REALbasicにはBoolean型があり、
FreeBasicなどには無いようですね。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 7 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[19人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean