Successfully reported this slideshow.
Your SlideShare is downloading. ×

Goのシンプルさについて

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 28 Ad
Advertisement

More Related Content

Recently uploaded (20)

Advertisement

Goのシンプルさについて

  1. 1. Goのシンプルさについて
  2. 2. 自己紹介 twitter : pospome blog :pospomeのプログラミング日記 職種 : サーバサイドエンジニア 興味  : クラス設計全般, DDD アイコン:羊じゃなくてポメラニアンです
  3. 3. Go からシンプルさを感じたことを話そうかと思います 時間限られているので サラッとしか説明できませんが・・・
  4. 4. ・package private ・コンストラクタ ・struct に static な method
  5. 5. ・package private ・コンストラクタ ・struct に static な method
  6. 6. 自分が触ったオブジェクト指向言語には アクセス修飾子として以下が用意されていた モジュールレベルの public, private クラスレベルの public, protected, private
  7. 7. 特にクラスレベルのアクセス修飾子は強力 クラスは自分自身のプロパティ、メソッドに対して 公開、非公開をコントロールできる
  8. 8. 仮に 1つのモジュールに大量のクラスを突っ込んでも 触られたくないものをクラスレベルで隠すことができるので ある程度の秩序は保たれる 最悪モジュールの依存関係、粒度は気にしなくても なんとかなる
  9. 9. なので、クラスをどう設計するかを重心する印象 普段モジュール同士の依存関係とか粒度とかって 考えて設計してますか?
  10. 10. 一方、Goにはパッケージレベルのアクセス修飾子しかない 同じパッケージであれば、 struct, function, value は触り放題
  11. 11. 仮に 1つのパッケージ内に大量の struct を突っ込むと 全てが触り放題になってしまう 触られたくないものが存在する場合、 パッケージを分けて package private にする必要がある
  12. 12. つまり、Go では パッケージレベルのアクセス修飾子だけ考えればいい パッケージの循環参照が禁止なこともあり、 パッケージレベルで 粒度、公開範囲、依存方向を考えるべき struct ベースで考えてもこれらは解決できない struct は保持する値と振る舞いの管理だけ考えればいい パッケージと struct で妙な責務の分離ができている
  13. 13. シンプルな点 package private しかない パッケージレベルのアクセス修飾子しか提供しない
  14. 14. ・package private ・コンストラクタ ・struct に static な method
  15. 15. Go にはコンストラクタがない NewXxxx() という function が コンストラクタのような役割を担っている 実質 static な factory method みたいな実装になる
  16. 16. 個人的にはコンストラクタよりも 実装パターンとしての static な factory method が好き 「どんなオブジェクトを生成するのか」 をメソッド名で表現できるから
  17. 17. シンプルな点 コンストラクタはないので function で実装する
  18. 18. ・package private ・コンストラクタ ・struct に static な method
  19. 19. Go では struct に static な method を持たせることができない 最初は違和感しかなかったし、 static method 欲しかったので、 無理やりそれっぽい実装したこともあった
  20. 20. ただ、最初に説明したとおり、 Go はパッケージを中心に考えた方がいい気がする 無理やり struct に static method を持たせることに 違和感があるのも事実
  21. 21. 今では大人しく function で実装しています
  22. 22. シンプルな点 struct に static method は生やせないので function で実装する
  23. 23. まとめ
  24. 24. ・package private しかない ・コンストラクタはない ・struct に static method はない 削ることによってシンプルになっている
  25. 25. 個人的には多機能な言語は魅力的だった 自分のやりたいことに対して 何かしらの適切な選択肢が存在する
  26. 26. ただ、Goを触ってみて、 多機能な言語は不適切な選択をしてしまうリスクも あると思った 例 「継承が悪いのではない、お前の使い方が悪いだけだ」
  27. 27. Go から学んだシンプルさは 他の言語を書くときにも役立つと思う いろんな言語を触ってみるって大事ですね (´・ω・`)
  28. 28. おわり

×