このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

Rubyを始める時のまとめ。

Ruby

2015.04.10

この記事は最終更新日から1年以上が経過しています。

どもです。

Ruby on Railsで最近もっぱら何かと話題のRuby界隈

公式サイト

https://www.ruby-lang.org/ja/

言わずと知れた、「まつもとゆきひろ(通称 Matz)さん」が開発したオブジェクト指向を用いた国産の言語ですね。

と、ふとRubyを書きたくなったので、書こうと思ったのですが、普段日常的には書かないので

「あれ、どんなだっけ」現象。

最近はPHPや TypeScriptや C言語なんかと色々書いたりしていてもう、どれがどうだったかw

と、自分の過去記事を漁る。

Ruby 基本まとめ

http://www.webcyou.com/?p=4915

超わかりずらい。

Interactive Rubyでやってるのでわかりずらいわ。

ざっと書いた感が丸出しでしたね。

そこで、困った時のドットインストール!!w

公式サイト

http://dotinstall.com/

Ruby

http://dotinstall.com/lessons/basic_ruby_v2/

うん。やっぱり分かりやすいですわ!!!w

というか、田口さんフルスタックすぎますね。いやーすごい。

というわけで初心者でもサクッと入れるように、要点をまとめ文書に起こしてみました。

Ruby

インストール

mac

Ruby 2.0.0 は OS X Mavericks に含まれています。

brewを使ったインストール

brew install ruby

 

win

windowsの方はRubyInstallerを使ってインストールすると良さげですね。

http://rubyinstaller.org/

 

バージョン確認

ruby -v

拡張子は「.rb」

出力

コメントアウト

#

改行なし

print

改行あり

puts

データ形式表示

p

例:

print "hello world!"
puts "hello world(puts)" 
p "hello world(p)"

– result

hello world!hello world(puts)"hello world(p)"

変数・定数

変数は小文字始まり。

msg = "hello world"

定数は大文字始まり。

WEBCYOU_URL = "http://www.webcyou.com/"

定数定義後に変更行うとwarning 表示。

オブジェクト、メソッド、クラス

オブジェクト

Rubyのデータはすべてオブジェクトということで、

p "hello world".length

このように扱うことも可能。

– result

11

と、表示。

この辺も、Rubyならではで「おぉーー」となりますよね。

メソッド

組み込みメソッドは全てクラスで作られている。

公式サイトのコアリファレンスに記載している

http://ruby-doc.org/core-2.2.1/

数値オブジェクト -Numeric

整数値、実数値はもちろん分数値も扱えちゃうRubyの数値オブジェクト

さらに、「_」を無視するといった仕様。

x = 10_000_000
p x

– result

10000000

これも変わっていますよねー。

 

あと、累乗は「**」で使用可能

p 10 ** 3

– result

1000

更に分数値も

p 1/3r * 2

1/3rは 有理数(Rational)の省略でRational(1, 3)と同様、

Rationalクラスを省略して使えるみたいですね。

“r”サフィックスはどうやらruby バージョン2.1〜 使用可能で、ruby バージョン2.0だとエラーでした。

ruby バージョン2.1以下の方は

p Rational(1, 3) * 2

といった形で分数値を求めるかと。

– result

(2/3)

数値に関してもオブジェクトですので、実数値を丸める際

y = 20.5
p y.round

– result

21

とすることが可能。

その他のメソッド等に関しては、コアリファレンスのNumericクラスを参照。

(バージョンは2.2.0)

http://ruby-doc.org/core-2.2.0/Numeric.html

文字列オブジェクト -String

文字列オブジェクトは「” “」「’ ‘」で囲うことで生成。

特徴として「” “」変数展開することと、特殊文字を扱うことができる。

「’ ‘」は不可となっております

name = "takayama"x = "hello world, #{name}"
y = 'hello world, {name}'puts x
puts y

– result

hello world, takayamahello world, {name}

特殊文字

タブコード(\t )や改行コード(\n)も「” “」展開が可能となっております。

あと便利なのが文字列の繰り返しも

puts "web帳 " * 5

これで可能ですね。

– result

web帳
web帳
web帳
web帳
web帳

