見出し画像

TOPOS-Ξ を学ぼう!その7「他人の手柄も横取りするべき」オープンソースはジャイアニズム?

「他人のふんどしで楽して仕事がしたい。さらにコピペみたいなダサいこともしたくない。」
TOPOS-Ξでは、ファイル間の参照と依存関係を管理するための仕組みがあります。`import`と`export`の機能を使用して、他のファイルで定義された`space`、`shape`、`mapping`を参照できます。

実際の例で見てみましょう:

// blackboard.xi
space Blackboard {
    properties {
        continuous: Topology<Boolean> = true
        dimension: Topology<Number> = 2
    }

    shape Surface {
        properties {
            width: Number
            height: Number
            clean: Boolean = true
        }
        
        // エクスポートする機能を明示
        export mapping clean_surface() {
            properties {
                continuous: Boolean = true
            }
            
            path {
                verify_state ->
                perform_cleaning ->
                verify_cleanliness
            }
        }
    }

    // このshapeをエクスポート
    export shape Content {
        properties {
            text: String
            position: Vector2D
        }
    }
}
// classroom.xi
// 他のファイルからの参照
import { Surface, Content } from "blackboard.xi"

space Classroom {
    properties {
        continuous: Topology<Boolean> = true
        dimension: Topology<Number> = 3
    }

    // インポートしたSurfaceを使用
    shape ClassroomBoard extends Surface {
        properties {
            mounted: Boolean = true
            content: Collection<Content>  // インポートしたContentを使用
        }
        
        mapping write_content(text: String, pos: Vector2D) {
            path {
                verify_position(pos) ->
                clean_surface() ->       // インポートした機能を使用
                add_new_content(text, pos)
            }
        }
    }
}

重要なポイント:

  1. エクスポートの方法

    • `export`キーワードを使用

    • shape、mapping、typeなどをエクスポート可能

    • 部分的なエクスポートも可能

  2. インポートの方法

    • `import`文をファイル先頭で使用

    • 中括弧`{}`で必要な要素を指定

    • 相対パスまたは絶対パスでファイルを指定

  3. 依存関係の管理

    • 循環参照を避ける

    • 明確な依存関係の階層を維持

    • バージョン互換性の考慮

このように、ファイルを適切に分割し、必要な機能を参照することで、より管理しやすく、再利用可能なコードを書くことができます。


汎用性の高い写像をたくさん作って(他人様から譲り受けて)、組み立てる。あぁ、楽しいな、クラフトライフ!