LoginSignup
9
11

More than 5 years have passed since last update.

Rubyを少しでも書けるために最低限知っておく必要な知識 前編

Last updated at Posted at 2015-12-14

目次

  • Rubyとは
  • 特徴
  • オブジェクト
  • 変数
  • 定数
  • 配列(Array)
  • ハッシュ(Hash)
  • コメント
  • 制御構造

Rubyとは

まつもとゆきひろ氏によって開発されたオブジェクト指向スクリプト言語

特徴

  • オブジェクト指向
    オブジェクト指向の詳細

  • マルチプラットフォーム
    Rubyで書いたプログラムは実行環境がインストールされている
    Windows、Linux、Mac OS など様々な環境で動作させることができる。

  • オープンソースである
    Ruby 実行環境は無料で入手することができる。

オブジェクト

データを表現する基本的な単位をオブジェクトと言う。
主なもの

  • 数値オブジェクト
    1 100 1000 など数を表すオブジェクト

  • 文字列オブジェクト
    'Hello world' 'こんにちは' など文字列並びからなるオブジェクト

  • 配列オブジェクト ハッシュオブジェクト
    複数のデータをまとめるためのオブジェクト

変数

オブジェクトにつける名札

variable.rb
name = 'bob'

name -> 名札
'bob' -> 文字列オブジェクト

変数の種類

  • ローカル変数
    先頭がアルファベットが小文字、または「 _ 」で始まるもの

  • グローバル変数
    先頭に「$」で始まるもの

  • インスタンス変数
    先頭に「@」で始まるもの

  • クラス変数
    先頭に「@@」で始まるもの

  • 疑似変数
    「true」「false」「nil」「self」など特殊な変数

ローカル変数とグローバル変数

./scope.rb
$x = 0 # グローバル変数
x = 0 # ローカル変数

require sub

puts "グローバル変数 $x #{$x}"
puts "ローカル変数 x #{x}"
./sub.rb
$x = 1
x = 1
実行結果
$ruby ./scope.rb
グローバル変数 $x 1
ローカル変数 x 0

結果を見てみると,グローバル変数$xには1が代入されておりローカル変数xには0が代入されている。

ローカル変数とは 局所的であるため、あるところで使われている場所の変数名と違う場所で使われている変数名が同じでも無関係な変数と扱われる。
グローバル変数とは 大域的であるため、プログラム中のどこでも使われても、同じ名前であれば同じ変数として扱われる。

スコープ

変数は宣言する場所によって有効範囲が異なる。
有効範囲のことを変数のスコープ(scope:範囲)である。

定数

変数と同様にあるオブジェクトにつける名札の働きをするが、変数と違って一度代入したあとに変更をすると警告される。
先頭にアルファベットの大文字で始まるものが定数となる。

constant.rb
RUBY_VERSION = 2.2.0 # 定数

配列(Array)

配列はいくつかのオブジェクトを順に並べて格納していくオブジェクトの集合体として、基本的によく使われる。

配列の作り方

配列を作るには、要素を,で区切り[]で囲むことで作られる。
中身が空な配列を作るためには要素を書かず、[]で囲むことで作れる。
また%wを使うことで,の区切りがなしで要素が書ける。

array.rb
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を指定してあげることで参照できる。

array_reference.rb
names = ["田中","小林"]
puts names[0] # 田中 

配列にオブジェクトを格納する

すでに作られている配列にオブジェクトを格納することができる。
配列名[格納する場所] = 格納するオブジェクト

array_store.rb
names = []
names[0] = '田中'

ハッシュ(Hash)

文字列やシンボルなどをキーにしてオブジェクトを格納する。

シンボル(Symbol)

文字列に似たオブジェクトでRubyがメソッドなどの名前の識別に使うラベルをオブジェクトにしたもの。
シンボルは先頭に「:」を付ける。

symbol.rb
sym = :foo

ハッシュの構成は
{Key => value}となる。
key オブジェクトを取り出すためのもの
value キーと紐付けされているオブジェクト

ハッシュの作り方

新しいハッシュを作る場合{key => value}または{ket: value}で作ることができる。
また空のハッシュを作る場合は{}で囲むことで作ることができる。

