Skip to content

Instantly share code, notes, and snippets.

@IrhAyaka
Created October 12, 2011 08:57
Show Gist options
  • Save IrhAyaka/1280698 to your computer and use it in GitHub Desktop.
Save IrhAyaka/1280698 to your computer and use it in GitHub Desktop.
記録:Kたくさん
******************
** なおとさんから
リファクタなどについて
- 財務のコードを参考に
- 問題のあるコードと改善後のコードを比較
** メモメモ
- 無駄なロジックを削除してきれいに!
- 余計な条件分岐をすっきりさせよう
- 開発ツールが診断してくれる。ツールの指示に従おう!
- *最低限の修正 <> 手抜き* !
** 前回の続き
- 前回どこまでやったか?
- 変数、関数、名前空間
** 今日は来てなかった人と新しくきた人のために関数から始めましょう
関数
- 値を外から受けとって、計算して値を書き込んだり戻したりします
- 外から値を受け取るとは、グローバル変数や関数の引数のこと
- 関数は「値(データ)」を持ってない
#+begin_src ruby
def kansu(aaa)
return aaa + 1
end
#+end_src
** 名前空間
同じ関数名だと上書きしたら大変
- VB や Java や C# はコンパイルエラーになるけど
- Ruby は普通に上書きできてこわい
- 同じ名前を使うには名前空間を分けます
名前空間があれば、
#+begin_src text
名前空間A 名前空間B
+----------+ +----------+
| Kansu | | Kansu |
+----------+ +----------+
#+end_src
** Ruby で名前空間を使ってみる
名前空間をつくるために module を使う。 Hoge, Huga それぞれに kansu 関数をつくる。
#+begin_src ruby
module Hoge
def self.kansu(aaa) # self はあんま気にしないで
return aaa + 1
end
end
module Huga
def self.kansu(aaa)
return aaa + 2
end
end
#+end_src
** 名前空間から関数を呼び出してみる
#+begin_src ruby
Hoge.kansu(1)
=> 2
Huga.kansu(1)
=> 3
#+end_src
同じなまえの関数をつかえる。
** 他の名前空間から関数をとってくる
#+begin_src ruby
kansu(1)
NameError: undefined local variable or method `kansu'
#+end_src
Hoge を include してあげると
#+begin_src ruby
include Hoge
kansu(1)
=> 2
#+end_src
使えるようになる。これが import とか using とかにあたる。(厳密には違うけどそんな感じ)
** クラス
クラスは名前空間 (module) の派生みたいなもの。
#+begin_src ruby
class Ningen
def initialize(name)
@name = name
end
def name # <= これ、関数ではなくメソッド
return @name
end
end
#+end_src
** メソッドを呼ぶには new する
「オブジェクトにする」とか「インスタンス化する」とか。
インスタンス? コンピュータ上で計算できる状態にある処理やデータ。
だいたいはメモリにのっている。
#+begin_src ruby
kinjo = Ningen.new("kinjo") # new して kinjo にする
naotos = Ningen.new("naotos") # new して naotos にする
kinjo.class
=> Ningen # kinjo は Ningen
naotos.class
=> Ningen # naotos は Ningen
kinjo.name() # kinjo の name メソッドを呼ぶ
=> "kinjo"
naotos.name() # naotos の name メソッドを呼ぶ
=> "naotos"
#+end_src
** ちなみに厳密なオブジェクト指向では、
「メソッドを呼ぶ」ではなく「メッセージを送信する」。
多分、古いぶっとい本とかにそう書かれていたハズ。
Ruby から厳密なオブジェクト指向の匂いがする。
#+begin_src ruby
kinjo.send("name") # こういう風に書ける
=> "kinjo"
#+end_src
Ruby はメソッドがあるかどうか調べるとき、
#+begin_src ruby
kinjo.respond_to?("name") # resopnd to? = 応答できる?
#+end_src
** まとめ
- 関数
- 外から来た値を処理して戻す
- 直接呼べます
- 名前空間
- 関数をグループにするためのもの
- (こんかいは関数についての名前空間を説明)
- (他にも名前空間にはいろいろありあすが、また今度)
- クラス
- 名前空間の一種
- new すると、
- クラスからいろんなデータを持つインスタンス(オブジェクト)を作成できる
- メソッドを呼べるようになる
- メソッド
- インスタンスから呼べる
- (メソッドを呼ぶことをメッセージ送信と表現したりする)
- オブジェクト(インスタンス)でもっている値(データ)を処理して戻す、
- あるいはオブジェクトの値を書き換える
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment