************** 繧ェ繝悶ず繧ァ繧ッ繝� ************** ====================== 繧ェ繝悶ず繧ァ繧ッ繝域欠蜷代→縺ッ ====================== * `繧、繝。繝シ繧ク縺ァ逅�ァ」縺吶k縲後�繝ュ繧ー繝ゥ繝溘Φ繧ー蛻晏ソ��′遒コ螳溘↓諢丞袖荳肴�縺ォ縺ェ繧銀昴が繝悶ず繧ァ繧ッ繝域欠蜷代�繝ュ繧ー繝ゥ繝溘Φ繧ー窶昴▲縺ヲ縺ェ繧薙↑縺ョ縺輔�(繝悶Ο繧ー縲後�繝ュ繧ー繝ゥ繝溘Φ繧ー繧定カ」蜻ウ縺ォ縺励◆縺��) <http://tec.citrussin.com/entry/2015/08/13/155115>`_ Ruby縺ァ縺ッ縺吶∋縺ヲ縺ョ繝��繧ソ縺ッ繧ェ繝悶ず繧ァ繧ッ繝医〒縺ゅk縲ゆセ九∴縺ー謨エ謨ー縺ョ繧ッ繝ゥ繧ケ縺ッ ``Integer`` 縲∵枚蟄怜�縺ョ繧ッ繝ゥ繧ケ縺ッ ``String`` 縺ェ縺ゥ縲� Ruby險隱槭↓ `譛蛻昴°繧臥オ�∩霎シ縺セ繧後※縺�k繧ッ繝ゥ繧ケ <https://docs.ruby-lang.org/ja/latest/library/_builtin.html>`_ 縺ィ縲� `邨�∩霎シ縺ソ縺ァ縺ッ縺ェ縺�′讓呎コ也噪縺ォ逕ィ諢上&繧後※縺�k繧ッ繝ゥ繧ケ <https://docs.ruby-lang.org/ja/latest/library/index.html>`_ 縺後≠繧九� ============ 繧ッ繝ゥ繧ケ螳夂セゥ ============ * `繧ッ繝ゥ繧ケ螳夂セゥ <https://docs.ruby-lang.org/ja/latest/doc/spec=2fdef.html#class>`_ * `繧ッ繝ゥ繧ケ縺ィ縺ッ(RubyLife) <http://www.rubylife.jp/ini/class/index1.html>`_ 蜷後§繧ッ繝ゥ繧ケ蜷阪〒隍�焚邂�園縺ォ螳夂セゥ繧呈嶌縺�※繧ゅh縺�ゅ◎縺ョ蝣エ蜷医�螳夂セゥ縺瑚ソス蜉�縺輔l縺ヲ縺�¥縲� ========== 繝。繧ス繝�ラ ========== * `繝。繧ス繝�ラ(RubyLife) <http://www.rubylife.jp/ini/method/>`_ 繝。繧ス繝�ラ繧貞ョ溯。後☆繧区凾縺ッ蠢�★螳溯。御クサ菴薙→縺ェ繧九が繝悶ず繧ァ繧ッ繝�(縲檎ァ√阪′隱ー縺九→縺�≧縺薙→)縺後≠繧翫√◎繧後� ``self`` 縺ィ縺�≧螟画焚縺ォ蜈・縺」縺ヲ縺�k縲� 繝。繧ス繝�ラ繧貞他縺ウ蜃コ縺呎凾縺ッ螳溯。御クサ菴薙→縺ェ繧九が繝悶ず繧ァ繧ッ繝医r謖�ョ壹@縺ェ縺�→縺�¢縺ェ縺�′縲∵欠螳壹@縺ェ縺��エ蜷医� ``self`` 縺御スソ繧上l繧九ゅ@縺溘′縺」縺ヲ谺。縺ョ莠後▽縺ッ蜷後§縲� .. code-block:: ruby foo() .. code-block:: ruby self.foo() .. note:: Ruby縺ォ髢「謨ー繧�シ皮ョ怜ュ舌�辟。縺上√☆縺ケ縺ヲ繝。繧ス繝�ラ縺ァ縺ゅk縲る未謨ー縺ョ繧医≧縺ォ菴ソ縺�b縺ョ縺ッ ``Object`` 繧ッ繝ゥ繧ケ縺ァ螳夂セゥ縺輔l縺ヲ縺�k�域ュ」遒コ縺ォ縺ッ ``Kernel`` 繝「繧ク繝・繝シ繝ォ縺ァ螳夂セゥ縺輔l縲� ``Object`` 繧ッ繝ゥ繧ケ縺ォ繧、繝ウ繝昴�繝医&繧後※縺�k�峨� ``Object`` 縺ッ縺吶∋縺ヲ縺ョ繧ッ繝ゥ繧ケ縺ョ繧ケ繝シ繝代�繧ッ繝ゥ繧ケ縺ェ縺ョ縺ァ縲√◎縺薙〒螳夂セゥ縺輔l縺溘Γ繧ス繝�ラ縺ッ縺吶∋縺ヲ縺ョ繧ェ繝悶ず繧ァ繧ッ繝医〒繝。繧ス繝�ラ蜷阪□縺第嶌縺�※菴ソ縺�%縺ィ縺後〒縺阪k縲� ==================== 繧、繝ウ繧ケ繧ソ繝ウ繧ケ縺ョ逕滓� ==================== 繧ッ繝ゥ繧ケA縺ョ譁ー縺励>繧ェ繝悶ず繧ァ繧ッ繝医r菴懊k縺ォ縺ッ縲√け繝ゥ繧ケA縺ョ ``new`` 繝。繧ス繝�ラ繧貞他縺ウ蜃コ縺励∬ソ斐j蛟、縺ィ縺励※繧ッ繝ゥ繧ケA縺ョ譁ー縺励>繧、繝ウ繧ケ繧ソ繝ウ繧ケ繧貞女縺大叙繧九ゅb縺励け繝ゥ繧ケA縺ォ ``initialize`` 縺ィ縺�≧蜷榊燕縺ョ繝。繧ス繝�ラ縺悟ョ夂セゥ縺輔l縺ヲ縺�k縺ィ縲� ``new`` 縺ァ譁ー縺励¥繧、繝ウ繧ケ繧ソ繝ウ繧ケ縺御ス懊i繧後◆譎ゅ↓縲√◎縺ョ繧、繝ウ繧ケ繧ソ繝ウ繧ケ縺ョ繝。繧ス繝�ラ縺ィ縺励※閾ェ蜍慕噪縺ォ蜻シ縺ウ縺�縺輔l繧九� .. code-block:: ruby class Human def initialize puts '逕溘∪繧後◆!' end end x = Human.new ================== 繧、繝ウ繧ケ繧ソ繝ウ繧ケ螟画焚 ================== * `繧、繝ウ繧ケ繧ソ繝ウ繧ケ螟画焚 <https://docs.ruby-lang.org/ja/latest/doc/spec=2fvariables.html#instance>`_ 繧、繝ウ繧ケ繧ソ繝ウ繧ケ螟画焚縺ッ縲√◎繧後◇繧後�繧、繝ウ繧ケ繧ソ繝ウ繧ケ縺ォ蜷後§蜷榊燕縺ァ蛻・縺ョ螟画焚縺悟ュ伜惠縺励√Γ繧ス繝�ラ繧貞ョ溯。後☆繧九う繝ウ繧ケ繧ソ繝ウ繧ケ縺梧戟縺」縺ヲ縺�k螟画焚縺御スソ繧上l繧九� .. code-block:: ruby class Student def initialize(n, s) @name = n @score = s end def name @name end def score @score end def score=(s) @score = s end def compare(x) case when @score > x.score "遘√�#{x.name}繧医j雉「縺�!" when @score < x.score "遘√�#{x.name}繧医j繧「繝帙〒縺吮ヲ" else "遘√�#{x.name}縺ィ蠑輔″蛻�¢" end end end taro = Student.new('螟ェ驛�', 65) hanako = Student.new('闃ア蟄�', 80) puts taro.compare(hanako) # 螟ェ驛弱�蛛エ縺九i隕九※闃ア蟄舌→豈碑シ�☆繧� puts hanako.compare(taro) # 闃ア蟄舌�蛛エ縺九i隕九※螟ェ驛弱→豈碑シ�☆繧� 繧、繝ウ繧ケ繧ソ繝ウ繧ケ螟画焚縺ッ縲∽サ悶�繧ェ繝悶ず繧ァ繧ッ繝医°繧芽ェュ縺ソ譖ク縺阪〒縺阪↑縺��縺ァ縲√い繧ッ繧サ繧ケ逕ィ縺ョ繝。繧ス繝�ラ�井ク翫�萓九□縺ィ ``score`` 縺ィ ``score=`` 縺ィ縺具シ峨r譖ク縺丞ソ�ヲ√′縺ゅk縲ゅ◎繧後�髱「蛟偵↑縺ョ縺ァ縲� |attr_accessor_manual|_ 縺ェ縺ゥ繧剃スソ縺�→荳陦後〒貂医�縲� .. |attr_accessor_manual| replace:: ``attr_accessor`` .. _attr_accessor_manual: https://docs.ruby-lang.org/ja/latest/class/Module.html#I_ATTR_ACCESSOR .. code-block:: ruby class Student attr_reader :name attr_accessor :score def initialize(n, s) @name = n @score = s end def compare(x) case when @score > x.score "遘√�#{x.name}繧医j雉「縺�!" when @score < x.score "遘√�#{x.name}繧医j繧「繝帙〒縺吮ヲ" else "遘√�#{x.name}縺ィ蠑輔″蛻�¢" end end end .. admonition:: 隱イ鬘�8 :class: exercise 谺。縺ョ繧医≧縺ェ繝。繧ス繝�ラ繧呈戟縺、鬆宣≡蜿」蠎ァ縺ョ繧ッ繝ゥ繧ケ繧貞ョ夂セゥ縺帙h縲ゅ◆縺�縺励∵ョ矩ォ倥h繧雁、壹>驥鷹。阪�蠑輔″蜃コ縺励◆繧頑険繧願セシ繧薙□繧翫〒縺阪↑縺��縺ァ縲√◎縺ョ蝣エ蜷医�繧ィ繝ゥ繝シ繝。繝�そ繝シ繧ク繧貞�蜉帙@縲∵ョ矩ォ倥�螟峨∴縺ェ縺�b縺ョ縺ィ縺吶k縲� * 谿矩ォ倥r隱ソ縺ケ繧� * 驥鷹。阪r謖�ョ壹@縺ヲ鬆舌¢繧� * 驥鷹。阪r謖�ョ壹@縺ヲ蠑輔″蜃コ縺� * 逶ク謇九�蜿」蠎ァ縺ィ驥鷹。阪r謖�ョ壹@縺ヲ謖ッ繧願セシ繧 螳溯。御セ九�谺。縺ョ繧医≧縺ォ縺ェ繧九� .. code-block:: ruby a = Account.new #a縺ョ蜿」蠎ァ a.deposit(3000) #a縺ョ蜿」蠎ァ縺ォ3000蜀��舌¢繧� b = Account.new #b縺ョ蜿」蠎ァ b.deposit(1000) #b縺ョ蜿」蠎ァ縺ォ1000蜀��舌¢繧� b.withdraw(500) #b縺ョ蜿」蠎ァ縺九i500蜀�シ輔″蜃コ縺� a.transfer(b, 2000) #a縺ョ蜿」蠎ァ縺九ib縺ョ蜿」蠎ァ縺ォ2000蜀�険繧願セシ繧 puts a.balance #a縺ョ蜿」蠎ァ谿矩ォ倥r陦ィ遉コ puts b.balance #b縺ョ蜿」蠎ァ谿矩ォ倥r陦ィ遉コ b.transfer(a, 5000) #b縺ョ蜿」蠎ァ縺九ia縺ョ蜿」蠎ァ縺ォ5000蜀�険繧願セシ繧 縺ェ縺翫∵ョ矩ォ倅ク崎カウ縺ョ繝。繝�そ繝シ繧ク繧定。ィ遉コ縺吶k縺ィ縺薙m縺ッ縲√�繝ュ繧ー繝ゥ繝�蜀�〒荳邂�園縺�縺代↓縺吶k縺薙→縲� :ref:`縲占ァ」遲比セ九� <ex8-answer>` ====== 邯呎価 ====== * `繧ッ繝ゥ繧ケ縺ョ邯呎価(RubyLife) <http://www.rubylife.jp/ini/inherit/>`_ 蜈�↓縺ェ繧九け繝ゥ繧ケ繧定ヲェ繧ッ繝ゥ繧ケ縺セ縺溘�繧ケ繝シ繝代�繧ッ繝ゥ繧ケ縲∵眠縺励¥菴懊k繧ッ繝ゥ繧ケ繧貞ュ舌け繝ゥ繧ケ縺セ縺溘�繧オ繝悶け繝ゥ繧ケ縺ィ蜻シ縺カ縲� .. code-block:: ruby class Student def initialize(n) @name = n end def name @name end end class KeioStudent < Student def university '諷カ諛臥セゥ蝪セ螟ァ蟄ヲ' end end class PStudent < KeioStudent def faculty '邱丞粋謾ソ遲門ュヲ驛ィ' end end class EStudent < KeioStudent def faculty '迺ー蠅�ュ蝣ア蟄ヲ驛ィ' end end taro = PStudent.new('螟ェ驛�') puts "#{taro.name}縺ッ#{taro.university}#{taro.faculty}縺ョ蟄ヲ逕溘〒縺吶�" .. admonition:: 隱イ鬘�9 :class: exercise 荳翫�繝励Ο繧ー繝ゥ繝�縺ァ縲� ``Student`` 繧ッ繝ゥ繧ケ縺ョ繝。繧ス繝�ラ縺ィ縺励※ ``affiliation`` 繝。繧ス繝�ラ繧貞ョ夂セゥ縺励√◎縺ョ蟄ヲ逕溘�螟ァ蟄ヲ蜷阪→蟄ヲ驛ィ蜷阪r縺、縺ェ縺偵◆譁�ュ怜�繧定ソ斐☆繧医≧縺ォ縺帙h縲�( ``PStudent`` 縺ィ ``EStudent`` 縺ォ螳夂セゥ縺吶k縺ョ縺ァ縺ッ縺ェ縺�%縺ィ縺ォ豕ィ諢�) 螳溯。御セ九�縺薙s縺ェ諢溘§縲� .. code-block:: ruby taro = PStudent.new('螟ェ驛�') hanako = EStudent.new('闃ア蟄�') puts "#{taro.name}縺ッ#{taro.affiliation}縺ョ蟄ヲ逕溘〒縺吶�" puts "#{hanako.name}縺ッ#{hanako.affiliation}縺ョ蟄ヲ逕溘〒縺吶�" :ref:`縲占ァ」遲比セ九� <ex9-answer>` ============== 迚ケ逡ー繝。繧ス繝�ラ ============== * `迚ケ逡ー繝。繧ス繝�ラ螳夂セゥ <https://docs.ruby-lang.org/ja/latest/doc/spec=2fdef.html#singleton_method>`_ * `邨仙ア縲ヽuby縺ョ迚ケ逡ー繝。繧ス繝�ラ縺」縺ヲ菴輔↑縺ョ��(繝悶Ο繧ー縲茎asata299's blog縲�) <http://blog.livedoor.jp/sasata299/archives/51497378.html>`_ 譎ョ騾壹�繝。繧ス繝�ラ縺ッ縲√≠繧九け繝ゥ繧ケ縺ョ繧、繝ウ繧ケ繧ソ繝ウ繧ケ蜈ィ驛ィ縺ォ蜈ア騾壹□縺後∫音螳壹�繧、繝ウ繧ケ繧ソ繝ウ繧ケ縺�縺代�繝。繧ス繝�ラ繧貞ョ夂セゥ縺ァ縺阪k縲� ============== 繧「繧ッ繧サ繧ケ蛻カ蠕。 ============== * `蜻シ縺ウ蜃コ縺怜宛髯� <https://docs.ruby-lang.org/ja/latest/doc/spec=2fdef.html#limit>`_ * `Ruby 縺ョ private 縺ィ protected 縲よュエ蜿イ縺ィ菴ソ縺��縺�(Qiita) <https://qiita.com/tbpgr/items/6f1c0c7b77218f74c63e>`_ Java繧Г++縺ョ ``public`` , ``protected`` , ``private`` 縺ィ縺ッ諢丞袖縺碁&縺��縺ァ豕ィ諢上