Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
大切な名前 introduction 公開版 株式会社インフィニットループ仙台支社 中野 明
Slide 2
Slide 2 text
もくじ 1. 自己紹介 2. テーマ 3. ダメコードとは 4. コードを読む 5. 命名 6. 最後に 7. 予定 8. 会社より
Slide 3
Slide 3 text
1. 自己紹介 名前 : 中野 明 現在 所属 : インフィニットループ仙台支社 (1 年 ) 業務 : スマホゲーのサーバ開発 (PHP) 過去 業務 : ゲーム開発 (10 年 ) コンシューマ・スマホ・ガラケー 趣味 お菓子づくり、レザークラフト 最近ボビンレース始めました
Slide 4
Slide 4 text
2. テーマ テーマ「大切な名前」
Slide 5
Slide 5 text
2. テーマ テーマ「大切な名前」 ● レビューで名前を指定することが多い ( 若干過剰 ) ● なぜ、自分がそこにこだわるのか整理したい
Slide 6
Slide 6 text
2. テーマ テーマ「大切な名前」 ● レビューで名前を指定することが多い ( 若干過剰 ) ● なぜ、自分がそこにこだわるのか整理したい 「俺は間違ってない!」と叫びたい
Slide 7
Slide 7 text
2. テーマ テーマ「大切な名前」 ● レビューで名前を指定することが多い ( 若干過剰 ) ● なぜ、自分がそこにこだわるのか整理したい 「俺は間違ってない!」と叫びたい 今回はテーマ説明のみです
Slide 8
Slide 8 text
3. ダメコードとは ところで… ● いわゆるダメコードに出会ったことがある?
Slide 9
Slide 9 text
3. ダメコードとは ところで… ● いわゆるダメコードに出会ったことがある? ● 自分のコードはまずまず?
Slide 10
Slide 10 text
3. ダメコードとは ところで… ● いわゆるダメコードに出会ったことがある? ● 自分のコードはまずまず? ● では、なぜ、ダメコードはなくならない?
Slide 11
Slide 11 text
3. ダメコードとは コードの使われ方 ● 新規 (write) ----- 以下の作業が多数 ----- ● 修正 (read, write) ● 追加 (read, write) ● 削除 (read, delete) ● レビュー (read)
Slide 12
Slide 12 text
3. ダメコードとは つまり ● 読むことの方が多い ● が、書いた時に読まれることを意識していない ➔ アウトプットを作り上げている ➔ 書いている間は良いコード ● 読まれた瞬間にダメコードが発生する
Slide 13
Slide 13 text
3. ダメコードとは つまり ● 読むことの方が多い ● が、書いた時に読まれることを意識していない ➔ アウトプットを作り上げている ➔ 書いている間は良いコード ● 読まれた瞬間にダメコードが発生する 「読まれなければどうということは無い!!」
Slide 14
Slide 14 text
3. ダメコードとは つまり ● 読むことの方が多い ● が、書いた時に読まれることを意識していない ➔ アウトプットを作り上げている ➔ 書いている間は良いコード ● 読まれた瞬間にダメコードが発生する 「読まれなければどうということは無い!!」 必ず読まれます。
Slide 15
Slide 15 text
4. コードを読む コードを読むとは ? ● 処理単位での意味の理解 ● 問題になりそうな箇所を把握する ➔ (I/O, DB, GPU, マルチスレッド ) ● 自分の処理をどこに置くか
Slide 16
Slide 16 text
4. コードを読む コードを読むとは ? ● 処理単位での意味の理解 ● 問題になりそうな箇所を把握する ➔ (I/O, DB, GPU, マルチスレッド ) ● 自分の処理をどこに置くか 行動のためのヒントを探す
Slide 17
Slide 17 text
4. コードを読む どうやってヒントを読み取るか ● 名前 ➔ 名前から処理を想像する ● クラス構造 ➔ クラスのつくりから責務を想像する ● コードブロック ➔ コードのまとまりから流れを想像する
Slide 18
Slide 18 text
4. コードを読む どうやってヒントを読み取るか ● 名前 ➔ 名前から処理を想像する ● クラス構造 ➔ クラスのつくりから責務を想像する ● コードブロック ➔ コードのまとまりから流れを想像する いろいろある!
Slide 19
Slide 19 text
5. 命名 なぜ名前か ● 一番、目につきやすい対象 ● 簡単に変えていける ● 影響範囲が少ない
Slide 20
Slide 20 text
5. 命名 なぜ名前か ● 一番、目につきやすい対象 ● 簡単に変えていける ● 影響範囲が少ない 名前の改善から次の改善がみつかる ... こともある
Slide 21
Slide 21 text
5. 命名 要は見やすければいいんでしょ ● 単純な名前つけてるよ ● bool を返すメソッドは Is でいいんでしょ ●やっていることは全部書いているよ
Slide 22
Slide 22 text
5. 命名 要は見やすければいいんでしょ ● 単純な名前つけてるよ ➔ 意味を持たない Get/Service/Manager が氾濫してません? ● bool を返すメソッドは Is でいいんでしょ ➔ そのメソッドはもっと大きなことしてません ? ●やっていることは全部書いているよ ➔ 説明過多になっていません?
Slide 23
Slide 23 text
5. 命名 要は見やすければいいんでしょ ● 単純な名前だけで構成されている Get だけで意図を表現できる? function version() { $database = DataBase::get(); $handler = $database->getHandler('environment'); $entity = $handler->getEntity(); return $entity->getVersion(); }
Slide 24
Slide 24 text
5. 命名 要は見やすければいいんでしょ ● 単純な名前だけで構成されている Get だけで意図を表現できる? function version() { $database = DataBase::instance(); $handler = $database->createHandler('environment'); $entity = $handler->fetchEntity(); return $entity->getVersion(); }
Slide 25
Slide 25 text
5. 命名 要は見やすければいいんでしょ ● 名前以上のことをやっている bool うんぬんより検証作業の意味合いが強い class Entity { private $id; public function isEnable() { return STATUS_OK === DataBase::instance() ->createHandler('entity') ->fetch($this->id) ->status(); } }
Slide 26
Slide 26 text
5. 命名 要は見やすければいいんでしょ ● 名前以上のことをやっている bool うんぬんより検証作業の意味合いが強い class Entity { private $id; public function validate() { return STATUS_OK === DataBase::instance() ->createHandler('entity') ->fetch($this->id) ->status(); } }
Slide 27
Slide 27 text
5. 命名 要は見やすければいいんでしょ ● やたらと説明的 ( 引数被り / 冗長 ) 引数で説明できません? function createBurgerFromBreadAndCheese( Bread $bread, Cheese $cheese ){ /* 処理いろいろ */ }
Slide 28
Slide 28 text
5. 命名 要は見やすければいいんでしょ ● やたらと説明的 ( 引数被り / 冗長 ) 引数で説明できません? function createBurger( Bread $bread, Cheese $cheese ){ /* 処理いろいろ */ }
Slide 29
Slide 29 text
5. 命名 要は見やすければいいんでしょ ● 内部ロジックの露出 モンスターの持つ処理としてメモリ解放はどうでしょう ? class Monster { private $buffer; public function freeMemory() { Memory::free($this->buffer); } }
Slide 30
Slide 30 text
5. 命名 要は見やすければいいんでしょ ● 内部ロジックの露出 モンスターの持つ処理としてメモリ解放はどうでしょう ? class Monster { private $buffer; public function destroy() { Memory::free($this->buffer); } }
Slide 31
Slide 31 text
5. 命名 いろいろな意見 ● 名前考えるのだるくて ● パッと見のまとまりを大事にしたい ● チームルールと違うしね・・・
Slide 32
Slide 32 text
5. 命名 いろいろな意見 ● 名前考えるのだるくて ➔ 変な名前だと読む方はもっとだるいので ● パッと見のまとまりを大事にしたい ➔ 違う処理まで同じに見えるのは危険 ● チームルールと違うしね・・・ ➔ 自分で一から考えてみませんか?
Slide 33
Slide 33 text
6. 最後に 本読めばいいじゃない ● リーダブルコードとか ● コードコンプリートとか ● リファクタリング本とか
Slide 34
Slide 34 text
6. 最後に 本読めばいいじゃない ● リーダブルコードとか ● コードコンプリートとか ● リファクタリング本とか いっぱい出ているということはそれだけ需要がある
Slide 35
Slide 35 text
6. 最後に 本読めばいいじゃない ● リーダブルコードとか ● コードコンプリートとか ● リファクタリング本とか いっぱい出ているということはそれだけ需要がある 自分がしゃべったっていいじゃないか !!
Slide 36
Slide 36 text
7. 予定 どんな話するの? ● 明示的な名前 ● 名前から構造をつくる ● 階層による名前の変化 ● 名前の省略
Slide 37
Slide 37 text
7. 予定 どんな話するの? ● 明示的な名前 ● 名前から構造をつくる ● 階層による名前の変化 ● 名前の省略 注 : あくまでも予定 !
Slide 38
Slide 38 text
7. 予定 どんな話するの? ● 明示的な名前 ● 名前から構造をつくる ● 階層による名前の変化 ● 名前の省略 どうぞお付き合いください !!
Slide 39
Slide 39 text
8. 会社紹介 インフィニットループ仙台支社
Slide 40
Slide 40 text
8. 会社紹介 インフィニットループ仙台支社 炊飯器が導入されました!
Slide 41
Slide 41 text
8. 会社紹介 インフィニットループ仙台支社ではプログラマを募集してい ます。ぜひお声がけください! 是非、同じ釜の飯を食いましょう!!