その他のメソッド等に関しては、コアリファレンスのStringクラスを参照。

(バージョンは2.2.0)

http://ruby-doc.org/core-2.2.0/String.html

破壊的メソッド、真偽値を返すメソッド

破壊的メソッド

通常

s = "webcyou"
puts s.upcase
puts s

– result

WEBCYOU
webcyou

「!」をつけると破壊的メソッドとしてオブジェクトを変更可能

s = "webcyou"
puts s.upcase!
puts s

– result

WEBCYOU
WEBCYOU

真偽値メソッド

「?」を付与すると真偽値を取得できる。

s = ""
p s.empty? # true

配列オブジェクト

rubyの配列の特徴として

添え字で範囲指定「..」
num = [5, 8, 4]
p num[0..2]

result

[5, 8, 4]
添え字で範囲指定「…」
num = [5, 8, 4]
p num[0...2]

– result

[5, 8]
負の値で配列最後の値取得
num = [5, 8, 4]
p num[-1]

– result

4
複数取得「,」
num = [5, 8, 4]
p num[1,2]

– result

[8,4]
範囲指定の置換
num = [5, 8, 4]
num[0...2] = [1,2]
p num

– result

[1, 2, 4]
複数挿入
num = [5, 8, 4]
num[1,0] = [10,11,12]
p num

– result

[5, 10, 11, 12, 8, 4]

「1,0」は1番目の0個分を意味している。

「1,1」= [10,11,12]とすると、8が置換され、

[5, 10, 11, 12, 4] となる。

これは、便利というか、Rubyの柔軟性の高さ。

範囲指定の削除
num = [5, 8, 4]
num[0,2] = []
p num

– result

[4]

これもまた、Rubyならではの特殊な記述の仕方。

「0,2」0番目から2個分を「[]」空に。

他言語と比較して、より直感的に記述していける感じですね。

メソッド

num = [5, 8, 4]
p num.size
p num.sort

– result

3
[4, 5, 8]

.sortでソートが可能な便利さ。

更にメソッドチェーンも「.」つなぎで可能

num.sort.reverse

– result

[8, 5, 4]

その他、配列に追加するpushを省略して「<<」を用いて利用可能で、複数追加も行える。

num = [5, 8, 4]
num << 100 << 102
p num

– result

[5, 8, 4, 100, 102]

その他のメソッド等に関しては、コアリファレンスのArrayクラスを参照。

(バージョンは2.2.0)

http://ruby-doc.org/core-2.2.0/Array.html

コアリファレンスをパッとみて、目に入ったやつで、

hoge = Array.new(3, true);
p hoge

– result

[true, true, true]

こんな感じ複数配列生成もできるみたいで、超楽ですね!

ハッシュオブジェクト

sales = {"takayama" => 200, "webcyou" => 300 }
p sales["takayama"]

– result

200

まーこの辺は良いとして、Rubyの特徴から シンボルとして扱う場合

sales = {:takayama => 200, :webcyou => 300 }
p sales[:takayama]

として記述するとシンボルとして扱うことが可能。

また、Ruby1.9〜はシンボルで扱う際は以下の記述でもOKとの

sales = {takayama: 200, webcyou: 300 }

– result

200

メソッド例として「size」「keys」「values」etc….  キーが存在するかどうかは「has_key?」で判定可能。

p sales.has_key?(:takayama)

– result

true

その他のメソッド等に関しては、コアリファレンスのHashクラスを参照

(バージョンは2.2.0)

http://ruby-doc.org/core-2.2.0/Hash.html

オブジェクト変換

文字列オブジェクトを数字オブジェクトに(整数値).to_i

a = "10"
a.to_i

文字列オブジェクトを数字オブジェクトに(実数値).to_f

a = "10"
a.to_f

数字オブジェクトを文字列オブジェクトに .to_s

a = 10
a.to_s

ハッシュを配列に .to_a

h = {takayama: 200, webcyou: 300 }
p h.to_a

– result

[[:takayama, 200], [:webcyou, 300]]

配列をハッシュに .to_h

a = [[:takayama, 200], [:webcyou, 300]]
p a.to_h

