【Ruby】基本コマンド一覧
Rubyの基本コマンドの一覧と実例。
目次
- puts, print, pの違い
- 定数
- オブジェクトのクラス一覧表示(.class)
- オブジェクトのメソッド一覧表示(.methods)
- 小数点以下の計算
- 小数点の表示桁数指定
- 文字列
- 配列
- ハッシュオブジェクト
- 条件分岐
- 繰り返し
- メソッドの作成と呼び出し
- クラスの作成とインスタンスの生成
puts, print, pの違い
それぞれに微妙な違いはあるものの、putsついで、pだけ覚えておけばいい。
それぞれの差は、改行の有無や型表現の有無。
メソッド | puts | p | |
---|---|---|---|
用途 | 本番用 | デバッグ用 | pythonの名残? |
改行 | あり | あり | なし |
型表現 | なし | あり | なし |
puts "こんにちは"
puts 123
#こんにちは
#123
print "こんにちは"
print 123
#こんにちは123
▼「p」の場合、文字列のテキストにダブルクオテーションがつく
puts "こんにちは"
puts 123
#こんにちは
#123
p "こんにちは"
p 123
#"こんにちは"
#123
定数
・変数を大文字で定義
・単語を複数つなげる場合はアンスコを使用
・上書きしたり、再定義するとエラーが出る
TAX_RATE = 1.0
puts TAX_RATE
#上書き指示
TAX_RATE = 1.5
#warning: already initialized constant TAX_RATE
#warning: previous definition of TAX_RATE was here
オブジェクトのクラス一覧表示(.class)
p オブジェクト.class
p 1.1.class
#Float
オブジェクトのメソッド一覧表示(.methods)
p オブジェクト.methods
p 1.1.methods
#[:-@, :**, :<=>, :<=, :>=, :==, :===, :eql?, :%, :inspect, :*, :+, :-, :/, :<, :>, :to_int, :coerce, :to_s, :divmod, :to_i, :to_f, :to_r, :fdiv, :modulo, :abs, :magnitude, :zero?, :finite?, :infinite?, :floor, :ceil, :round, :truncate, :positive?, :negative?, :numerator, :denominator, :rationalize, :arg, 以下省略...
p "abc".methods
#[:encode, :encode!, :unpack, :unpack1, :include?, :%, :*, :+, :count, :partition, :to_c, :sum, :next, :casecmp, :casecmp?, :insert, :bytesize, :match, :match?, :succ!, :<=>, :next!, :upto, 以下省略...
小数点以下の計算
計算する整数に「.0」をつけると小数点まで表示する。
┗ どちらか一方
┗ 桁数を指定するものではない
┗ ない場合は切り捨て
p 8.0 / 3
p 8/3.0
p 8/3
#2.6666666666666665
#2.6666666666666665
#2
round, ceil, floorメソッド
.round
:四捨五入
.ceil
:切り上げ
.floor
:切り捨て
p 8.0/7
p (8.0/7).round
p (8.0/7).ceil
p (8.0/7).floor
#1.1428571428571428
#1 round
#2 ceil
#1 floor
小数点の表示桁数指定
format(または sprintf)
format("%.桁数f", 対象数値)
calc = 8/3.0
puts format("%.2f", calc)
puts sprintf("%.2f", calc)
#2.67
#2.67
round, ceil, floorメソッド
オブジェクト.round(桁数)
オブジェクト.ceil(桁数)
オブジェクト.floor(桁数)
puts calc.round(2)
puts calc.round(3)
#2.67
#2.667
puts calc.ceil(2)
puts calc.ceil(3)
#2.67
#2.667
puts calc.floor(2)
puts calc.floor(3)
#2.66
#2.666
文字列
式展開
puts "#{数式や変数}"
┗ ダブルクオテーション
┗ シングルだとそのまま出力
puts "tax #{1000 * 0.10}"
#tax 100.0
puts 'tax #{1000 * 0.10}'
#tax #{1000 * 0.10}
連結
puts 文字列 + 文字列
puts "Hello" + "World"
#HelloWorld
文字列の繰り返し
puts 文字列 * n
puts "Hello★" * 5
#Hello★Hello★Hello★Hello★Hello★
文字数カウント(.length)
puts 文字列.length
str = "hello world"
p str.length
#11
文字列から数値に変換(.to_i)
puts 文字列.to_i
str = "123"
p str
p str.to_i
#"123"
#123
配列
配列の要素取得
変数 = [ , , , ]
colors = ["red", "blue", "white"]
p colors[0]
p colors[3] #nil
p colors
#"red"
#nil
#["red", "blue", "white"]
要素追加(push or <<)
・オブジェクト.push(追加要素)
・オブジェクト << (追加要素)
colors = ["red", "blue", "white"]
p colors.push("green")
#["red", "blue", "white", "green"]
p colors << ("black")
#["red", "blue", "white", "green", "black"]
配列の長さ取得(size, length, count)
・オブジェクト.size
・オブジェクト.length
・オブジェクト.count
colors = ["red", "blue", "white", "green", "black"]
p colors.length
p colors.size
p colors.count
#5
#5
#5
ソート
・オブジェクト.sort
・オブジェクト.sort.reverse
colors = ["red", "blue", "white", "green", "black"]
p colors.sort
p colors.sort.reverse
#["black", "blue", "green", "red", "white"]
#["white", "red", "green", "blue", "black"]
numbers = [5, 8, 1, 4, 9]
p numbers.sort
p numbers.sort.reverse
#[1, 4, 5, 8, 9]
#[9, 8, 5, 4, 1]
ハッシュオブジェクト
作成と呼び出し
書き方は3種類あるが、省略形のみ覚えておけばいい。
作成
変数 = {キー:値, キー:値,,,}
呼び出し
変数[:キー名]
scores = {tanaka:100, sato:80, ito:50}
p scores
p scores[:sato]
#{:tanaka=>100, :sato=>80, :ito=>50}
#80
▼他の記述方法
score1 = {"tanaka" => 100, "sato"=>80, "ito"=>50 }
score2 = {:tanaka =>100, :sato=>80, :ito=>50}
score3 = {tanaka:100, sato:80, ito:50}
p score1
p score2
p score3
#{:tanaka=>100, :sato=>80, :ito=>50}
#{:tanaka=>100, :sato=>80, :ito=>50}
#{:tanaka=>100, :sato=>80, :ito=>50}
要素追加
変数[:キー名] = 値
scores = {tanaka:100, sato:80, ito:50}
scores[:suzuki] = 40
p scores
#{:tanaka=>100, :sato=>80, :ito=>50, :suzuki=>40}
要素削除(.delete(:キー名))
変数.delete(:キー名)
scores = {tanaka:100, sato:80, ito:50, suzuki:40}
scores.delete(:suzuki)
p scores
#{:tanaka=>100, :sato=>80, :ito=>50}
条件分岐
if
条件式で処理を分岐する。
if, elsif, else, end
stock = 5 #在庫
if i >= 10
puts '在庫:◎'
elsif i > 3
puts '在庫:△'
elsif i == 1
puts '在庫:ラスト1個'
else
puts '在庫:×'
end
#在庫:△
case,when
値で条件式を分岐する。
case, when, else, end
# case 評価したい変数
# when 数値
# 処理
# when 範囲(開始値..終値)
# 処理
# when 範囲(開始値..終値)
# 処理
# else
# 処理
# end
▼実例
age = 6
case age
when 0..5
puts 800
when 6..11
puts 1800
else
puts 2500
end
#1800
・開始値 .. 終値
┗ 開始値〜終値までの範囲
繰り返し
for in
for 変数 in 範囲
x = ["A", 1, "b", 3]
for i in x
puts i
end
#A
#1
#b
#3
for i in 0..3
puts i
end
#0
#1
#2
#3
each do
eschメソッドによる繰り返し。
オブジェクト.each do |変数| 処理 end
arrays = ["A", 1, "b", 3]
arrays.each do |array|
puts array
end
#A
#1
#b
#3
while
条件範囲内での繰り返し。
while 条件式 処理 end
i = 0
while i < 3
puts i
i += 1
# i++は使えない
end
#0
#1
#2
times do
繰り返し回数の指定。
数値.times do |変数|
┗ 変数にインデックス番号が入る(0始まり)
3.times do |i|
puts "#{i}回目の処理です"
end
#0回目の処理です
#1回目の処理です
#2回目の処理です
loop + break
無限ループと終了条件の組み合わせによる繰り返し。
loop{処理 if 条件 break end}
┗ 終了条件(break)がないとエラーになる
i = 0
loop{
puts i
i += 1
if i >=3
break
end
}
#0
#1
#2
#3
スキップ(if next)
指定条件のみスキップする。
if 条件式 next end
┗ 繰り返し処理の中で使用する。
3.times do |i|
if i == 1
next
end
puts "#{i}回目の処理です"
end
#0回目の処理です
#2回目の処理です
メソッドの作成と呼び出し
▼作成
def メソッド名() 処理 end
┗ 引数なしの場合は()不要。
▼呼び出し
メソッド名()
def hello(name)
puts "Hello #{name}さん"
end
hello("Yuta")
#Hello Yutaさん
▼事例2
def ttl_price(price, n)
return (price * n * 1.10).floor #returnは省略可能
end
puts ttl_price(500, 3)
#1650
クラスの作成とインスタンスの生成
クラスの作成
class クラス名 end
- クラス名は頭文字大文字。
- initializeメソッド:インスタンス作成時に自動で呼び出されるメソッド。
- プロパティは@で定義。
class User
def initialize(name)
@name = name
end
def say_name
puts "私は#{@name}です。"
end
end
インスタンスの生成
変数 = クラス名.new(引数)
tanaka = User.new("tanaka")
tanaka.say_name
#私はtanakaです。
yamada = User.new("yamada")
yamada.say_name
#私はyamadaです。
以上。