記事一覧
ruby関数型プログラミング(3)lambda
★lambda
lambdaはProcとほぼ同じ働きがあります。lambdaとProc.newはどちらもProcクラスのインスタンス(手続きオブジェクト)を生成しますが、生成された手続きオブジェクトは、lambdaの生成する手続きオブジェクトのほうがよりメソッドに近い働きをするように設計されています。
具体的な違いは引数の扱いです。
lambdaのほうがより厳密です。引数の数が違っていると(メソ
ruby関数型プログラミング(2)yield
★yield
yieldは簡単に言うとブロックを起動せよ、と言う構文です。自分で定義したブロック付きメソッドの中で引数として受け取ったブロックを呼び出すときに使います。
yieldには値を渡せるのですが、その渡した値は、目的のブロックのブロック引数(|で囲まれたブロックの変数)に代入されます。yieldはブロック内で最後に評価した式の値を返します。
具体例は次の通りです。
# 独自のブロック付
ruby関数型プログラミング(1)Proc
rubyは関数型プログラミングをサポートする機能が用意されています。その代表的にものにProc(プロック)、yield(イールド)、lambda(ラムダ)があります。
★Proc
Procは簡単に言うと、ブロックを手続きとして扱うためのオブジェクトです。もっと簡単に言うと、Procはブロックそのものです。
コードを見た方が理解しやすいでしょう。
i = 0p = Proc.new { i+1
rubyオブジェクト指向(8)カプセル化
★アクセサメソッド
rubyのコードではattr_accessorというコードがよくでてきます。これは一種のインスタンス変数ですが、attr_accessor、attr_reader、attr_writerの3つがあり、インスタンス変数を読み書きするためのアクセサメソッドと言います。(値をセットするセッターと、値をゲットするゲッターという2つのメソッドをアクセサメソッドと言いま
rubyオブジェクト指向(7)変数
本来、変数はプログラミング言語の学習の最初の段階でやるのが常ですが、私は経験上、変数スコープという変数の有効範囲の考えがちゃんと理解できるようになるためにはメソッドやクラスの概念がある程度理解できるようになってからのほうがいいと思っています。
ですので、あえて変数は最後の章に持ってきました。
変数には大きく分けて、グローバル変数、インスタンス変数、クラス変数、ローカル変数の4つがあります。
rubyオブジェクト指向(6)公開レベル
クラスのなかで定義されたメソッドの外部からのアクセスを制限することができます。
public:どこからでもアクセス可能
private:定義されたクラス内でのみアクセス可能
protected:定義されたクラス内、あるいはそのクラスを継承した子クラスからのみアクセス可能
例えば、
class Hoge def hoge # 通常はデフォルトでpublicになる put
rubyオブジェクト指向(5)モジュール
rubyのモジュールは、オブジェクト間の横断的共通処理をまとめる機能です。どこからでも呼ばれる共通処理の置き場所と考えていいです。
★ミックスイン
クラスでは継承をサポートして、1つの親クラスを継承して複数の子クラスを作成することが出来ます。これによって同じような機能を持つクラスを別々にゼロから作成する手間を省きます。
ただこの継承は同類の上下関係を持ったクラス間で行
rubyオブジェクト指向(4)オーバーロード
結論から言うと、rubyにはオーバーロードの概念がないです。
オーバーロードとは、メソッドの名称を変えることなく引数の型、個数のみを変えて同名のメソッドを作ることができるオブジェクト指向プログラミングによくあるテクニックです。
オーバーロードの利点はメソッドの引数をその役割に応じて変えてやることで、同じような機能を持ったメソッドを同じ名前で定義できるので、コー
rubyオブジェクト指向(3)イニシャライザ
イニシャライザとはオブジェクトをインスタンス化するときに初回だけ呼び出される特別なメソッドです。オブジェクトを使う側でnewを呼び出したときに、そのオブジェクトの初期化として呼び出されます。
イニシャライザは省略可能です。名称はinitializeにします。メソッドと違う点は戻り値を定義できません。メソッドと同じ点は引数を定義できます。
class Hog
rubyオブジェクト指向(2)メソッドを呼び出す
★メソッドの呼び出し方法
クラスを使うということは、つまりそのクラスのメソッドを呼び出すことを意味します。クラスの処理はメソッドとして書かれているので、メソッドを呼び出すことがオブジェクト指向プログラミングの第一歩です。
メソッドの呼び出し方には基本的に3種類しかありません。
(1)クラスのインスタンスメソッドを呼び出す(クラスをインスタンス化して使う)
(2)継承関係にある親のメソッド
rubyオブジェクト指向(1)クラスとメソッドの関係
最初に、rubyによらずオブジェクト指向プログラミングをする上での基本知識から入ります。
★クラスとメソッドの関係を理解します
クラスを理解するために、まずオブジェクトとクラスの関係を説明します。
クラスとは、オブジェクトの振る舞いを定義するクッキーの型抜き器具のようなものです。
型抜きによって出来上がるクッキー自体がオブジェクトです。そして抜く行為をインスタンス化とい
rubyの基礎(11)定数
rubyでは大文字で始まる変数は定数の扱いです。
irb> PI = 3.14159265359=> 3.14159265359# 地球の円周irb> 2 * PI * 6371=> 40030.17359204378irb> PI = 3(irb):188: warning: already initialized constant PI(irb):186: warning: previous
rubyの基礎(10)メソッドの戻り値
rubyのメソッドの中では、戻り値を返すreturn文はなくてもいいのです。
def fact(n) if n == 0 1 else n * fact(n-1) endend
上のメソッドは再帰呼び出しで階乗の計算を行います。return文を省略して最後に評価された値が戻り値として返ります。
評価される値がないときは戻り値としてnilが返ります。
そうは言ってもre
rubyの基礎(9)キーワード引数
rubyのメソッドではキーワードという引数の補助的な表記方法があります。通常の引数の場合、引数が何を意味しているかわかりづらくなってしまいます。
irb> def sendmail(to,cc,from,title,body)irb> puts "to:#{to} cc:#{cc} from:#{from} title:#{title} body:#{body}"irb> end=>
rubyの基礎(8)範囲オブジェクト
rubyには範囲オブジェクトという便利な書き方があります。
irb> for i in (1..5)irb> puts iirb> end12345
最終の数値を含まない表現もあります。
irb> for i in (1...5)irb> puts iirb> end1234
これは英字でも使えます。
irb> for alphabet in ("a".."d") irb> put
rubyの基礎(7)ブロック
rubyではブロックという概念があるので、for文はほとんど使わないと言ってもいいぐらいです。
ブロックとは、一言で言えば、「引数としてメソッドに渡す処理のかたまり」です。ブロックの、do~endまでの範囲すべてが引数です。
または、{ } で囲む事でも同じ意味です。
例えば、
irb> 3.times do |i| x = i * 2irb> put