– result

{:takayama=>200, :webcyou=>300}

%記法

%Qで文字列として変換される。なんと。

s = %Q(hello)
p s

– result

"hello"

%Q()は %Q{} でも%Q!! でもOKとの事。

シングルコーテーションで変換する場合は小文字 %qで変換が可能。

%Q()は 省略可能で 「%()」「%{}」「%!!」と記述でも同様に扱える。

なんと。

また、文字列の配列の場合は

a = ["a", "b", "c"]

といったものも、%記法を用いて省略が可能。

(小文字のwにするとシングルコーテーション)

a = %W(a b c)

なんと。

条件分岐

条件分岐に関しては以下のような記述で

条件分岐 if
    真
else
    偽
end

他のプログラム言語とさほど変わらなく、あえてポイントを挙げるとなると endで終了を明示的にするところと、条件を追加する際の「else if」はRubyでは「elsif」と記述するところですかね。

と、省略する記述が特殊な感じですね。

score = 80
if score > 60
  puts "OK!"
end

これが、省略して 条件分岐箇所は1行で記述することができるのですね。

score = 80
puts "OK!" if score > 60

なんと。楽である。

真偽値

オブジェクトが存在するかどうかもスマートな記述で

if x
    puts "..."
end

その他、三項演算子も他と同様に利用でき、

a = b > c ? b :c 

トリッキーだなと感じたのは、「多重代入」ですかね。

b, c = 10, 20

このように複数代入出来るとのこと。おぉ。ワンダフル。

case 分岐

case文に関しては特別なところはなく、

case 比較したいオブジェクト
    when 値
        処理
    when 値
        処理
    else どれも一致しない場合
        処理
    end

と、このような形で利用できます。

when でこのように when “hoge1”, “hoge2” とカンマ区切りで複数指定できるのはこれまた便利ですね。

繰り返し処理

繰り返し処理で利用する「times」これまた特殊なかんじですよね。

3.times do
    puts "hello"
end

– result

hello</p>
<p>hello</p>
<p>hello

あと、何回めの処理なのかのindexも取得できますね。

その際は、doのあとに |i| で取得できるようです。

3.times do |i|
    puts "#{i}: hello"
end

– result

0: hello
1: hello
2: hello

while文はこのような感じで使えますね。

while i < 3 do

あと、ループを抜ける処理 「break」の他に「next」もあるとの事。

至れり尽くせり。

if 1 == 0
    next
end

てな感じで条件が真の時、処理がスキップされます。

for文 each文

for文に関してはこのような感じで利用でき、

for i in 0..2 do
    puts i
end

each文で繰り返し処理を行う場合は

["red", "blue", "pink"].each do |color|
    puts color
end

のような感じで利用できます。

これもまた、配列もオブジェクトとして扱う Rubyぽい記述ですね。

もちろん、配列をそのままハッシュに置き換えて処理を行うことができ、

その際、keyとvalueは 「 || 」 内でカンマ区切りで取得が可能ですね。

{"red"=> 200, "blue"=>100, "pink"=>50}.each do |color, price|
    puts "#{color}: #{price}"
end

– result

red: 200
blue: 100
pink: 50

メソッド

自作メソッドは以下のような記述で定義します。

def 関数名
    処理
end

引数がある場合は関数名の後に()で指定。

デフォルト値の指定も可能ですね。

def sayHi(name = "webcyou")
    puts "hello! " + name
end

sayHi("takayama")
sayHi()

– result

hello! takayama
hello! webcyou

返り値を得る際のreturnは省略が可能との事。

なんと。。。

どこまで省略可能なのだ。。

後、関数内で定義したオブジェクトは自動的にカプセル化されるようで、外からのアクセスはできないようです。

クラス

class User
    def initialize(name)
        @name = name
    end

    def sayHi
        puts "hello, my name is #{@name}"
    end
end

tom = User.new("tom")
tom.sayHi()

def initialize」はクラスからインスタンスを生成する際に処理が行われます。

@hogege と「@」が付与された変数はインスタンス変数となり、クラス内の他定義した巻数から呼び出すことが可能となっております。

クラスメソッド、クラス変数

クラスメソッドを定義する際は、「クラス名.定義関数」で作成できます。

クラスメソッド

def User.sayHello 

Userクラス内で上記を定義、インスタンスを生成しなくても呼び出しが可能となります。

User.sayHello()

また、「@@」でクラス変数も定義することができ、のクラスやサブクラス、それらのインスタンスで共有される グローバル変数を作成することができます。

クラスからインスタンスが生成された際にカウントアップするクラス変数

class User
    @@count = 0 #クラス変数
    def initialize()
        @@count += 1
    end

    def User.sayHello #クラスメソッド
        puts "hello from User class(#{@@count})"
    end
end

継承

Rubyのクラスの継承は不等号の「<」で行えるとのこと。これまたなんと。

class SuperUser < User

てな感じで。

これまた、楽な感じですね。ふむ。

getアクセサ、setアクセサ(getter,setter)

インスタンス変数を外部から参照するに用いるgetterはRubyでは

def name
    return @name
end

setterはこのような感じでいけるのですが、

def setName(newName)
    @name = newName
end

更に「attr_accessor」を用いると容易に扱えるとのこと。

attr_accessor :name

setterも hoge.name = ‘hoge’ で実行可能。

attr_accessorはgetter,、setterの両方ですが、それぞれの指定も可能。

getterのみ

attr_reader :name

setterのみ

attr_writer :name

クラスが大きくなると、getter、setterだけで行数も増えてしまいがちですが、これは記述が減り、便利ですね。

 

終わりに

と、改めて書いてみて、Rubyは柔軟性があって書いてて楽しい言語だなと改めて思いました。

Ruby on Rails もきっと容易に扱えて楽しいんだろうなと思います。

機会があったら触って見ようかと思います。

後、何か新しく言語を覚えたりする際は一度「ドットインストール」を確認すると良いですね!改めて便利さを感じましたw

下手に書籍等を購入するより分かりやすいですね(込み入ったことを行う際は話が別です。)

ということで、今回は ドットインストールを参照に Rubyはじめる際のまとめを文書にまとめさせていただきました。

ありがとうございましたmm

公式サイト

http://dotinstall.com/

Comment

Related Article

Rails5 gemでmysql2が インストールできない

2019.05.05

Rails5 + devise token authで作る 認証API

2017.05.20

Rails4 + TypeScript + AngularJS + slimで 快適開発環境構築!最短でSPA環境作成。

2016.02.20

Rubyを始める時のまとめ。

2015.04.10

Ruby 基本まとめ

2013.12.12

CATEGORY LIST

LATEST NEWS

このコロナ禍で、飛沫感染防止など求められる中「電子メモパッド」が重宝。 1300円で購入可能な電子メモパッドが超絶便利な件。

tool

2020.06.02

OAuthのフローを可視化できるツールを作ってみました。

JavaScript

2020.05.17

Django django-allauthで、サクッとソーシャルログイン機能を実装

Python

2020.04.12

部下を育てる技術

イベント

2020.04.08

令和の時代に、JavaScriptで Shift-JISファイル作成 全銀データフォーマットに対応する。

JavaScript

2020.03.03

インターネットにて世論調査を行う「世論Web」サービスを始めてみました。

JavaScript

2020.01.31

まだ間に合う!!ラズベリーパイ購入なら「RSコンポーネンツ」で!最大40%オフの年に1度の大特価期末セール中!

RaspberryPi

2020.01.25

年末のレトロゲーム熱の際、ファミコンソフト一覧パッケージ作ってました。

JavaScript

2020.01.24

TSUKUMO の初売りでNAS (Synology DiskStation DS218j)購入!!

イベント

2020.01.04

Mac用 エミュレーター 「OpenEmu」が、V2.2リリース!GameCube対応して更に神アプリ進化!

Game

2020.01.01

この時期になると、やたらレトロゲームをやりたくなるのはなんですかね?ハードオフに向かうの巻その2

Game

2019.12.31

この時期になると、やたらレトロゲームをやりたくなるのはなんですかね?ハードオフに向かうの巻

Game

2019.12.14

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US