print "Hello, world!"
puts "Hello, world!"
p "Hello, world!"
print "Hello!"; puts "Hello!"
# コメント
==begin
コメント
==end
msg = "Hello, world!"
EMAIL = "example@example.com"
1文字目が大文字だと定数として認識されるが、すべて大文字で書く。
x, y = 3, 5
左辺の変数の数よりも右辺の値の数が少ない場合、超えた分はnil
が代入される。
$global = 10
プログラムのどこからでも参照できる。
整数 | 10 |
実数 | 20.5 |
分数(3分の1) | 1/3r |
Rational(1, 3) |
数値オブジェクトはアンダーバー(_
)を無視するため、桁の大きい数値を書くときに、100_000_000
と書くことができる。
変数展開 | 特殊文字(\n, \t )
| |
ダブルクォーテーション | ○ | ○ |
シングルクォーテーション | × | × |
p "Hello, #{name}!"
puts 'Hello, ' + 'world!' # Hello, world!
puts 'Hello' * 3 # HelloHelloHello
sales = [3, 8, 2]
p sales[1]
sales[1] = 8
[1] | 2個目 |
[0..2] | 1〜3個目 |
[0...2] | 1・2個目 |
[-1] | 最後 |
[0, 2] | 1番目から2個分(1・2個目) |
添字の数字は0から始まる。
sales[1, 0] = [10, 11] # 2個目の要素の後に10, 11を追加
sales << 100 << 102
x = a + b
sales = {"yamada" => 100, "tanaka" => 200}
シンボル(少し高速):
sales = {:yamada => 100, :tanaka => 200}
sales = {yamada: 100, tanaka: 200}
p sales["yamada"]
シンボル(少し高速):
p sales[:yamada]
sales["yamada"] = 120
変数 = Time.now / 変数 = Time.new
変数 = Time.new(年, 月, 日, 時, 分, 秒, タイムゾーン)
変数 = Time.utc(年, 月, 日, 時, 分, 秒)
月以降は省略可能。
タイムゾーン指定例:'+09:00'
変数 = Time.at(1970/01/01からの経過秒数)
秒を足したり引いたりすることで、時間の計算ができる。
p Time.new + 60 # 1分後
p Time.new + 60 * 60 * 24 * 3 # 3日後
s = %Q(Hello)
()
は、記号または括弧なら何でも良い:
s = %Q{Hello}
s = %Q!Hello!
% | 文字列(式展開有効) | |
%Q | ||
%q | 文字列(式展開無効) | |
%x | 文字列(バッククォート) | |
%W | 文字列の配列(式展開有効) | スペース区切り(スペースを含む文字列は\でエスケープ) |
%w | 文字列の配列(式展開無効) | |
%r | 正規表現 |
式展開有効:ダブルクォーテーションと同じ
式展開無効:シングルクォーテーションと同じ
if 条件
真の場合の処理
end
if 条件
真の場合の処理
else
偽の場合の処理
end
if 条件
真の場合の処理
elsif 条件
真の場合の処理
else
偽の場合の処理
end
例:
score = 80
if score > 60
puts "ok"
elsif score > 40
puts "soso"
else
puts "ng"
end
puts "OK" if score > 60
変数 = 条件 ? b : c
b, c = 10, 20
a = b > c ? b : c # 大きい方をaに代入
puts "Hello" if x
true
:false, nil
以外
false
:false, nil
(0, ''
は含まない)
値に一致した場合に実行する
case オブジェクト
when '値' # 値に一致した場合
処理
when '値', '値' # 2つの値を指定することも可能
処理
else # どの値にも一致しない場合
処理
end
例:
signal = 'red'
case signal
when 'red'
puts 'stop!'
when 'green'
puts 'go!'
else
puts 'caution!'
end
変数に値を代入しながら繰り返す
for 変数 in 配列/範囲 do
処理
end
do
は省略可能。
例:
for i in 0..2 do
puts "#{i}. Hello"
end
for color in ["red", "blue", "green"] do
puts color
end
条件が真の間繰り返す
while 条件 do
処理
end
do
は省略可能。
例:
i = 0
while i < 3 do
puts "#{i}. Hello"
i += 1
end
条件が偽の間繰り返す
until 条件 do
処理
end
do
は省略可能。
無限ループ
loop {
処理
}
抜けるためにはif文を使用する。
指定回数繰り返す
数値.times{|変数| # 変数に回数が代入される
処理
}
数値.times do |変数| # 変数に回数が代入される
処理
end
回数は0から始まる。|変数|
は省略可能。
例:
3.times do
puts "Hello"
end
3.times do |i|
puts "#{i}. Hello"
end
変数に値を代入しながら繰り返す
配列/ハッシュ/範囲.each{|変数|
処理
}
配列/ハッシュ/範囲.each do |変数|
処理
end
.each
と.each_pair
は同じ。|変数|
は省略可能。
例:
["red", "blue", "green"].each do |color|
puts color
end
{"red"=> 100, "blue"=> 200}.each do |color, price|
puts "#{color}: #{price}"
end
変数にハッシュのキー / 値を代入しながら繰り返す
ループから抜ける
ループを1回スキップ
ループの最初に戻る
+ | 加算 |
- | 減算 |
* | 乗算 |
/ | 除算 |
% | 剰余(除算の余り) |
** | 累乗 |
**
→*, /, %
→+, -
の順に計算される。同じ優先順位のものは、左から順番に計算される。
== | 等しい |
!= | 等しくない |
> | 左が右より大きい |
< | 左が右より小さい |
>= | 左が右以上 |
<= | 左が右以下 |
&& | AND |
|| | OR |
! | NOT |
例:
score < 80 && score > 60 // 60より大きく80より小さい
短縮した演算子 | 意味 |
---|---|
x += y | x = x + y
|
x -= y | x = x - y
|
x *= y | x = x * y
|
x /= y | x = x / y
|
x %= y | x = x % y
|
x **= y | x = x ** y
|
def メソッド名(引数1, 引数2...)
処理
end
例:
def sayHi(name)
puts "Hello, #{name}"
end
メソッド内で定義された変数は、メソッド外からはアクセスすることができない。
値が指定されなかった場合に使われる
def メソッド名(引数1 = 初期値1, 引数2 = 初期値2...)
処理
end
メソッドの返り値を変数に代入できる
def hello()
return "Hello"
end
s = hello()
メソッド名
メソッド名()
メソッド名(引数1, 引数2...)
元データも書き換える
.メソッド名!
のものが破壊的メソッド。
true / falseを返す
.メソッド名?
のものが真偽値を返すメソッド。
class クラス名
end
クラス名の最初は大文字で指定する。
変数名 = クラス名.new()
class クラス名
def メソッド名(引数1, 引数2...)
処理
end
end
実行:
変数.メソッド名
変数.メソッド名(引数1, 引数2...)
.
の代わりに::
を使うこともできる。
オブジェクトの作成時に実行される
class クラス名
def initialize(引数1, 引数2...)
処理
end
end
インスタンス変数の初期化などに使用される。
初期値を指定することもできる:
def initialize(引数1 = 初期値1, 引数2 = 初期値2...)
処理
end
class クラス名
def クラス名.メソッド名(引数1, 引数2...)
処理
end
end
実行:
クラス名.メソッド名
クラス名.メソッド名(引数1, 引数2...)
定義場所 | 継承 | 定義方法 | 共有範囲 | ||
---|---|---|---|---|---|
class 内 | def 内
| ||||
クラス変数 | ○ | ○ | ○ | @@変数名 = 値 | クラスごと |
インスタンス変数 | × | ○ | ○ | @変数名 = 値 | オブジェクトごと |
クラスインスタンス変数 | ○ | × | × | @変数名 = 値 | クラスごと |
ローカル変数 | × | ○ | × | 変数名 = 値 | メソッドごと |
インスタンス変数:クラス内の全メソッドで変数を使いたいときに使う。
クラス変数:initialize
メソッドと組み合わせて、オブジェクトが作成された数などを数えることができる。
クラスインスタンス変数:クラス変数を継承させたくない場合に使う。
メソッド内では定義できない
定義は通常の定数と同じ。
クラス外からの呼び出し:
クラス名::定数名
メソッドが継承される
class 新クラス名 < 継承元のクラス名
end
継承後のクラスで同盟のメソッドが定義された場合、上書きされる。
def クラス名
super
end
def クラス名
super(引数1, 引数2...)
end
スーパークラス(親クラス)で同盟のメソッドがあった場合、それを実行する。
クラス内に次のように書いておく:
class クラス名
attr_accessor :変数名 # readerとwriter両方
attr_reader :変数名 # 取得のみ
attr_writer :変数名 # 変更のみ
end
取得 / 変更:
オブジェクト.変数名 # 取得
オブジェクト.変数名 = 値 # 変更
中にメソッド(def ... end
)を入れる。
module モジュール名
end
使用方法は、関数として使用するか、クラスに読み込むかである。
まずモジュール内に以下のコードを書く:
module_function :メソッド名
そして以下のコードを書く:
モジュール名.メソッド名
モジュール名.メソッド名(引数1, 引数2...)
module_function
は実行させたいメソッドすべてについて書かなければならない。
クラス内に以下のコードを書く:
include モジュール名
.abs | 絶対値を取得 | 負の値には括弧をつける((-3).abs )
|
.ceil | 切り上げ | |
.floor | 切り捨て | |
.integer? | 整数かどうか | 1.0 もfalse になる
|
.round | 四捨五入 | |
.to_f | 浮動小数点数に変換 | |
.to_i | 整数に変換 | 小数点以下切り捨て.to_i(16) :16進数
|
.to_s | 文字列に変換 |
.even? | 偶数かどうか | |
.gcd() | 指定値との最大公約数 | |
.gcdlcm() | 指定値との最大公約数と最小公倍数を配列で | |
.lcm() | 指定値との最小公倍数 | |
.odd? | 奇数かどうか |
.ascii_only? | アスキー文字のみかどうか | |
.bytesize | バイト数 | |
.empty? | 空文字列かどうか | |
.downcase, ! | 小文字に変換 | |
.length | 文字数 | |
.size | ||
.reverse, ! | 文字を逆順に並べる | |
.split("") | 指定文字で分割し配列に変換 | ""(空白文字):1文字ごと |
.strip, ! | 空白の削除 | \t, \r, \n, \f, \v も削除される
|
.lstrip, ! | 先頭の空白の削除 | |
.rstrip, ! | 末尾の空白の削除 | |
.to_f | 浮動小数点数に変換 | |
.to_i | 整数に変換 | 引数で何進数かを指定可能 |
.upcase, ! | 大文字に変換 |
.empty? | 空かどうか | |
.clear | 配列を空にする | |
.delete_at() | 指定個目の要素を削除 | |
.last | 末尾の要素 | 引数で末尾から何個か指定可能 |
.length | 要素数 | |
.size | ||
.push | 末尾に追加 | |
.reverse, ! | 要素を逆順にする | |
.sample | 要素をランダムに返す | 引数で、返す数を指定可能 |
.sort, ! | 並び替え(昇順) | |
.to_h | 多次元配列をハッシュに変換 | |
.uniq, ! | 重複した様を削除 |
.clear | ハッシュを空にする | |
.delete() | 指定キーを削除 | |
.empty? | 空かどうか | |
.has_key?() | キーが存在するか | true / false |
.key?() | ||
.member?() | ||
.include?() | ||
.has_value?() | 値が存在するか | true / false |
.value?() | ||
.key() | 引数と値が一致した要素のキーを返す | ない場合nil
|
.keys | キーのみを配列に | |
.length | 要素数 | |
.size | ||
.shift | 先頭の要素を削除 | |
.to_a | 多次元配列に変換 | |
.values | 値のみを配列に |
.dst? | 夏時間があるかどうか |
.isdst | |
.getgm | UTC変換 |
.getutc | |
.getlocal | ローカル時間帯に変換 |
.gmt? | UTCかどうか |
.gmt_offset | UTCとの差を秒で |
.gmtime | 元データをUTC変換 |
.localtime | 元データをローカル時間帯に変換 |
.strfttime("") | 日時形式を整形 |
.sec | 秒を取得 |
.min | 分を取得 |
.hour | 時を取得 |
.mday | 日を取得 |
.day | |
.wday | 曜日(日〜土=0〜6)を取得 |
.mon | 月を取得 |
.month | |
.yday | 1/1からの通算日 |
.year | 年を取得 |
.zone | タイムゾーンを表す文字列 |
.曜日? | その曜日かどうか(sunday〜saturday) |
strfttime | |
---|---|
%A | 曜日(Sunday...) |
%a | 曜日の省略形(Sun...) |
%B | 月(January...) |
%b | 月の省略形(Jan...) |
%c | 日付と時刻 |
%d | 日(01-31) |
%H | 24時間制の時(00-23) |
%i | 12時間制の時(01-12) |
%j | 1/1からの通算日(001-366) |
%M | 分(00-59) |
%m | 月(01-12) |
%p | AM, PM |
%S | 秒(00-59)うるう秒は60 |
%U | 日曜始まりの週(00-53) |
%W | 月曜始まりの週(00-53) |
%w | 曜日(0-6)日曜が0 |
%X | 時刻 |
%x | 日付 |
%Y | 西暦 |
%y | 西暦の下2桁 |
%Z | タイムゾーン |
%% | % |
© 2019 shge.github.io 利用規約・プライバシー