最近Rubyに新しく触り始めているので、基本的なことをまとめてみました。
Ruby | 3.3.0 |
基本
# 標準出力
puts ""
# 複数行コメント
=begin
あああああ
=end
# 変数の宣言(型宣言は不要)
var = "test"
# 型の確認
puts(var.class)
>>> String
定数
定数は大文字で定義する(慣習的なもので強制力はない)
CONST = 100
# 値を変えようとすると、変えられるがワーニングは出る。
CONST = 1
puts CONST
>>> warning: already initialized constant CONST
>>> warning: previous definition of CONST was here
>>> 1
文字列
# 文字列はシングルクォートでもダブルクォートでもOK
var = 'test'
var = "test"
# 変数の代入
name = "imarin"
greeting = "hello #{name}."
puts greeting
>>> hello imarin.
配列
favorite_color = ["red", "pink"]
# 要素の追加
puts(favorite_color.push("yellow"))
>>> red
>>> pink
>>> yellow
# 指定要素が含まれるか
puts(favorite_color.include?("red"))
>>> true
# 空の配列かどうか
puts([].empty?)
>>> true
ハッシュ
pythonでいうdictはrubyではハッシュというらしい
imarin = {"name" => "imarin", "sex" => "man", "age" => 26}
puts imarin
>>> {"name"=>"imarin", "sex"=>"man", "age"=>26}
# 値を追加
imarin["from"] = "japan"
puts imarin
>>> {"name"=>"imarin", "sex"=>"man", "age"=>26, "from"=>"japan"}
# 要素を指定
puts(imarin["sex"])
>>> man
型変換
# int型に
puts("3".to_i)
>>> 3
# float型に
puts("3".to_f)
>>> 3.0
# str型に
puts(3.to_s)
>>> 3
条件分岐
# if文
if age > 29
puts ("you are arasar")
elsif age > 19
puts ("you are adult")
else
puts ("you are chile")
end
# unless文、falseの時を評価する。
sex = nil
unless sex
puts("性別を入力してください")
else
puts("男ですね")
end
>>> 性別を入力してください
# case文
now_time = 19
case now_time
when 12
puts("昼ごはんだよ")
when 19
puts("夜ご飯だよ")
else
puts("ご飯食べる時間じゃないよ")
end
>>> "夜ご飯だよ"
繰り返し処理
# each, イテレータを順番に取り出す。
favorite_color = ["red", "pink", "yellow"]
favorite_color.each do |color|
puts(color)
end
>>> red
>>> pink
>>> yellow
# times, 単純に順番に数字を積み重ねる。最初は0
5.times do |time|
puts("#{time}回目ファイル.txt")
end
>>> 0回目ファイル.txt
>>> 1回目ファイル.txt
>>> 2回目ファイル.txt
>>> 3回目ファイル.txt
>>> 4回目ファイル.txt
他にもwhileなどありそうだが、他の言語とほぼ同じなので割愛。
関数
型アノテーションはない、、?
def greet(time)
puts("hello it's#{time}")
end
greet(10)
>>> hello it's10
クラス
クラス変数は基本的に閉殻されていて、アクセサメソッドを使用して呼び出す。
クラス変数の前に@つけるのに慣れるの大変そう。
class Article
@@is_publish = false
def initialize(is_publish, text)
@@is_publish = is_publish
@text = text
end
def show()
if @@is_publish
return text
end
return "非公開です。"
end
# アクセサメソッド、読み込み。いわゆるgetter
def text
@text
end
# アクセサメソッド、書き込み。いわゆるsetter
def text=(value)
@text=value
end
# クラスメソッド
def self.info
return "記事に関するクラスです。"
end
end
ruby_article = Article.new(is_publish=false, text="rubyは赤いです。")
puts(ruby_article.show)
puts(ruby_article.text)
ruby_article.text="rubyは青いです。"
puts(ruby_article.text)
puts(Article.info)
>>> 非公開です。
>>> rubyは赤いです。
>>> rubyは青いです。
>>> 記事に関するクラスです。
例外処理
begin
a = 10 / 0
rescue => exception
puts(exception.class)
puts(exception.message)
end
>>> ZeroDivisionError
>>> divided by 0
感想
普段pythonを使ってみて感じることとしては型アノテーションがないのと、関数やクラスの終わりに「end」をつけなくてはいけないことが少し気になりました。
一方条件分岐の「unless」文は面白いなって思いました。
notを主体にするときの条件分岐として可読性高く書けそう。