標準では未定義の演算子の導入に関する提案

今の言語仕様やライブラリはココが足りないんじゃ…、エディタや周辺ツールにこんな機能が必要なのでは…!?このような要望、具体的な提案などがありましたら、こちらのフォーラムをご活用ください。
返信する
メッセージ
作成者
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

標準では未定義の演算子の導入に関する提案

#1 投稿記事 by konisi »

下のような、演算子の追加定義方法を思いついたんですが、どうでしょうか?

定義の書式

Sub/Function Operator "NewOperatorName" (...) [As ...] {[priority:"OldOperatorName"],[unit:Direction]}

NewOperatorName ・・・演算子の名前
OldOperatorName・・・演算の優先順位が等価である演算子の名前。省略時:As(例)
Direction・・・演算子の結合性。値:LEFT,RIGHT 省略時:LEFT(例)
OldOperatorNameが代入演算子系の場合は必ず省略or無視(例)

例(これだけだと導入するだけ無駄に見えるが、応用範囲はかなり広いであろう。)

コード: 全て選択

Class Foo
Public
    a As Long

    Sub Operator "addto" (foo As Foo) {priority:"+="}
        a += foo.a
    End Sub
End Class

#console

Dim A As Foo,B As Foo
A.a=1
B.a=3
A addto B

Print A.a
Sleep(10000)
例2

コード: 全て選択


Class Foo
Public
    x As Double
    y As Double

    Sub Operator "span" (cita As Double) {priority:"*="}
        Dim sx As Double,sy As Double
        Dim x2 As Double,y2 As Double
        cita*=Math.PI()/180
        sx=Math.Cos(cita)
        sy=Math.Sin(cita)
        x2=x*sx-y*sy
        y2=x*sy+y*sx
        x=x2
        y=y2
    End Sub
End Class

#console

Dim A As Foo
A.x=1
A.y=0
A span 45
Print A.x
Print A.y
Sleep(10000)
例とかは今手打ちで書いたのでおかしいところもあると思います。指摘してやってください。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
tak
記事: 162
登録日時: 2005年5月31日(火) 07:49

#2 投稿記事 by tak »

新しい種類の演算子の定義は、コンセプトとしては有用なものであることは認めます。
ただそれを実装するのにどれだけ手間がかかるか想像してみてください。

もちろんコンパイラを制作しているのは山本さんなので、山本さんが出来ると仰れば反対する理由はありませんが。
返信する