hash.rb
person = { :name => 'Bob', :age => 22 }
#または
person_oth = { name: 'Bob', age: 22 }

ハッシュの操作

ハッシュからオブジェクトを取り出すことや、オブジェクトの格納は配列の時と同じです。

hash_ope.rb
person = {}
person[:name] = 'Bob'
person[:age] = 22
puts person[:name]
puts person[:age]

コメント

コメント文の先頭「#」を付けることでコメントとなる。
複数行の場合は コメント文の先頭に「=bigin」後尾に「=end」を付ける。これをブロックコメントと言う。

./comment.rb
# コメント

=begin
複数行コメント
複数行コメント
複数行コメント
=end

※ コーディング規約である「The Ruby Style Guide」にはブロックコメントを使わないことが推奨されています。

制御構造

  • 随時処理
    プログラムを書かれた通りに、先頭から順に実行する。

  • 条件分岐
    ある条件が成り立つ場合と成り立たない処理を実行する。

  • 繰り返し
    ある条件が成り立つ間、処理を繰り返す。

条件分岐

条件分岐をするための処理として、「if文」「unless文」などが準備されている。

if文

if文は最も基本的な条件判断文である。
if 条件 ~ end の中に処理を書く

if.rb
pet = 'Dog'
if pet == 'Dog' # if 条件
    puts 'petはDog' # 条件が正の場合に実行する文
end

※ コーディング規約である「The Ruby Style Guide」ifの実行する文が一行の場合は1行に纏める書き方が推奨されている

if.rb
pet = 'Dog'
puts 'petはDog'if pet == 'Dog' # 実行する文 if 条件

条件が偽の場合、実行する文を書く場合は下記の通りに書く

if_else.rb
pet = 'Cat'
if pet == 'Dog' # if 条件
    puts 'petはDog' # 条件が正の場合に実行する文
else
    puts 'petはDogではない' # 条件が偽の場合に実行する文
end

条件が偽の場合、if文を実行される場合は下記の通りに書く

if_elsif.rb
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の中に処理を書く

unless.rb
num = 100
unless num == 100 # unless 条件
    puts 'numは100ではない' # 条件が偽の場合に実行する文
end

※ コーディング規約である「The Ruby Style Guide」unlessの実行する文が一行の場合は1行に纏める書き方が推奨されている

unless.rb
num = 100
puts 'numは100ではない' unless num == 100 # 条件が偽の場合に実行する文 unless 条件 
end

繰り返し

同じ処理をするための処理として、「for文」「while文」until文」「timesメソッド」「eachメソッド」「loopメソッド」などが準備されている。
今回は「timesメソッド」「eachメソッド」「loopメソッド」について説明する。

timesメソッド

一定回数同じ処理をさせる場合に使用される。
オブジェクト.times do ~ end の中に処理を書く

times.rb
10.times do  #オブジェクト.times do
    puts 'test'  #実行する文
end

また実行回数をしる為には
オブジェクト.times do |変数| ~ endと書く

times.rb
10.times do |i|  #オブジェクト.times do |変数|
    puts "#{i} test"  #実行する文
end

eachメソッド

オブジェクトの集りに対して1つずつ取り出して処理をしていく時に使用される。
オブジェクト.each do |変数| ~ endの中処理を書く

each.rb
nums = [1,2,3,4,5]
nums.each do |num|
    puts num
end

今回は説明していないが、for文と同じ動きをしている

for.rb
nums = [1, 2, 3, 4, 5]
for num in nums
    puts num
end

loopメソッド

終了条件がない繰り返しをする時に使用される。
「timesメソッド」と「eachメソッド」はオブジェクトが終ると終了という条件で動いているが、loopは終了条件がない。
loop do ~ end の中に処理を書く

loop.rb
loop do
    puts 'loop ‹‹\(´ω` )/››‹‹\(  ´)/››‹‹\( ´ω`)/››'
end 

繰り返しを終了させるにはbreakという繰り返しを終らせる命令文が必要である

例 変数countが10以上になると終了する

count_break.rb
count = 0
loop do
    if count >= 10
        break
    end
        puts count
    count += 1
end

後編

Rubyを少しでも書けるために最低限知っておく必要な知識 後編

参考文献

楽しいRuby 第4版

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11