目次
- Rubyとは
- 特徴
- オブジェクト
- 変数
- 定数
- 配列(Array)
- ハッシュ(Hash)
- コメント
- 制御構造
Rubyとは
まつもとゆきひろ氏によって開発されたオブジェクト指向スクリプト言語
特徴
-
オブジェクト指向
オブジェクト指向の詳細 -
マルチプラットフォーム
Rubyで書いたプログラムは実行環境がインストールされている
Windows、Linux、Mac OS など様々な環境で動作させることができる。 -
オープンソースである
Ruby 実行環境は無料で入手することができる。
オブジェクト
データを表現する基本的な単位をオブジェクトと言う。
主なもの
-
数値オブジェクト
1 100 1000 など数を表すオブジェクト -
文字列オブジェクト
'Hello world' 'こんにちは' など文字列並びからなるオブジェクト -
配列オブジェクト ハッシュオブジェクト
複数のデータをまとめるためのオブジェクト
変数
オブジェクトにつける名札
name = 'bob'
name -> 名札
'bob' -> 文字列オブジェクト
変数の種類
-
ローカル変数
先頭がアルファベットが小文字、または「 _ 」で始まるもの -
グローバル変数
先頭に「$」で始まるもの -
インスタンス変数
先頭に「@」で始まるもの -
クラス変数
先頭に「@@」で始まるもの -
疑似変数
「true」「false」「nil」「self」など特殊な変数
ローカル変数とグローバル変数
$x = 0 # グローバル変数
x = 0 # ローカル変数
require sub
puts "グローバル変数 $x #{$x}"
puts "ローカル変数 x #{x}"
$x = 1
x = 1
$ruby ./scope.rb
グローバル変数 $x 1
ローカル変数 x 0
結果を見てみると,グローバル変数$xには1が代入されておりローカル変数xには0が代入されている。
ローカル変数とは 局所的であるため、あるところで使われている場所の変数名と違う場所で使われている変数名が同じでも無関係な変数と扱われる。
グローバル変数とは 大域的であるため、プログラム中のどこでも使われても、同じ名前であれば同じ変数として扱われる。
スコープ
変数は宣言する場所によって有効範囲が異なる。
有効範囲のことを変数のスコープ(scope:範囲)である。
定数
変数と同様にあるオブジェクトにつける名札の働きをするが、変数と違って一度代入したあとに変更をすると警告される。
先頭にアルファベットの大文字で始まるものが定数となる。
RUBY_VERSION = 2.2.0 # 定数
配列(Array)
配列はいくつかのオブジェクトを順に並べて格納していくオブジェクトの集合体として、基本的によく使われる。
配列の作り方
配列を作るには、要素を,で区切り[]で囲むことで作られる。
中身が空な配列を作るためには要素を書かず、[]で囲むことで作れる。
また%wを使うことで,の区切りがなしで要素が書ける。
nums = [1,2,3,4,5,6] # 配列の中身は 1 2 3 4 5 6
arayy_emp = [] # 配列の中身は空
nums_w = %w(1 2 3 4 5 6) # 配列の中身は "1" "2" "3" "4" "5" "6"
# %wは要素すべてが文字列オブジェクトになる
配列の要素を参照
配列は要素を順び並べて格納されている。
要素を参照するには、要素の場所を指定することで参照することができる。
配列名[要素の場所]
最初の要素は0を指定してあげることで参照できる。
names = ["田中","小林"]
puts names[0] # 田中
配列にオブジェクトを格納する
すでに作られている配列にオブジェクトを格納することができる。
配列名[格納する場所] = 格納するオブジェクト
names = []
names[0] = '田中'
ハッシュ(Hash)
文字列やシンボルなどをキーにしてオブジェクトを格納する。
シンボル(Symbol)
文字列に似たオブジェクトでRubyがメソッドなどの名前の識別に使うラベルをオブジェクトにしたもの。
シンボルは先頭に「:」を付ける。
sym = :foo
ハッシュの構成は
{Key => value}となる。
key オブジェクトを取り出すためのもの
value キーと紐付けされているオブジェクト
ハッシュの作り方
新しいハッシュを作る場合{key => value}または{ket: value}で作ることができる。
また空のハッシュを作る場合は{}で囲むことで作ることができる。
person = { :name => 'Bob', :age => 22 }
#または
person_oth = { name: 'Bob', age: 22 }
ハッシュの操作
ハッシュからオブジェクトを取り出すことや、オブジェクトの格納は配列の時と同じです。
person = {}
person[:name] = 'Bob'
person[:age] = 22
puts person[:name]
puts person[:age]
コメント
コメント文の先頭「#」を付けることでコメントとなる。
複数行の場合は コメント文の先頭に「=bigin」後尾に「=end」を付ける。これをブロックコメントと言う。
# コメント
=begin
複数行コメント
複数行コメント
複数行コメント
=end
※ コーディング規約である「The Ruby Style Guide」にはブロックコメントを使わないことが推奨されています。
制御構造
-
随時処理
プログラムを書かれた通りに、先頭から順に実行する。 -
条件分岐
ある条件が成り立つ場合と成り立たない処理を実行する。 -
繰り返し
ある条件が成り立つ間、処理を繰り返す。
条件分岐
条件分岐をするための処理として、「if文」「unless文」などが準備されている。
if文
if文は最も基本的な条件判断文である。
if 条件 ~ end の中に処理を書く
pet = 'Dog'
if pet == 'Dog' # if 条件
puts 'petはDog' # 条件が正の場合に実行する文
end
※ コーディング規約である「The Ruby Style Guide」ifの実行する文が一行の場合は1行に纏める書き方が推奨されている
pet = 'Dog'
puts 'petはDog'if pet == 'Dog' # 実行する文 if 条件
条件が偽の場合、実行する文を書く場合は下記の通りに書く
pet = 'Cat'
if pet == 'Dog' # if 条件
puts 'petはDog' # 条件が正の場合に実行する文
else
puts 'petはDogではない' # 条件が偽の場合に実行する文
end
条件が偽の場合、if文を実行される場合は下記の通りに書く
pet = 'Cat'
if pet == 'Dog' # if 条件
puts 'petはDog' # 条件が正の場合に実行する文
elsif pet == 'Cat'
puts 'petはCat' # 条件が偽の場合に実行する文
else
puts 'petはDogではなく、かつCatでもない'
end
unless文
ifとは反対の役割をする条件判断文である。
ifの場合は条件が正の場合の処理を実行していたが、unlessの場合は条件が偽の時に実行する。
unless 条件 ~ endの中に処理を書く
num = 100
unless num == 100 # unless 条件
puts 'numは100ではない' # 条件が偽の場合に実行する文
end
※ コーディング規約である「The Ruby Style Guide」unlessの実行する文が一行の場合は1行に纏める書き方が推奨されている
num = 100
puts 'numは100ではない' unless num == 100 # 条件が偽の場合に実行する文 unless 条件
end
繰り返し
同じ処理をするための処理として、「for文」「while文」until文」「timesメソッド」「eachメソッド」「loopメソッド」などが準備されている。
今回は「timesメソッド」「eachメソッド」「loopメソッド」について説明する。
timesメソッド
一定回数同じ処理をさせる場合に使用される。
オブジェクト.times do ~ end の中に処理を書く
10.times do #オブジェクト.times do
puts 'test' #実行する文
end
また実行回数をしる為には
オブジェクト.times do |変数| ~ endと書く
10.times do |i| #オブジェクト.times do |変数|
puts "#{i} test" #実行する文
end
eachメソッド
オブジェクトの集りに対して1つずつ取り出して処理をしていく時に使用される。
オブジェクト.each do |変数| ~ endの中処理を書く
nums = [1,2,3,4,5]
nums.each do |num|
puts num
end
今回は説明していないが、for文と同じ動きをしている
nums = [1, 2, 3, 4, 5]
for num in nums
puts num
end
loopメソッド
終了条件がない繰り返しをする時に使用される。
「timesメソッド」と「eachメソッド」はオブジェクトが終ると終了という条件で動いているが、loopは終了条件がない。
loop do ~ end の中に処理を書く
loop do
puts 'loop ‹‹\(´ω` )/››‹‹\( ´)/››‹‹\( ´ω`)/››'
end
繰り返しを終了させるにはbreakという繰り返しを終らせる命令文が必要である
例 変数countが10以上になると終了する
count = 0
loop do
if count >= 10
break
end
puts count
count += 1
end
後編
Rubyを少しでも書けるために最低限知っておく必要な知識 後編