Taka

Rubyを人に教えている仕事をしています。誰かのお役に立てられればと思って。

Taka

Rubyを人に教えている仕事をしています。誰かのお役に立てられればと思って。

マガジン

  • はじめてのRuby

    初心者がRubyプログラミングを始めるにあたって、何からやったらいいのか、どう進めたらいいのか、そんなゼロからスタートする人に向けて書いていきます。

最近の記事

ruby関数型プログラミング(3)lambda

★lambda lambdaはProcとほぼ同じ働きがあります。lambdaとProc.newはどちらもProcクラスのインスタンス(手続きオブジェクト)を生成しますが、生成された手続きオブジェクトは、lambdaの生成する手続きオブジェクトのほうがよりメソッドに近い働きをするように設計されています。 具体的な違いは引数の扱いです。 lambdaのほうがより厳密です。引数の数が違っていると(メソッドのように)エラーになります。 Procで書く例 b1 = Proc.ne

    • ruby関数型プログラミング(2)yield

      ★yield yieldは簡単に言うとブロックを起動せよ、と言う構文です。自分で定義したブロック付きメソッドの中で引数として受け取ったブロックを呼び出すときに使います。 yieldには値を渡せるのですが、その渡した値は、目的のブロックのブロック引数(|で囲まれたブロックの変数)に代入されます。yieldはブロック内で最後に評価した式の値を返します。 具体例は次の通りです。 # 独自のブロック付きメソッドの定義(与えられたブロックに1と2を渡して実行def hoge yie

      • ruby関数型プログラミング(1)Proc

        rubyは関数型プログラミングをサポートする機能が用意されています。その代表的にものにProc(プロック)、yield(イールド)、lambda(ラムダ)があります。 ★Proc Procは簡単に言うと、ブロックを手続きとして扱うためのオブジェクトです。もっと簡単に言うと、Procはブロックそのものです。 コードを見た方が理解しやすいでしょう。 i = 0p = Proc.new { i+1 }i = 10p.call # => 11i = 100p.call # =>

        • rubyオブジェクト指向(8)カプセル化

          ★アクセサメソッド rubyのコードではattr_accessorというコードがよくでてきます。これは一種のインスタンス変数ですが、attr_accessor、attr_reader、attr_writerの3つがあり、インスタンス変数を読み書きするためのアクセサメソッドと言います。(値をセットするセッターと、値をゲットするゲッターという2つのメソッドをアクセサメソッドと言います) 引数には、インスタンス変数名をシンボルで指定します。複数指定できます

        ruby関数型プログラミング(3)lambda

        マガジン

        • はじめてのRuby
          22本

        記事

          rubyオブジェクト指向(7)変数

          本来、変数はプログラミング言語の学習の最初の段階でやるのが常ですが、私は経験上、変数スコープという変数の有効範囲の考えがちゃんと理解できるようになるためにはメソッドやクラスの概念がある程度理解できるようになってからのほうがいいと思っています。 ですので、あえて変数は最後の章に持ってきました。 変数には大きく分けて、グローバル変数、インスタンス変数、クラス変数、ローカル変数の4つがあります。各々は、変数名にプレフィックス(先頭に記号を付けること)を付与することで、そ

          rubyオブジェクト指向(7)変数

          rubyオブジェクト指向(6)公開レベル

          クラスのなかで定義されたメソッドの外部からのアクセスを制限することができます。 public:どこからでもアクセス可能 private:定義されたクラス内でのみアクセス可能 protected:定義されたクラス内、あるいはそのクラスを継承した子クラスからのみアクセス可能 例えば、 class Hoge def hoge # 通常はデフォルトでpublicになる puts "hoge" end private # これ以降はプライベートメソッド

          rubyオブジェクト指向(6)公開レベル

          rubyオブジェクト指向(5)モジュール

          rubyのモジュールは、オブジェクト間の横断的共通処理をまとめる機能です。どこからでも呼ばれる共通処理の置き場所と考えていいです。 ★ミックスイン クラスでは継承をサポートして、1つの親クラスを継承して複数の子クラスを作成することが出来ます。これによって同じような機能を持つクラスを別々にゼロから作成する手間を省きます。 ただこの継承は同類の上下関係を持ったクラス間で行うもので、別の異なった種類のクラスが継承によって共通化する部分を一箇所に持た

          rubyオブジェクト指向(5)モジュール

          rubyオブジェクト指向(4)オーバーロード

          結論から言うと、rubyにはオーバーロードの概念がないです。 オーバーロードとは、メソッドの名称を変えることなく引数の型、個数のみを変えて同名のメソッドを作ることができるオブジェクト指向プログラミングによくあるテクニックです。 オーバーロードの利点はメソッドの引数をその役割に応じて変えてやることで、同じような機能を持ったメソッドを同じ名前で定義できるので、コードが分かりやすくなります。 rubyでは変数の型が固定化していない(自由

          rubyオブジェクト指向(4)オーバーロード

          rubyオブジェクト指向(3)イニシャライザ

          イニシャライザとはオブジェクトをインスタンス化するときに初回だけ呼び出される特別なメソッドです。オブジェクトを使う側でnewを呼び出したときに、そのオブジェクトの初期化として呼び出されます。 イニシャライザは省略可能です。名称はinitializeにします。メソッドと違う点は戻り値を定義できません。メソッドと同じ点は引数を定義できます。 class Hoge def initialize p "init calling"

          rubyオブジェクト指向(3)イニシャライザ

          rubyオブジェクト指向(2)メソッドを呼び出す

          ★メソッドの呼び出し方法 クラスを使うということは、つまりそのクラスのメソッドを呼び出すことを意味します。クラスの処理はメソッドとして書かれているので、メソッドを呼び出すことがオブジェクト指向プログラミングの第一歩です。 メソッドの呼び出し方には基本的に3種類しかありません。 (1)クラスのインスタンスメソッドを呼び出す(クラスをインスタンス化して使う) (2)継承関係にある親のメソッドを子インスタンスが呼び出す (3)クラスメソッドを呼び出す。(インスタン

          rubyオブジェクト指向(2)メソッドを呼び出す

          rubyオブジェクト指向(1)クラスとメソッドの関係

          最初に、rubyによらずオブジェクト指向プログラミングをする上での基本知識から入ります。 ★クラスとメソッドの関係を理解します クラスを理解するために、まずオブジェクトとクラスの関係を説明します。 クラスとは、オブジェクトの振る舞いを定義するクッキーの型抜き器具のようなものです。 型抜きによって出来上がるクッキー自体がオブジェクトです。そして抜く行為をインスタンス化といいます。オブジェクトを生成する行為です。つまり、型抜き(クラス)は唯一のも

          rubyオブジェクト指向(1)クラスとメソッドの関係

          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 definition of PI was here=> 3 ただ上の例のよう

          rubyの基礎(11)定数

          rubyの基礎(10)メソッドの戻り値

          rubyのメソッドの中では、戻り値を返すreturn文はなくてもいいのです。 def fact(n) if n == 0 1 else n * fact(n-1) endend 上のメソッドは再帰呼び出しで階乗の計算を行います。return文を省略して最後に評価された値が戻り値として返ります。 評価される値がないときは戻り値としてnilが返ります。 そうは言ってもreturn文がないのは気持ち悪いと言う人は、return文を書いて出口を明示しても

          rubyの基礎(10)メソッドの戻り値

          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=> :sendmailirb> sendmail("aite","","jibun

          rubyの基礎(9)キーワード引数

          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> puts alphabet irb> endabcd

          rubyの基礎(8)範囲オブジェクト

          rubyの基礎(7)ブロック

          rubyではブロックという概念があるので、for文はほとんど使わないと言ってもいいぐらいです。 ブロックとは、一言で言えば、「引数としてメソッドに渡す処理のかたまり」です。ブロックの、do~endまでの範囲すべてが引数です。 または、{ } で囲む事でも同じ意味です。 例えば、 irb> 3.times do |i| x = i * 2irb> puts xirb> end と書くと、 024 となります。 上の例の、do

          rubyの基礎(7)ブロック