Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コンストラクタ、知ってますよね?

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for okinari okinari
January 23, 2019

 コンストラクタ、知ってますよね?

Avatar for okinari

okinari

January 23, 2019
Tweet

More Decks by okinari

Other Decks in Technology

Transcript

  1. これもコンストラクタ class Point { num x, y, o; Point(this.x, this.y);

    Point.onlineX(this.x): this.y = 0 { print('On the X line.'); } Point.onlineY(this.y): this.x = 0 { print('On the Y line.'); } Point.origin(): this(0, 0); }
  2. コンストラクタの種類 (多すぎるよ…) ・Default constructors ・Named constructors ・Redirecting constructors ・Constant constructors

    ・Factory constructors ・Initializer list(※) ※コンストラクタの種類ではない 引用元:公式のLanguage Tourより https://www.dartlang.org/guides/language/language-tour#constructors
  3. class Point { int x, y; Point(this.x, this.y); Point.n(this.x, this.y,

    int n) { print(n); } } Default constructors ・コンストラクタに限り、  引数でインスタンス変数を  変更可能 ・追加の引数はもちろんOK ・内部で処理を書くのもOK
  4. Named constructors class Point { num x, y; Point(); Point.pConstructor()

    { this.x = 0; this.y = 0; } static Point pMethod() { Point point = new Point(); point.x = 0; point.y = 0; return point; } } void main() { // コンストラクタ Point.pConstructor(); // staticメソッド Point.pMethod(); } // どちらもPointオブジェクトが // 取得できる
  5. ・ファクトリーコンストラクタ ・常に新しくインスタンスを  作成するとは限らない場合、  factoryを使うべし?  - ファクトリーパターン?  - シングルトンパターン? ・Loggerなど…(例が思いつかん) シングルトンパターンと

    ファクトリーパターンの違いに混乱 … Factory constructors class Logger { final String name; static final Map<String, Logger> _cache = <String, Logger>{}; Logger._internal(this.name); factory Logger(String name) { if (_cache.containsKey(name)) { return _cache[name]; } else { final logger = Logger._internal(name); _cache[name] = logger; return logger; } } }
  6. Factory constructors factory Logger(String name) { if (_cache.containsKey(name)) { return

    _cache[name]; } else { final logger = Logger._internal(name); _cache[name] = logger; return logger; } }
  7. Factory constructors static Logger getInstance(String name) { if (_cache.containsKey(name)) {

    return _cache[name]; } else { final logger = Logger._internal(name); _cache[name] = logger; return logger; } }