【Ruby】基本コマンド一覧
Rubyの基本コマンドの一覧と実例。
目次
- puts, print, pの違い
- 定数
- オブジェクトのクラス一覧表示(.class)
- オブジェクトのメソッド一覧表示(.methods)
- 小数点以下の計算
-
小数点の表示桁数指定
7. format(または sprintf)
8. round, ceil, floorメソッド -
文字列
10. 式展開
11. 連結
12. 繰り返し
13. 文字数カウント(.length)
14. 文字列から数値に変換(.to_i) -
配列
11. 配列の要素取得
12. 要素追加(push or <<)
13. 配列の長さ取得(size, length, count)
14. ソート -
ハッシュオブジェクト
12. 作成と呼び出し
13. 要素追加
14. 要素削除(.delete(:キー名)) -
条件分岐
13. if
14. case,when -
繰り返し
14. for in
15. each do
16. while
17. times do
18. loop + break
19. スキップ(if next) - メソッドの作成と呼び出し
- クラスの作成とインスタンスの生成
## puts, print, pの違い それぞれに微妙な違いはあるものの、putsついで、pだけ覚えておけばいい。
それぞれの差は、改行の有無や型表現の有無。
メソッド | puts | p | |
---|---|---|---|
用途 | 本番用 | デバッグ用 | pythonの名残? |
改行 | あり | あり | なし |
型表現 | なし | あり | なし |
putsとprintの違い(改行の有無)
puts "こんにちは"
puts 123
# こんにちは
# 123
print "こんにちは"
print 123
# こんにちは123
▼「p」の場合、文字列のテキストにダブルクオテーションがつく
putsと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構文の構造
# 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です。
以上。