Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
コンストラクタ、知ってますよね?
Search
okinari
January 23, 2019
Technology
130
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
コンストラクタ、知ってますよね?
okinari
January 23, 2019
More Decks by okinari
See All by okinari
AWS Lambda(+API Gateway)でバイナリを扱う話
okinari
0
120
僕の家からリモコンが消えた話(NatureRemoについて)
okinari
0
90
スマートスピーカーのすゝめ
okinari
0
71
最近のNAS製品事情
okinari
0
110
Flutterで簡単なアプリを作ってみる
okinari
0
47
Webマーケティングとは?
okinari
0
55
エンジニアにも知ってほしいWebマーケティングの世界
okinari
2
410
データ収集のすゝめ
okinari
1
320
FlutterをWEBエンジニアが扱ってみたお話
okinari
0
480
Other Decks in Technology
See All in Technology
Railsのように考える: See through the Master
snoozer05
PRO
4
1k
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
360
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
130
現場で役立つ技術負債の効果的な返済方法
masuda220
PRO
9
4.5k
LTのテーマ どうきめてる?〜5つの型と私のやり方〜
yama3133
1
110
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
5
640
synctest時代のhttptest Go 1.27で変わるHTTPサーバテストの裏側 / go conference2026 synctest and httptest
budougumi0617
1
3k
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
Cloudflare Workers 向けアプリを C# で構築する ~WASM Native AOT への道~
nenonaninu
1
210
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
290
リアーキテクチャ後の障害ゼロを目指したShadow Testingの取り組み
nihonbuson
PRO
1
150
Featured
See All Featured
Amusing Abliteration
ianozsvald
1
300
The SEO Collaboration Effect
kristinabergwall1
1
570
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
240
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
830
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
530
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
350
Building Applications with DynamoDB
mza
96
7.2k
The Spectacular Lies of Maps
axbom
PRO
1
1k
Darren the Foodie - Storyboard
khoart
PRO
4
3.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Transcript
コンストラクタ 知ってますよね?
Self-introduction Name: okinari Twitter: @okinari Job: Web Engineer(Marketing Engineer) Interested:
Dart / Flutter / Elixir / Node.js
コンストラクタとは? オブジェクト指向のプログラミング言語で 新たなオブジェクトを生成する際に呼び出されて 内容の初期化などを行なう関数あるいはメソッドのことである。 引用元:Wikipedia https://ja.wikipedia.org/wiki/コンストラクタ あんまり説明いらないですよね …
こういうのを イメージしてますよね? ※スライド中のコードは 動かないかもしれないので、 ご注意ください。 コンストラクタと言えば… class Hoge { String
bar; Hoge(String foo) { this.bar = foo; } }
これもコンストラクタ 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); }
“もう笑うしかないよ
コンストラクタの種類 (多すぎるよ…) ・Default constructors ・Named constructors ・Redirecting constructors ・Constant constructors
・Factory constructors ・Initializer list(※) ※コンストラクタの種類ではない 引用元:公式のLanguage Tourより https://www.dartlang.org/guides/language/language-tour#constructors
・標準コンストラクタ ・要は普通のやつ Default constructors class Point { num x, y;
Point(num x, num y) { this.x = x; this.y = y; } }
class Point { int x, y; Point(this.x, this.y); Point.n(this.x, this.y,
int n) { print(n); } } Default constructors ・コンストラクタに限り、 引数でインスタンス変数を 変更可能 ・追加の引数はもちろんOK ・内部で処理を書くのもOK
・名前付きのコンストラクタ ・C++とかにはあるらしい? - 僕は初めて知りました ・呼び出し時、staticメソッド との見分けがつかない Named constructors class Point
{ num x, y; Point(this.x, this.y); Point.origin() { x = 0; y = 0; } }
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オブジェクトが // 取得できる
・別のコンストラクタへ リダイレクト ・リダイレクトなので、 追加の処理はできない ・別のコンストラクタと、 共通の処理がある場合は、 メソッドを使う必要がある Redirecting constructors class
Point { num x, y; Point(this.x, this.y); Point.alongXAxis(num x) : this(x, 0); }
・定数コストラクタ ・final以外のフィールドは 定義不可 Constant constructors class Point { static final
Point origin = const Point(0, 0); final num x, y; const Point(this.x, this.y); }
・ファクトリーコンストラクタ ・常に新しくインスタンスを 作成するとは限らない場合、 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; } } }
Factory constructors factory Logger(String name) { if (_cache.containsKey(name)) { return
_cache[name]; } else { final logger = Logger._internal(name); _cache[name] = logger; return logger; } }
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; } }
・staticメソッドで 同じように書けるような…? ・コンストラクタとの違いは (たぶん)呼び出し方だけ ・staticメソッドの場合、 メソッド名が必須なので、 名無しで表現するには、 factoryコンストラクタが必須 - 通常のコンストラクタ風
Factory constructors void main() { Logger loggerFactory = Logger('name'); Logger loggerStaticMethod = Logger.getInstance('name'); }
Initializer list ・初期化リスト? ・変数を初期化する ・右辺に同じクラスの メソッドを使う場合、 staticメソッドのみ使用可 ・finalフィールドを宣言時と コンストラクタ引数以外で 初期化できる方法
class Point { int x, y; Point(Map<String, num> json) : this.x = json['x'], this.y = json['y'] { print('call Point($x, $y);'); } }
まとめ(感想) ・コンストラクタの書き方はたくさんあるから 注意しよう! ・(Flutterの場合)オブジェクト生成にて画面を 構築するので、その簡易化が目的(かも?) ・それにしても多すぎない…?
Thanks! ご質問などあれば、 下記までお願いします。 @okinari (Twitter)