ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月30日(土) 00:01

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




新しいトピックを投稿する  トピックへ返信する  [ 7 件の記事 ] 
作成者 メッセージ
 記事の件名: クラスのOperator()
投稿記事Posted: 2006年10月07日(土) 15:48 
オフライン

登録日時: 2005年5月31日(火) 20:14
記事: 203
お住まい: 兵庫県
コード:
Class Boolean
Private
	Num As Long
Public
	Sub Boolean()
		Num=0
	End Sub

	Function Operator() As Long
		Return Num
	End Function

	Sub Operator= (Data As Long)
		If Data<>0 Then Num=-1 Else Num=0
	End Sub

	Function Operator== (Data As Long) As Long
		If Data<>0 Then Data=-1
		Return (Data And Num)
	End Function
End Class

#prompt
Dim a As Boolean
a=10
If Not a Then
	Print "True"
Else
	Print "False"
End If
「Booleanを作ったらいい」という投稿があり、興味があったので自作してみたものです(他の言語の仕様とは異なる部分があるかと思いますが)。
しかし、上のコードを実行したとき、なぜか表示結果は「True」になります。
「If Not a Then」 → 「If Not (a As Long) Then」
こうすると「False」を返してくれます。
ActiveBasicの仕様なのかもしれませんが、調査をお願いします。

_________________
[hira]
http://hira.hopto.org/


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年10月07日(土) 16:22 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
そもそも、TRUE値はABでは1だったかと。
コード:
#console
Print TRUE
Print FALSE
Sleep(-1)
で、Not関数が-1を掛けて1を引くように出来ているので、どうやら此処(TRUE値の決め方)にも問題がありそうです。


追記

・・・と書いた手前、参照先の文章を読んで随分意味の無いことやったなと思った。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年10月07日(土) 20:08 
オフライン

登録日時: 2005年5月31日(火) 17:14
記事: 231
お住まい: 茨城県
もしかすると、と思い、オペレータNotを定義してみると、コンパイルエラーになりませんでした。文法チェック時のバグとも考えられないこともないので、Notの文字を他の文字に変えてみたらコンパイルエラーになったので、Operator Notが定義できるようです。
コード:
Function Operator Not () As Boolean
End Function
が、いろいろ試してはみたのですが、このOperator Notが呼ばれることはありませんでした。

何かOperatorのNotにバグがありそうですね。


ところで、BOOL型に関してですが、コンパイラが1bitのBOOL型を提供したほうがいいんじゃないかとか思ったりもします。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年10月07日(土) 21:30 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
> コンパイラが1bitのBOOL型を提供したほうがいいんじゃないかとか思ったりもします。
多分、それ難しいと思います。
コンピュータが8bit単位でメモリ管理しているし、アセンブリ言語には1bit単位で管理する記述法はあるにはあるんですが、結局シフト演算が必要になったりと、あまり汎用的ではありません。
あと、1bit型の場合の四則演算の後処理の方法とか(Double型から1bit持ってくるのが面倒そうだなっていう理屈)
山本sが頑張ってくれればそれでいいんですが、クラス化して提供した方が移植性とか(例えば、どういう理屈か2bit型で管理したくなったとか。)も高いと思います。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


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

登録日時: 2005年5月31日(火) 09:34
記事: 141
お住まい: 北海道
ABの、ただの論理値のtrueは-1です。
コード:
Print 1 < 3 ' 「-1」と表示
「TRUE=1」である理由は、TRUEはあくまでWinAPIで定義された定数であり、それに合わせざるを得ないからでしょう。
(もし仮にABにBooleanが正式に導入されれば、C++みたいに小文字の「true」になるような気がします。)


※hiraさんに報告です。
コード:
Class Boolean
Private
    Num As Long
Public
    Sub Boolean()
        Num=0
    End Sub

    Function Operator() As Long
        Return Num
    End Function

    Sub Operator= (Data As Long)
        If Data<>0 Then Num=-1 Else Num=0
    End Sub

    Function Operator== (Data As Long) As Long
        If Data<>0 Then Data=-1
        Return (Data And Num)
    End Function
End Class

Dim a As Boolean
a=10

Dim x As Long
x = Not a
このようにすると、最後の行を実行したとき、「Return Num」の時点でアクセス違反が発生します。(AB5.00β4)

_________________
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年10月11日(水) 23:30 
オフライン

登録日時: 2005年5月31日(火) 20:14
記事: 203
お住まい: 兵庫県
ご報告ありがとうございます。
しかし x = Not (a As Long) とするとやはりうまく動作しているようですね。
ということは、やはりABのその辺りの実装が関係しているということでいいのでしょうか…。

_________________
[hira]
http://hira.hopto.org/


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年10月15日(日) 10:37 
オフライン

登録日時: 2005年8月23日(火) 00:15
記事: 161
お住まい: 沖縄県
TrueFalse の判定についてですが

True は言語により -1 , 1 , 0以外 のように色々癖がありますが、Falseは(基本的に) 0 です。

If文で簡単に調べることができます。
コード:
If  A  Then  Print "TRUE"  else  Print "FALSE"
Aに代入する値が0以外では TRUE になるのであまり意味がありません。

今回の問題は、If( a )Then で
コード:
    Function Operator() As Long
        Return Num
    End Function
の呼び出しが無いことだと思うのですが・・・


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

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


オンラインデータ

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


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

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