記事概要
Rubyについて、まとめる。
Rubyとは
- プログラミング言語の1つ
- 記述がシンプルでわかりやすく、実用的
- 大きなWebアプリケーションから小さなプログラムまで、さまざまなソフトウェアを作成可能
Rubyの実行方法
.rbファイル
rubyコマンドを実行する
-
[ファイル名].rb
を作成 - 上記で作成したファイルに、ソースコードを記述
- rubyコマンドでプログラムを実行
- ファイルのディレクトリに移動後、rubyコマンドを実行
# Rubyファイルが存在するディレクトリに移動 % cd ~/[Rubyファイルが存在するディレクトリ] # rubyコマンドの実行 % ruby [ファイル名].rb
- 絶対パスでRubyファイルを指定し、rubyコマンドを実行
# rubyコマンドの実行 % ruby /~/[Rubyファイルが存在するディレクトリ]/[ファイル名].rb
- ファイルのディレクトリに移動後、rubyコマンドを実行
ターミナル
irbコマンドを実行する
- irbコマンドで、ターミナルから直接Rubyのプログラムを実行させる機能を起動する
% irb
- ソースコードを記述し、エンターボタンを押す
-
exit
でプログラム実行機能を終了させるirb(main):001> exit
- プロンプトが表示される
%
フレームワーク
Sinatra
Ruby on Rails(Rails)
Rubyの構成
コメントアウト
コメントアウトする場合は、先頭に#
を書く
# コメントアウト
# コメントアウトは
複数行に適用されない
バックスラッシュ記法
\
から始まる文字の記法のこと
"
で囲んだ文字列の中で、ただの文字ではなく改行などとして出力される
記法 | 意味 |
---|---|
\n | 改行 |
\t | タブ |
\b | バックスペース |
\ | バックスラッシュ |
irb(main):001> puts "改行したい改行したい\n改行した"
改行したい改行したい
改行した
=> nil
文字列
文字を扱うための値
生成方法
"
または'
で囲む
"Hello World!"
'Hello World!'
連結
文字列同士を+
で繋ぐことで、文字列を連結できる
irb(main):001> 'Hello ' + 'World!'
=> Hello World!
数値
数を表現する値であり、計算することが可能
生成方法
"
や'
を使用せず、数値を入力
# 整数
10
# 負の値
-10
# 小数
3.14
演算子
値の計算や比較などに使用する記号のこと
代数演算子
四則計算を行う演算子
代数演算子 | 説明 |
---|---|
+ | 足し算 |
- | 引き算 |
* | 掛け算 |
/ | 割り算 |
% | 剰余(割ったあまり) |
# 足し算
irb(main):001> 1000 + 2000
=> 3000
# 引き算
irb(main):002> 3000 - 1500
=> 1500
# 掛け算
irb(main):003> 50 * 40
=> 2000
# 割り算
irb(main):004> 600 / 15
=> 40
# 剰余(5 ÷ 2をした余り)
irb(main):005> 5 % 2
=> 1
自己代入演算子
自分自身に代入する演算子
自己代入演算子 | 例 | 処理 |
---|---|---|
+= | num += 2 | numに2足した値をnum自身に代入 |
-= | num -= 2 | numから2引いた値をnum自身に代入 |
*= | num *= 2 | numに2かけた値をnum自身に代入 |
/= | num /= 2 | numを2で割った値をnum自身に代入 |
# 通常の代入演算子を使用した場合
irb(main):001> num = 1
=> 1
irb(main):002> num = num + 2
=> 3
# 自己代入演算子を使用した場合
irb(main):001> num = 1
=> 1
irb(main):002> num += 2
=> 3
比較演算子
値同士を比較する演算子
比較演算子 | 例 | 処理 |
---|---|---|
> | A > B | AはBより大きいか |
>= | A >= B | AはB以上か |
< | A < B | AはBより小さいか |
<= | A <= B | AはB以下か |
== | A == B | AとBは等しいか |
# 1は20より小さいか?
irb(main):001> 1 < 20
=> true
論理演算子
式の真偽の確認や、真偽値に対しての演算を行う演算子
論理演算子 | 例 | 例の処理 | 処理 |
---|---|---|---|
!= | A != B | AはBと等しくないか | AとBが等しくない場合に、”true”を返す |
&& | 条件A && 条件B | 条件Aと条件Bが共にtrueか | 2つの条件が共に”true”の場合は、”true”を返す 片方の条件が”false”の場合は、”false”を返す 2つの条件が共に”false”の場合は、”false”を返す |
# 2 × 3 は6か?
irb(main):001> 2 * 3 == 6
=> true
# 2 × 3 は6ではないか?
irb(main):002> 2 * 3 != 6
=> false
# 2 × 3 は10ではないか?
irb(main):003> 2 * 3 != 10
=> true
真偽値
式が真か偽かを扱う値
真であればtrue
、偽であればfalse
になる
式
文字列や数値の他に、メソッドの呼び出し、変数や演算子式など
"文字列"
1000
(1 + 5)
などは、すべて式
式展開
文字列の中に式を入れることができる機能
生成方法
"
で囲んだ文字列の中で#{式}
と記述する
# 式展開で文字列に式を含む
irb(main):001> "今日で#{20}歳になりました"
=> "今日で20歳になりました"
# シングルクォーテーションだと式展開されない
irb(main):002> '今日で#{20}歳になりました'
=> "今日で\#{20}歳になりました"
メソッド
プログラミングにおける何らかの処理をまとめたもの
処理
戻り値
メソッドが処理された後の最終的な値のこと
返り値ともいう
# 文字列だけだと、そのままその値が戻り値になる
irb(main):001> "Hello World"
=> "Hello World"
# 文字列にlengthメソッドを使うと、数値が戻り値になる
irb(main):002> "Hello World".length
=> 11
return文
returnの後ろに続けた式がそのメソッドの戻り値に決まり、メソッドはその行の処理を終えると強制的に終了する
-
return ◯◯
と記述する
# returnを利用した場合
irb(main):001* def sample
irb(main):002* "1"
irb(main):003* "2"
irb(main):004* "3"
irb(main):005* return "4" # ここで処理が終了し、戻り値になる
irb(main):006* "5" # 呼び出されない
irb(main):007* "6" # 呼び出されない
irb(main):008> end
=> :sample
irb(main):009> sample
=> "4"
# returnを省略した場合
irb(main):001* def sample
irb(main):002* "1"
irb(main):003* "2"
irb(main):004* "3"
irb(main):005* "4"
irb(main):006* "5"
irb(main):007* "6" # 最後の行が戻り値になる
irb(main):008> end
=> :sample
irb(main):009> sample
=> "6"
引数
メソッドなどに渡すことのできる値のこと
def メソッド名(仮引数)
# メソッドの処理
end
メソッド名(実引数) # メソッドの呼び出し
irb(main):001* def sample(number) # ②仮引数numberで、実引数「3」の値を受け取る
irb(main):002* puts number * number # ③「3」が代入されたnumberを使って「3 * 3」を行い出力する
irb(main):003> end
=> :sample
irb(main):004> sample(3) # ①数値「3」を実引数にしてメソッドを呼び出し
9
=> nil
引数は複数渡すことができる
※実引数と仮引数の数は、必ず一致している必要がある
def メソッド名(第一引数, 第二引数)
# メソッドの処理
end
メソッド名(第一引数, 第二引数) # メソッドの呼び出し
irb(main):001* def sample (fruit,price)
irb(main):002* puts "#{fruit}は、#{(price * 1.1).to_i}円(税込)です"
irb(main):003> end
=> :sample
irb(main):004> sample("りんご",100)
りんごは、110円(税込)です
=> nil
スコープ
定義した変数が使える範囲のこと
defで定義するメソッドのスコープ | times,eachメソッドのスコープ | |
---|---|---|
メソッドの外で定義した変数 | (引数を使わない限り)メソッドの中で使用できない | メソッドの中で使用できる |
メソッドの中で定義した変数 | メソッドの外で使用できない | メソッドの外で使用できない |
メソッドの定義
自分でメソッドを定義することも可能
イメージ
処理
# メソッドの定義
def メソッド名
# メソッドの処理
end
メソッド名 # メソッドの呼び出し
# メソッドの定義
irb(main):001* def say_hello
irb(main):002* puts "Hello World"
irb(main):003> end
=> :say_hello
# メソッドの呼び出し
irb(main):004> say_hello
Hello World
=> nil
変数
値を入れる箱のようなもの
イメージ
宣言
変数を作ること
定義
宣言した変数にどのような値を入れるのか記述すること
代入
「変数の箱の中に値を入れる」という意味
-
=
を使用する
# numという変数の中身を、1であると定義する
irb(main):001> num = 1
=> 1
# numを呼び出すと、格納された1が返ってくる
irb(main):002> num
=> 1
# 何度実行しても、格納された1が返ってくる
irb(main):003> num
=> 1
再代入
1度値を代入したあとの変数に、別の値を再び代入すること
# 変数numに1を代入
irb(main):001> num = 1
=> 1
# 変数numを出力
irb(main):002> num
=> 1
# 変数numに2を再代入
irb(main):003> num = 2
=> 2
# 変数numを出力
irb(main):004> num
=> 2
命名規則
変数の名前は自由に決められるが、一定のルールがある
命名規則 | 説明 |
---|---|
変数の中身が何かわかる | どんな名前もつけられるが、aaa のような意味のない名前は避ける |
小文字で始める | 大文字からも開始できるが、とくに理由がない場合は避ける |
_ で始めない |
_ からも開始できるが、とくに理由がない場合は避ける2文字目以降には使える |
数字で始めない | 1文字目に使うとエラーが発生する 2文字目以降には使える |
日本語を使わない | 文字列以外では日本語は使えないため、変数名も日本語は使えない |
スペースを含めない | 名前にスペースが入るとエラーが発生する |
予約語を使用しない | Rubyには文法などで使うことがあらかじめ決まっている単語があり、それを予約語と呼ぶ これらを使うとエラーが発生する |
難しいこと
値に名前をつけて管理することは得意だが、複数の情報を管理することは難しい
配列
1つの変数で複数の値を持つことのできる値であり、データと順番を紐づけて情報を管理する
-
変数 = []
で、配列を宣言する
イメージ
要素
配列の中のデータ
# 配列membersの宣言
irb(main):001> members = ['Naruto', 'Sasuke', 'Sakura']
=> ["Naruto", "Sasuke", "Sakura"]
# 配列membersの表示
irb(main):002> puts members
Naruto
Sasuke
Sakura
=> nil
要素の追加
生成済みの配列に対して、要素を新しく追加できる
-
配列 << 追加する要素
で、配列に要素を追加する
# 配列membersの宣言
irb(main):001> members = ['Naruto', 'Sasuke', 'Sakura']
=> ["Naruto", "Sasuke", "Sakura"]
irb(main):002> puts members
Naruto
Sasuke
Sakura
=> nil
# 要素の追加
irb(main):003> members << 'Sai'
=> ["Naruto", "Sasuke", "Sakura", "Sai"]
irb(main):004> puts members
Naruto
Sasuke
Sakura
Sai
=> nil
添字
配列の各要素に割り振られた番号のこと
- 各要素に対して自動的に、順番に割り当てられる
- 添字は「0」から始まる
要素の取得
配列に格納されている値を取得する際には、添字を使用する
-
配列[添字]
で、指定した添字の要素を取得する
# 配列membersの宣言
irb(main):001> members = ['Naruto', 'Sasuke', 'Sakura']
=> ["Naruto", "Sasuke", "Sakura"]
# 配列membersの添字1に格納されている要素を表示
irb(main):002> puts members[1]
Sasuke
=> nil
要素の変更
配列に追加されている要素を変更できる
-
配列[添字] = 値
で、指定した添字の要素を変更する
# 配列membersの宣言
irb(main):001> members = ['Naruto', 'Sasuke', 'Sakura']
=> ["Naruto", "Sasuke", "Sakura"]
irb(main):002> puts members
Naruto
Sasuke
Sakura
=> nil
# 配列membersの添字1の要素を変更
irb(main):003> members[1] = 'Sai'
=> "Sai"
irb(main):004> puts members
Naruto
Sai
Sakura
=> nil
要素の削除
配列の要素を削除できる
- 既存の要素が削除された場合、添字は繰上げられる
# 配列membersの宣言
irb(main):001> members = ['Naruto', 'Sasuke', 'Sakura']
=> ["Naruto", "Sasuke", "Sakura"]
irb(main):002> puts members
Naruto
Sasuke
Sakura
=> nil
# 配列membersの添字1に格納されている要素を削除
irb(main):003> members.delete_at(1)
=> "Sasuke"
irb(main):004> puts members
Naruto
Sakura
=> nil
irb(main):006> puts members[1]
Sakura
=> nil
難しいこと
複数の情報を順番で管理することは得意だが、複数の情報同士の関係性を示すことは難しい
ハッシュ
関係のある複数の値を管理するときに使用する
-
変数 = {}
で、ハッシュを宣言する
イメージ
ハッシュの生成
=>
を使用し、キーとバリューをセットにして記述する
変数 = { キー1 => バリュー1, キー2 => バリュー2, キー3 => バリュー3 }
バリュー
ハッシュのデータ
キー
ハッシュのデータに対応する名前
※文字列も数値も使用できる
シンボル
見た目は文字列のようだが、コンピューターが処理するときには数値として扱われる値のこと
※ハッシュのキーとしてよく使われる
# 以下はどちらもコンピューターが処理するときには同じ値として扱われる
:"name"
:name # よく使用される
ハッシュ生成の記述
# 文字列をキーに使用する書き方
member = {"name" => "Naruto"}
# ハッシュを使用し、文字列と同じ書き方
member = {:name => "Naruto"}
# シンボルをキーに使用する場合のみ可能な書き方
member = {name: "Naruto"}
要素の追加
生成済みのハッシュに対して、要素を新しく追加できる
-
ハッシュ[キー] = 値
で、ハッシュに要素を追加する
# ハッシュmemberの生成
irb(main):001> member = {name: 'Naruto', height: 147.5}
=> {:name=>"Naruto", :height=>147.5}
irb(main):002> puts member
{:name=>"Naruto", :height=>147.5}
=> nil
# 要素の追加
irb(main):003> member[:age] = 13
=> 13
irb(main):004> puts member
{:name=>"Naruto", :height=>147.5, :age=>13}
=> nil
要素の取得
ハッシュの持っている値を取得する際には、キーを使用する
-
ハッシュ[キー]
で、ハッシュの要素を取得する
# ハッシュmemberの生成
irb(main):001> member = {name: 'Naruto', height: 147.5}
=> {:name=>"Naruto", :height=>147.5}
# 要素の取得
irb(main):002> puts member[:name]
Naruto
=> nil
要素の変更
ハッシュに格納されている要素を変更できる
-
ハッシュ[キー] = 値
で、指定したキーの要素を変更する
# ハッシュmemberの生成
irb(main):001> member = {name: 'Naruto', height: 147.5}
=> {:name=>"Naruto", :height=>147.5}
irb(main):002> puts member[:height]
147.5
=> nil
# 要素の変更
irb(main):003> member[:height] = 180
=> 180
irb(main):004> puts member
{:name=>"Naruto", :height=>180}
=> nil
要素の削除
ハッシュの要素を削除できる
# ハッシュmemberの生成
irb(main):001> member = {name: 'Naruto', height: 147.5, weight: 40.6}
=> {:name=>"Naruto", :height=>147.5, :weight=>40.6}
irb(main):002> puts member
{:name=>"Naruto", :height=>147.5, :weight=>40.6}
=> nil
# 要素の削除
irb(main):003> member.delete(:weight)
=> 40.6
irb(main):004> puts member
{:name=>"Naruto", :height=>147.5}
=> nil
難しいこと
複数の情報同士の関係性を示すことは得意だが、同じ構造のまとまりを管理することは難しい
配列とハッシュの違い
配列とハッシュの組み合わせ
別々の意味を持つ複数の値のまとまり自体を、複数管理することができる
イメージ
配列とハッシュの生成
# 配列team7の宣言
irb(main):001> team7 = []
=> []
# ハッシュmemberの宣言
irb(main):002> member = {}
=> {}
# ハッシュmemberに要素を追加
irb(main):003> member[:name] = 'Naruto'
=> "Naruto"
irb(main):004> member[:height] = 147.5
=> 147.5
# ハッシュmemberを配列team7に追加
irb(main):005> team7 << member
=> [{:name=>"Naruto", :height=>147.5}]
# ハッシュmemberの宣言
irb(main):006> member = {}
=> {}
# ハッシュmemberに要素を追加
irb(main):007> member[:name] = 'Sasuke'
=> "Sasuke"
irb(main):008> member[:height] = 153
=> 153
# ハッシュmemberを配列team7に追加
irb(main):009> team7 << member
=> [{:name=>"Naruto", :height=>147.5}, {:name=>"Sasuke", :height=>153}]
# ハッシュmemberの宣言
irb(main):010> member = {}
=> {}
# ハッシュmemberに要素を追加
irb(main):011> member[:name] = 'Sakura'
=> "Sakura"
irb(main):012> member[:height] = 150.1
=> 150.1
# ハッシュmemberを配列team7に追加
irb(main):013> team7 << member
=> [{:name=>"Naruto", :height=>147.5}, {:name=>"Sasuke", :height=>153}, {:name=>"Sakura", :height=>150.1}]
# 配列team7を表示
irb(main):014> puts team7
{:name=>"Naruto", :height=>147.5}
{:name=>"Sasuke", :height=>153}
{:name=>"Sakura", :height=>150.1}
=> nil
# Sakuraの身長を表示
irb(main):015> puts team7[2][:height]
150.1
=> nil
表の作成
クラスとインスタンス
条件分岐処理
条件を満たしているかどうかで実行内容を分岐する処理であり、「条件分岐」とも呼ばれる
「もし〇〇だったら△△をする」と処理を分けられる
条件式
分岐の条件として記述する式
if文
条件式が正しいか正しくないかで処理を分岐させることができる
if 条件式
# 条件式が真(true)のときに実行する処理
end
irb(main):001> value = 3
=> 3
irb(main):002* if value > 0
irb(main):003* puts "値は正です"
irb(main):004> end
値は正です
=> nil
else(if文)
条件式の結果が正しくない場合の処理を行う
if 条件式
# 条件式が真(true)のときに実行する処理
else
# 条件式が偽(false)のときに実行する処理
end
irb(main):001> value = -3
=> -3
irb(main):002* if value > 0
irb(main):003* puts "値は正です"
irb(main):004* else
irb(main):005* puts "値は負です"
irb(main):006> end
値は負です
=> nil
elseif(if文)
条件を満たさなかった場合に対して、ifのように条件式を追加できる
if 条件式1
# 条件式1が真(true)のときに実行する処理
elsif 条件式2
# 条件式1が偽(false)のとき、かつ
# 条件式2が真(true)のときに実行する処理
else
# 条件式1と条件式2がどちらとも偽(false)のときに実行する処理
end
irb(main):001> value = 0
=> 0
irb(main):002* if value > 0
irb(main):003* puts "値は正です"
irb(main):004* elsif value < 0
irb(main):005* puts "値は負です"
irb(main):006* else
irb(main):007* puts "値は0です"
irb(main):008> end
値は0です
=> nil
繰り返し処理
同じ内容を繰り返し行う処理であり、ループ処理とも呼ばれる
処理
ブロック
do
とend
で囲まれた処理のまとまりのこと
ブロック変数
ブロック内でのみ使用できる変数のこと
|任意の変数名|
で定義できる
数値.times do |ブロック変数|
# 繰り返す処理
# 繰り返しの回数を使う場合、ブロック変数を使用する
end
irb(main):001* 3.times do |i|
irb(main):002* puts i += 1
irb(main):003> end
1
2
3
=> 3
強制終了
プログラム実行中に、control + C
で強制終了できる