Submit Search
Upload
Ruby初級者向けレッスン 54回 ─── クラス
•
0 likes
•
460 views
higaki
Follow
知っているようで知らないクラスの作り方
Read less
Read more
Technology
Report
Share
Report
Share
1 of 32
Download now
Download to read offline
Recommended
Ruby 初級者向けレッスン 49回───クラス
Ruby 初級者向けレッスン 49回───クラス
higaki
HaskellDB
HaskellDB
Kei Hibino
形態素解析について
形態素解析について
tomowata
Haskell と Elm と JSON の話
Haskell と Elm と JSON の話
Nobutada Matsubara
Ruby初級者向けレッスン 50回 ─── ブロック
Ruby初級者向けレッスン 50回 ─── ブロック
higaki
Ruby初級者向けレッスン 56回 ─── ブロック
Ruby初級者向けレッスン 56回 ─── ブロック
higaki
PHPer のための Ruby 教室
PHPer のための Ruby 教室
higaki
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
Haruka Ozaki
Recommended
Ruby 初級者向けレッスン 49回───クラス
Ruby 初級者向けレッスン 49回───クラス
higaki
HaskellDB
HaskellDB
Kei Hibino
形態素解析について
形態素解析について
tomowata
Haskell と Elm と JSON の話
Haskell と Elm と JSON の話
Nobutada Matsubara
Ruby初級者向けレッスン 50回 ─── ブロック
Ruby初級者向けレッスン 50回 ─── ブロック
higaki
Ruby初級者向けレッスン 56回 ─── ブロック
Ruby初級者向けレッスン 56回 ─── ブロック
higaki
PHPer のための Ruby 教室
PHPer のための Ruby 教室
higaki
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
Haruka Ozaki
第3回輪講
第3回輪講
mh_amako
JavaScriptクイックスタート
JavaScriptクイックスタート
Shumpei Shiraishi
Start!! Ruby
Start!! Ruby
mitim
Ruby講座第二回
Ruby講座第二回
mitsunaga
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
Nishida Kansuke
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Kenta USAMI
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
yashigani
RSpecのここがすごい!
RSpecのここがすごい!
mitim
R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装
__nakamichi__
ransack, ransack, ransack
ransack, ransack, ransack
Keisuke Ohta
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
Masahiro Hayashi
Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン KOF2015 出張版
higaki
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外
higaki
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hash
higaki
初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 52回 ─── 文字列
higaki
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
higaki
Ruby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 48回 ─── Array と Hash
higaki
Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 47回 ─── 文字列
higaki
Ruby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unit
higaki
ジュンク堂書店の方から来ました
ジュンク堂書店の方から来ました
higaki
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
higaki
More Related Content
Similar to Ruby初級者向けレッスン 54回 ─── クラス
第3回輪講
第3回輪講
mh_amako
JavaScriptクイックスタート
JavaScriptクイックスタート
Shumpei Shiraishi
Start!! Ruby
Start!! Ruby
mitim
Ruby講座第二回
Ruby講座第二回
mitsunaga
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
Nishida Kansuke
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Kenta USAMI
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
yashigani
RSpecのここがすごい!
RSpecのここがすごい!
mitim
R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装
__nakamichi__
ransack, ransack, ransack
ransack, ransack, ransack
Keisuke Ohta
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
Masahiro Hayashi
Similar to Ruby初級者向けレッスン 54回 ─── クラス
(12)
第3回輪講
第3回輪講
JavaScriptクイックスタート
JavaScriptクイックスタート
Start!! Ruby
Start!! Ruby
Ruby講座第二回
Ruby講座第二回
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
RSpecのここがすごい!
RSpecのここがすごい!
R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装
ransack, ransack, ransack
ransack, ransack, ransack
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
More from higaki
Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン KOF2015 出張版
higaki
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外
higaki
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hash
higaki
初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 52回 ─── 文字列
higaki
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
higaki
Ruby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 48回 ─── Array と Hash
higaki
Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 47回 ─── 文字列
higaki
Ruby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unit
higaki
ジュンク堂書店の方から来ました
ジュンク堂書店の方から来ました
higaki
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
higaki
More from higaki
(10)
Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hash
初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
Ruby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unit
ジュンク堂書店の方から来ました
ジュンク堂書店の方から来ました
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
Recently uploaded
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
Hiroshi Tomioka
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
Recently uploaded
(9)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
Ruby初級者向けレッスン 54回 ─── クラス
1.
2015年8月8日 Ruby初級者向けレッスン 54回 — クラス
— ひがき @ Ruby関西
2.
クラスとは • オブジェクトの雛形 • 属性と振舞いを定義 –
カプセル化 (データ・実装の隠蔽) • Rubyはクラスベースのオブジェクト指向言語
3.
クラスを作ってみよう class Person; end obj
= Person.new # => #<Person:0x007fb1a184a198> obj.class # => Person Person.superclass # => Object
4.
属性を持たせてみよう class Person def initialize(name) @name
= name end end matz = Person.new(’matz’) # => #<Person:0x007fb1a1848438 @name="matz">
5.
属性にアクセスしてみよう • インスタンス変数は外から見えない class Person attr_reader
:name end matz.name # => "matz"
6.
変数・定数のおさらい ローカル変数 person インスタンス変数 @person クラス変数
@@person グローバル変数 $person 定数 Person
7.
属性を増やしてみよう class Person def initialize(name,
born = nil) @name, @born = name, born end attr_accessor :born end matz.methods.map(&:to_s).grep(/born/) # => ["born", "born="]
8.
属性を増やしてみよう (2) matz.born =
Time.local(1965, 4, 14) dhh = Person.new(’dhh’, Time.local(1979, 10, 15)) matz.born # => 1965-04-14 00:00:00 +0900 dhh.born # => 1979-10-15 00:00:00 +0900
9.
メソッドを作ってみよう class Person def age (Time.now.strftime(’%Y%m%d’).to_i
- @born.strftime(’%Y%m%d’).to_i) / 1_00_00 end end matz.age # => 50 dhh.age # => 35
10.
メソッドを上書きしてみよう matz.to_s # =>
"#<Person:0x007fb1a184843 class Person def to_s "#{@name}(#{age})" end end matz.to_s # => "matz(50)" dhh.to_s # => "dhh(35)"
11.
インスタンスを比較してみると… person = Marshal.load(Marshal.dump
matz) # => matz(50) person == dhh # => false person == matz # => false # おかしい
12.
順序を決めよう class Person include Comparable def
<=> o @name <=> o.name end end person == dhh # => false person == matz # => true matz > dhh # => true
13.
Array#sort してみよう people =
[matz, dhh] people.sort # => [dhh(35), matz(50)]
14.
年齢順に sort してみよう #
若い順 people.sort_by(&:age) # => [dhh(35), matz(50)] # 年功序列 people.sort_by{|p| -p.age} # => [matz(50), dhh(35)] people.sort_by(&:born)
15.
Hash のキーにしてみると…… h =
{matz => "Ruby", dhh => "Rails"} h[matz] # => "Ruby" h[dhh] # => "Rails" key = Marshal.load(Marshal.dump matz) key == matz # => true h[key] # => nil # おかしい
16.
hash 値を計算しよう class Person def
hash [@name, @born].hash end end matz.hash # => -2004926503290248919 dhh.hash # => 2713023373120596011 key.hash # => -2004926503290248919
17.
eql? を上書きしよう class Person def
eql? o [@name, @born].eql? [o.name, o.born] end end key.eql? matz # => true key.eql? dhh # => false
18.
Hash にアクセスしてみよう h.rehash h[matz] #
=> "Ruby" h[dhh] # => "Rails" h[key] # => "Ruby"
19.
等値性のおさらい == 内容が等しいか? === case
式で使用 eql? Hash クラスが使用 equal? 同一オブジェクトか?
20.
アクセス制御してみよう • public • protected •
private class Person protected :born end matz.born # ~> protected method ‘born’ called for ma
21.
Struct でクラスを作る Person =
Struct.new(:name, :born) matz = Person.new(’matz’) dhh = Person.new(’dhh’, Time.local(1979, 10, 15)) person = Marshal.load(Marshal.dump matz) person == matz # => true person == dhh # => false
22.
Struct なら等値性も h =
{matz => "Ruby", dhh => "Rails"} key = Marshal.load(Marshal.dump matz) h[matz] # => "Ruby" h[dhh] # => "Rails" h[key] # => "Ruby"
23.
Struct でもメソッドを class Person def
age (Time.now.strftime(’%Y%m%d’).to_i - born.strftime(’%Y%m%d’).to_i) / 1_00_00 end end dhh.age # => 35
24.
今日 話さなかったこと • 委譲と継承 •
モジュール • クラス変数・クラスメソッド • Range の始点と終点
25.
まとめ • クラスの作り方 – 属性・アクセサ –
メソッド • オブジェクトの等値性
26.
演習問題 0 今日のレッスンで分からなかったこと、疑問に 思ったことをグループで話し合ってみよう。
27.
演習問題 1 属性として身長と体重を追加しよう。体重は秘密 にしよう。
28.
演習問題 2 BMI を計算するメソッドを追加しよう。 BMI
= w t2 w = 体重[kg] t = 身長[m]
29.
演習問題 3 Person#<=> を書き直そう。 その妥当な仕様は? p0
= Person.new(’matz’) p1 = Person.new(’Matz’, Time.local(1965, 4, 14)) p0 <=> p1 # => ?
30.
演習問題 4 Person#=== を定義しよう。 その妥当な仕様は? p0
= Person.new(’matz’) p1 = Person.new(’Matz’, Time.local(1965, 4, 14)) p0 === p1 # => ?
31.
自己紹介 • 名前 (ニックネーム) •
普段の仕事・研究内容・代表作 • Ruby歴・コンピュータ歴 • 勉強会に来た目的 • などなど
32.
参考 • 公式サイト https://www.ruby-lang.org/ • るりま http://docs.ruby-lang.org/ja/ •
解答例 https://github.com/higaki/ learn ruby kansai 68
Download now