Created
October 12, 2011 08:57
-
-
Save IrhAyaka/1280698 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
記録: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