作成者 |
メッセージ |
|
|
bool/Boolean型を作って比較演算は常にそれを帰すようにすればいいのでは?
他のBasic言語ではVisualBasic,PureBasic,REALbasicにはBoolean型があり、
FreeBasicなどには無いようですね。
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からは離れていきそうですけどね。
あるいは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に対応させるのか、
どちらにしても混乱はますます深まりそうですね。
これは以前からある問題です。
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'にするか・・・
今気づいたけどABでは IF は 0 以外は入るみたいで、 Not は、数値に対して '(数値 + 1) * (-1)' する関係で
[code] 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 [/code]
こういうコードで見るとわかりやすいけど、
[code] Function Operator== (lpszText As LPSTR) As Long If lstrcmp(This, lpszText) = 0 Then Return TRUE End Function [/code]
これは
[code] Function Operator== (lpszText As LPSTR) As Long If lstrcmp(This, lpszText) = 0 Then Return -1 End Function [/code]
このほうが、前の'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つ出ます。
そこで、クラス定義をみて、'=='で試してもだめだったので報告しました。
そのつもりで検証してましたが、
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 |
|
|
|
|
|
> このソースで文法エラーが発生します。
正しくは以下のように書きます。
コード: 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
> このソースで文法エラーが発生します。 正しくは以下のように書きます。 [code]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[/code]
|
|
|
投稿記事 |
Posted: 2006年9月27日(水) 19:03 |
|
|
|
|
|
クラスの定義で
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
このソースで文法エラーが発生します。
クラスの定義で
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 |
|
|
|
|