万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    Boo Language Advent Calendar 2012 15日目 Title:「演算子のオーバロード」

    URL: http://atnd.org/events/34622
    今日で15日目ですね。あと10日でクリスマスですよ。

    UnityScriptでもできるそうなので、Booで演算子オーバーロードしたいと思います。
    何かといいますと、
    あるクラスの2つの値が格納された時に、
    そのインスタンス同士で演算をしたいのです。
    「+」や「-」などで計算を行えるようにしたいということです。
    例えばUnityのVector3の値+Vector3の値ができるようなものです。

    UnityScriptでのコードはこちらを参考にしました
    http://d.hatena.ne.jp/tanku/20120606/1338999149

    C#のドキュメントはこちらにあります
    http://msdn.microsoft.com/en-us/library/ms229032%28VS.80%29.aspx

    まずOverloadOperatorクラスを作ります。

    ・OverloadOperator.boo

    class OverloadOperator:
        public mA as int = 0
        public mB as int = 0
    
        def constructor(a as int, b as int):
            mA = a
            mB = b
    
        static def op_Addition(a as OverloadOperator, b as OverloadOperator):
            return OverloadOperator(a.mA + b.mA, a.mB + b.mB)
    

    op_Additionが足し算を実現するものです。

    実際の計算はこちらです。参考にしたサイトをBooにポートしただけですが。

    import UnityEngine
    
    class Test (MonoBehaviour):
    
        def Start ():
            a = OverloadOperator(10, 200)
            b = OverloadOperator(30, 20)
            c = a + b
            Debug.Log("a:"+a.mA+","+a.mB + " b:"+b.mA+","+b.mB + " c:"+c.mA+","+c.mB)
    

    こうするとログに
    a:10,200 b:30,20 c:40,220

    がでるはずです。
    a + bが実現できて、cの値にはaとbのそれぞれの2値が足し算できるってわけです。
    引き算はop_Subtractionを使ったりいろいろあるので試したら面白いと思います。

    では、また次の方へ!次も僕なら例外処理とかクロージャやりますよ。