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

⚡️Ruby、オブジェクト指向、デザイン / Ruby, OOP, Design

Takumi Shotoku
November 05, 2020

⚡️Ruby、オブジェクト指向、デザイン / Ruby, OOP, Design

Takumi Shotoku

November 05, 2020
Tweet

More Decks by Takumi Shotoku

Other Decks in Technology

Transcript

  1. 自己紹介 • 名前: 神速 • 会社: メドピア株式会社 • 所属: CTO室SRE

    • GitHub: @sinsoku (画像右上) • Twitter: @sinsoku_listy (画像右下) 2
  2. C言語でも(頑張れば)OOPできる1 #include <stdio.h> struct user_data { char name[20]; }; char

    *name(struct user_data *this) { return this -> name; } char first(struct user_data *this) { return this -> name[0]; } struct user_class { struct user_data obj; char *(*name)(struct user_data *this); char (*first)(struct user_data *this); }; int main() { struct user_data this = { "foo" }; struct user_class u = { this, name, first }; printf("%s\n", u.name(&this)); printf("%c\n", u.first(&this)); } 1 普通はやらないと思う 6
  3. Rubyだと簡単 class User attr_reader :name def initialize(name) @name = name

    end def first name[0] end end u = User.new("foo") puts u.name puts u.first 7
  4. 9

  5. 12

  6. ! 英語にして違和感がない3 クラスを名詞、メソッドを動詞にして違和感ないか? class User # user login def login;

    end # user search by word def search_by(word); end end メソッドが長い場合、クラスを抽出できる可能性がある。 3 Railsのメソッド名を参考にする事が多い。 17
  7. 脳内メモリを使わない foo -> bar -> buz -> piyo の ような呼び出しだと変数の値

    を覚えるのが大変。 class A def foo bar end def bar buz end def buz piyo end end 20