Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
higaki
463 views
Ruby初級者向けレッスン 54回 ─── クラス
知っているようで知らないクラスの作り方
Technology
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 32
2
/ 32
3
/ 32
4
/ 32
5
/ 32
6
/ 32
7
/ 32
8
/ 32
9
/ 32
10
/ 32
11
/ 32
12
/ 32
13
/ 32
14
/ 32
15
/ 32
16
/ 32
17
/ 32
18
/ 32
19
/ 32
20
/ 32
21
/ 32
22
/ 32
23
/ 32
24
/ 32
25
/ 32
26
/ 32
27
/ 32
28
/ 32
29
/ 32
30
/ 32
31
/ 32
32
/ 32
More Related Content
PDF
Ruby 初級者向けレッスン 49回───クラス
by
higaki
PDF
HaskellDB
by
Kei Hibino
PPTX
形態素解析について
by
tomowata
PDF
Haskell と Elm と JSON の話
by
Nobutada Matsubara
PDF
Ruby初級者向けレッスン 50回 ─── ブロック
by
higaki
PDF
Ruby初級者向けレッスン 56回 ─── ブロック
by
higaki
PDF
PHPer のための Ruby 教室
by
higaki
PDF
Rubyメソッド探索
by
Masayuki Nishida
Ruby 初級者向けレッスン 49回───クラス
by
higaki
HaskellDB
by
Kei Hibino
形態素解析について
by
tomowata
Haskell と Elm と JSON の話
by
Nobutada Matsubara
Ruby初級者向けレッスン 50回 ─── ブロック
by
higaki
Ruby初級者向けレッスン 56回 ─── ブロック
by
higaki
PHPer のための Ruby 教室
by
higaki
Rubyメソッド探索
by
Masayuki Nishida
Similar to Ruby初級者向けレッスン 54回 ─── クラス
KEY
Ruby with Hash
by
Jun Yokoyama
PPTX
Ruby講座第二回
by
mitsunaga
PPTX
第3回輪講
by
mh_amako
PPT
Start!! Ruby
by
mitim
PDF
Rubyインスタンス変数
by
Masayuki Nishida
PDF
Ruby 3の型推論やってます
by
mametter
PDF
名古屋Ruby会議02 LT:Ruby中級への道
by
Shigeru UCHIYAMA
PDF
現実世界のJRuby(ショートバージョン)
by
Hiroshi Nakamura
PDF
Ruby programmer silverの取得に向けて
by
善弘 植木
PDF
Ruby初級者向けレッスン 53回 ─── Array と Hash
by
higaki
PDF
Ruby on Rails 入門
by
Yasuko Ohba
PDF
現実世界のJRuby
by
Hiroshi Nakamura
PDF
Ruby初級者向けレッスン KOF2015 出張版
by
higaki
PDF
Meta programing ruby monday
by
Yuisho Takafuji
PDF
Ruby and ActiveSupport for expart
by
xibbar
PDF
Ruby でつくる型付き Ruby
by
mametter
PPT
第1部「一時間で覚えるruby」
by
Hiromu Shioya
PDF
Rubyのクラスとメソッド_エスキュービズム勉強会0530
by
エンジニア勉強会 エスキュービズム
PPTX
低レイヤから見たrubyプログラミング
by
よしだ あつし
PPT
クラスのインスタンス変数について
by
Tomoya Kawanishi
Ruby with Hash
by
Jun Yokoyama
Ruby講座第二回
by
mitsunaga
第3回輪講
by
mh_amako
Start!! Ruby
by
mitim
Rubyインスタンス変数
by
Masayuki Nishida
Ruby 3の型推論やってます
by
mametter
名古屋Ruby会議02 LT:Ruby中級への道
by
Shigeru UCHIYAMA
現実世界のJRuby(ショートバージョン)
by
Hiroshi Nakamura
Ruby programmer silverの取得に向けて
by
善弘 植木
Ruby初級者向けレッスン 53回 ─── Array と Hash
by
higaki
Ruby on Rails 入門
by
Yasuko Ohba
現実世界のJRuby
by
Hiroshi Nakamura
Ruby初級者向けレッスン KOF2015 出張版
by
higaki
Meta programing ruby monday
by
Yuisho Takafuji
Ruby and ActiveSupport for expart
by
xibbar
Ruby でつくる型付き Ruby
by
mametter
第1部「一時間で覚えるruby」
by
Hiromu Shioya
Rubyのクラスとメソッド_エスキュービズム勉強会0530
by
エンジニア勉強会 エスキュービズム
低レイヤから見たrubyプログラミング
by
よしだ あつし
クラスのインスタンス変数について
by
Tomoya Kawanishi
More from higaki
PDF
Ruby初級者向けレッスン 55回 ─── 例外
by
higaki
PDF
初級者向けレッスン 52回 ─── 文字列
by
higaki
PDF
初級者向けレッスン 51回 ─── 例外
by
higaki
PDF
Ruby初級者向けレッスン 48回 ─── Array と Hash
by
higaki
PDF
Ruby初級者向けレッスン 47回 ─── 文字列
by
higaki
PDF
Ruby初級者向けレッスン 第46回 ─── Test::Unit
by
higaki
PDF
ジュンク堂書店の方から来ました
by
higaki
PDF
Ruby初級者向けレッスン 45回 ─── 例外
by
higaki
Ruby初級者向けレッスン 55回 ─── 例外
by
higaki
初級者向けレッスン 52回 ─── 文字列
by
higaki
初級者向けレッスン 51回 ─── 例外
by
higaki
Ruby初級者向けレッスン 48回 ─── Array と Hash
by
higaki
Ruby初級者向けレッスン 47回 ─── 文字列
by
higaki
Ruby初級者向けレッスン 第46回 ─── Test::Unit
by
higaki
ジュンク堂書店の方から来ました
by
higaki
Ruby初級者向けレッスン 45回 ─── 例外
by
higaki
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