ruby

【Ruby】Ruby入門まとめ

最近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を主体にするときの条件分岐として可読性高く書けそう。