はじめに
Ruby の基礎文法について、学習内容を載せておきます。
今回は、Rubyプログラミングの概要や変数、オブジェクトの種類に関する内容です。
目次
Rubyプログラミングの特徴
インタプリタ
プログラム実行の際、1行ずつ機械語に翻訳していく言語のため、コンパイル不要
変数に型がない
Ruby の変数はどんな型のデータも格納可能なため、変数の型を意識する必要なし
変数宣言不要
変数の種類は変数名から判断
オブジェクト指向言語
全てのデータはオブジェクトとして扱い、クラスや継承も可能(※多重継承は禁止)
メモリ管理不要
オブジェクトのメモリ解放は Ruby が自動的にしてくれるため、ガーベジコレクションの実施不要
特異メソッド
ある特定のオブジェクトへメソッドを付加することができる
コメント
コメントアウトには、#
または=begin~=end
を使用します。
-
# 単一行コメント =begin 複数行の コメント =end
変数
変数は、以下の種類があります。
ローカル変数
-
小文字または`_'で定義
-
同スコープ内でのみ有効
-
class Class def Method1 # ローカル変数 l = 1 end def Method2 puts(l) # => Method2 は Method1 と別スコープなので l は使用できない # => 未定義エラーとなる end end Class.Method2 # クラス内のメソッド呼び出し
実行結果Traceback (most recent call last): 1: from hensuu.rb:14:in `<main>' hensuu.rb:8:in `Method2': undefined local variable or method `l' for Class:Class (NameError)
Method2 は Method1 と別スコープで
l
は使用できないため、未定義エラー
インスタンス変数
-
@
で始まる変数 - 定義したクラスまたはサブクラスのメソッドからs参照可能
- 初期値は
nil
-
class Class def Method1(value) # インスタンス変数 @i = value end def Method2 puts(@i) end end test = Class.new() test.Method1(3) test.Method2()
実行結果3
クラス変数
-
@@
で始まる変数 - クラス定義内で定義され、全てのメソッドから参照または代入が可能
-
class Class # クラス変数 @@c = 1 def Method1 puts @@foo end def Method2(value) puts @@c + value end end test = Class.new() test.Method1 test.Method2(2)
実行結果3
グローバル変数
-
$
で始まる変数 - プログラムのどこからでも参照または代入が可能
- 初期値は
nil
-
$g = "グローバル変数" def hensuu_type puts "この変数は #{$g}" end hensuu_type
実行結果この変数は グローバル変数 です
定数
- アルファベット大文字 ([A-Z]) で定義 : 最初だけ大文字、全て大文字どちらでもOK
- 単語の区切りとして
_
を使用 - 一度代入後、値を変更可 : 変更できるが上書きや再定義エラーは出る
- メソッド内では定義不可
- クラス外からも
クラス名::定数名
で参照可能class Ruby COLOR = 'Ruby' end class Go COLOR = 'Go' COLOR = 'PHP' # 値の上書き end # 定数呼び出し p Ruby::COLOR p Go::COLOR
実行結果const.rb:7: warning: already initialized constant Go::COLOR # 上書きエラー const.rb:6: warning: previous definition of COLOR was here # 再定義エラー "Ruby" "PHP" # 「Go」から「PHP」へ値は変更されてる
オブジェクト出力
変数や定数の値を出力することをオブジェクト出力と言います。
オブジェクト出力は、puts
, p
, print
で行いますが各々微妙な違いがあります。
puts
- オブジェクト末尾に自動的に改行が付与されます。
- 末尾に改行コードがある場合、自動的な改行付与はされません。
-
''
で囲まれている場合、改行コード等のエスケープ文字はそのまま出力されます。def hello_ruby puts "Hello Ruby!" puts "Hello Ruby!\n" puts 'Hello Ruby!\n' end hello_ruby # メソッド呼び出し
実行結果Hello Ruby! Hello Ruby! Hello Ruby!\n
p
- オブジェクト末尾に自動的に改行が付与されます。
- 文字列は
""
で囲われて出力されます。 -
""
や''
に関わらず、改行コード等のエスケープ文字はそのまま出力されます。 -
''
で囲まれている場合、\
が追加出力されます。p "Hello Ruby!" p "Hello Ruby!\n" p 'Hello Ruby!\n'
実行結果"Hello Ruby!" "Hello Ruby!\n" "Hello Ruby!\\n"
- オブジェクト出力時、改行は付与されません。
-
''
で囲まれている場合、改行コード等のエスケープ文字はそのまま出力されます。 -
print "Hello Ruby!" print "Hello Ruby!\n" print 'Hello Ruby!\n'
実行結果Hello Ruby!Hello Ruby! Hello Ruby!\n
文字列オブジェクト
- クラスは String
- 文字列オブジェクトは、以下方法で作成できます。
-
String
クラスで用意されているnew
メソッド : String.new(文字列) -
""
または'
で文字列を囲むdef output_string puts String.new("Hello Ruby!") puts "Hello Ruby!" end output_string
実行結果Hello Ruby! Hello Ruby!
-
連結
+
で文字列同士を連結・出力することができます。
-
フォーマット
puts 文字列 + 文字列
puts "Hello Ruby" + " Go!"
実行結果Hello Ruby Go!
式展開
-
""
で囲まれた文字列の中に式を記述することができます。 - プログラム実行時、式が評価・計算されてその結果が文字列として出力されます。
フォーマット
#{式}
print("年齢は #{10 - 5} です")
実行結果年齢は 5 です
ループ
*
を使って、文字列を繰り返し出力することができます。
-
フォーマット
puts 文字列 * 繰り返し回数
puts "Hello★" * 3
実行結果Hello★Hello★Hello★
文字数カウント
length
メソッドで文字数を出力することができます。
-
フォーマット
puts 文字列.length
str = "Hello Ruby!" puts str.length
実行結果11
文字列から数値へ変換
to_i
メソッドを使って、文字列を数値型へ変換することができます。
-
フォーマット
puts 文字列.to_i
str = "123" puts str # 文字列 puts str.to_i # 数値へ変換
実行結果"123" 123
数値オブジェクト
- 値によってクラスが異なります。
- Integer(整数)、Float(浮動小数点数)、Complex(複素数)、Rational(有理数)
- 文字列オブジェクトのように、
new
メソッドでのオブジェクト作成はできません。 - 整数値は、 2 進数、 8 進数、 16 進数の形式も記述できます。
10進数 214 2進数 0b11010110 # 先頭に「0b」が付く 8進数 0326 # 先頭に0が付く 16進数 0xD6 # 先頭に「0x」が付く
def output_numeric puts 10 puts 3.14 end output_numeric
実行結果10 3.14
演算
演算で使用される演算子は以下の通りです。
演算子 | 意味 | 例 |
---|---|---|
+ | 加算 | 2 + 1 |
- | 減算 | 2 - 1 |
* | 乗算 | 2 * 1 |
/ | 除算 | 2 / 1 |
% | 剰余 | 2 % 1 |
** | 累乗 | 2 ** 3 |
-
def calc_numeric print("2 + 1 = ", 2 + 1, "\n") print("2 - 1 = ", 2 - 1, "\n") print("2 * 1 = ", 2 * 1, "\n") print("2 / 1 = ", 2 / 1, "\n") print("2 % 1 = ", 2 % 1, "\n") # 2 / 1 の余り print("2 ** 3 = ", 2 ** 3, "\n") # 2 * 2 * 2 end calc_numeric
実行結果2 + 1 = 3 2 - 1 = 1 2 * 1 = 2 2 / 1 = 2 2 % 1 = 0 2 ** 3 = 8
四捨五入 ・ 切り上げ ・ 切り捨て
-
round
メソッド : 四捨五入 -
ceil
メソッド : 切り上げ -
floor
メソッド : 切り捨てフォーマットp (式).round p (式).ceil p (式).floor
def output_round_ceil_floor # 四捨五入、切り上げ、切り捨て p 9.0/7 p (9.0/7).round p (9.0/7).ceil p (9.0/7).floor # 出力桁数を指定の上で、四捨五入、切り上げ、切り捨て p (9.0/7).round(2) p (9.0/7).ceil(3) p (9.0/7).floor(5) end output_round_ceil_floor
実行結果1.2857142857142858 1 2 1 1.29 1.286 1.28571
小数点の出力桁数指定
format
, sprintf
を使って、小数点の出力桁数を指定することができます。
-
フォーマット
format("%.桁数f", 対象数値)
def output_format calc = 7/6.0 puts format("%.2f", calc) puts sprintf("%.2f", calc) end output_format
実行結果1.17 1.17
数値から文字列へ変換
to_s
メソッドを使って、数値を文字列型へ変換することができます。
-
フォーマット
puts 数値.to_s
str = 123 puts str # 数値 puts str.to_s # 文字列へ変換
実行結果123 "123"
比較演算子
文字列または数値オブジェクトは、比較演算子による値の比較が可能です。
比較結果は、true または false で返ってきます。使用される演算子は以下の通りです。
演算子 | 意味 |
---|---|
A == B | AとBは等しい |
A != B | AとBは等しくない |
A > B | AはBより大きい |
A < B | AはBより小さい |
A >= B | AはB以上 |
A <= B | AはB以下 |
クラス・メソッドの出力
クラスの出力
puts
やp
でオブジェクトを出力する際、オブジェクト名の後ろに.class
を付けることで、対象オブジェクトのクラスを出力することができます。
-
def output_class # 文字列オブジェクト puts "Hello Ruby!" puts "Hello Ruby!".class # 数値オブジェクト puts 10 puts 10.class puts 3.14 puts 3.14.class end output_class
実行結果Hello Ruby! String 10 Integer 3.14 Float
メソッドの出力
オブジェクトを出力する際、オブジェクト名の後ろに.methods
を付けることで、対象オブジェクトのメソッドを出力することができます。
-
def output_method # 文字列オブジェクト puts "Hello Ruby!" puts "Hello Ruby!".methods # 数値オブジェクト puts 10 puts 10.methods puts 3.14 puts 3.14.methods end output_method
※ 実行結果は長いので割愛します。
参考文献
プログラミング言語 Ruby リファレンスマニュアル
【Ruby】基本コマンド一覧
文字列オブジェクトを作成する
数値オブジェクトを使用する
【Ruby入門】クラスメソッドの使い方|呼び出し・その他メソッド