ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月28日(日) 11:48

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




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - String Class比較演算
作成者 メッセージ
  記事の件名:   引用付きで返信する
bool/Boolean型を作って比較演算は常にそれを帰すようにすればいいのでは?
他のBasic言語ではVisualBasic,PureBasic,REALbasicにはBoolean型があり、
FreeBasicなどには無いようですね。
投稿記事 Posted: 2006年9月27日(水) 23:21
  記事の件名:   引用付きで返信する
あるいはCのようにビット演算子と論理演算子を分離するという手もあります。
And, Or, Notに相当する論理演算子は,C/C++のように0か非0かをオペランドに取り,BASIC風に結果を0か-1を返すという具合です。

ますますBASICからは離れていきそうですけどね。
投稿記事 Posted: 2006年9月27日(水) 22:53
  記事の件名:   引用付きで返信する
これは以前からある問題です。

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日(水) 20:26
  記事の件名:  追加  引用付きで返信する
今気づいたけど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日(水) 19:38
  記事の件名:   引用付きで返信する
そのつもりで検証してましたが、

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:08
  記事の件名:  Re: String Class比較演算  引用付きで返信する
> このソースで文法エラーが発生します。
正しくは以下のように書きます。
コード:
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:03
  記事の件名:  String Class比較演算  引用付きで返信する
クラスの定義で

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日(水) 18:42

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


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