0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ruby超初心者構文まとめ(Pythonとの比較も添えて)

Last updated at Posted at 2025-01-14

概要

今後rubyを求められることがありそうだったので、手始めにどういう書き方をするのかをアウトプット
ほぼPythonしか使ってこなかったので、混ざりませんようにという願いを込めながら学習していきます。

注) 四則演算や変数宣言など、基本概念の特に意識しなくても良さそうなところは独断と偏見で飛ばしていますのでご了承くださいmm

文字出力

Pythonではprint("xxx")だがRubyでは、puts, p, printの3種類がある模様

しかも括弧が必要なくて、単なるダブルクウォートという形で違和感の塊ですね、、
↑よくよく調べていたらついてても良かったです、括弧がなくても良いよということでした

puts "rbrbrb"
puts"rbrbrb"
puts("rbrbrb")
# 全て同義

また、3種類の使い分けについてですが以下の内容になっています

# 出力される結果に改行がつく
puts "rbrbrb"

# 出力される結果のデータ型がわかる
# Integerの1なのかStringの1なのかが出力時にわかります
puts "1"
p "1"

# 出力される結果に改行がつかない
print "rbrbrb"

また変数に代入された文字列の展開方法は#{変数名}という形で展開ができるそうです
Pythonではf-Stringやstr.format()を使ったりしていましたね

var = "hen"

p "hensu is #{var}"

for文, while文

  • for文
    for {配列などの要素を表す変数} in {配列など} do ... endを使用
    基本の概念としてはどの言語とも同様、「do」と「end」が必要になります
    どこまでがfor文の内容かは分かりやすいですね
members = ["A", "B", "C"]

for member in members do
    puts "#{member}" #「A」「B」「C」と出力される
end
  • while文
    while {条件式} do ... endを使用
    こちらもfor文と同様の感想
members = ["A", "B", "C"]
excute_count = 0

while excute_count < 10 do
    puts "#{members}" #「["A", "B", "C"]」と10回分出力される
    excute_count += 1
end

if文

if...then elsif...then else...endを使用
こちらもfor文と同様の感想、あとはelseifではなくてelsifもですね

members = ["A", "B", "C"]

for member in members do
    if member == "A" then
        puts "Aです!"
    elsif member == "B" then
        puts "Bですよ!"
    else
        puts "???"
    end
end

配列(array)

すでにこれまでの説明でも何回も使用していますが、配列の宣言には[]を使用します
for文などで使用するときの使用方法はこちらで確認をお願いします

連想配列(hash)

Pythonでいうところの辞書に似ている所感
記載する以外にも他にありますが、基礎的なものとしてはこのような感じかなと

# 初期化方法
hash_var = {"a" => 1, "b" => 2, "c" => 3}

## 以下のように=>を省略する初期化もできる
## hash_var2 = {a: 1, b: 2, c: 3}

# 取り出し
hash_var["a"]

## 存在しないキーを指定すると例外やエラーが発生するのではなく、"nil"というものが返る
## nilはほぼnullと同義で、Rubyだからnilを使っているだけの模様
## hash_var["z"] => nil

# 要素の数
## lenではなくsizeを使う
hash_var.size

# keyだけ, valueだけ取り出したい時
## 括弧がないだけでPythonと同じ
hash_var.keys
hash_var.values

# for文回したい時
## Pythonと結構違う
hash_var.each do |key,val|
  puts key,val
end

メソッド, クラス

  • メソッド
    メソッドの定義はdefを使用します(これもPythonと同じ)
    最後にendがつくのはもうお馴染みですね
# 配列の要素数だけ連想配列のバリューに0をもつ要素を追加して連想配列を作成するメソッド
def convert_array_to_hash(arr)
    return_hash = {}

    for element in arr do
        return_hash[element] = 0
    end

    return return_hash
end


origin_arr = ["A", "B", "C"]
converted_hash = convert_array_to_hash(origin_arr)
puts converted_hash

  • クラス
    • メソッドをまとめておくところはPythonとさほど変わりがないですが、インスタンスの生成などが大きな差分かと思われます
    • オブジェクト指向なので、何か共通した型を用意してそれを元に作成・複製するようなイメージですね
    • また、インスタンス内の変数にアクセスするには@マークをつける必要があります
# クラスの定義
class User
    def initialize(name)
        @name = name
    end

    def read_name
        @name
    end

    def update_name=(name)
        @name = name
    end
end

# Userクラスのインスタンスを作成
user = User.new("initialize user")
puts user.read_name # この時点では「initialize user」


user.update_name = "A"
puts user.read_name # この時点では「A」

クラス変数、インスタンス変数、クラスの継承については長くなりそうなので、また別で書くか実際に使ってみて理解したいと思います

おわりに

結構Pythonと似ているところが多々あるなというのが所感でした(むしろ言語を一つでもある程度知っていればそういうパターンの方が多いのかも?)
また、久しぶりにオブジェクト指向やポリモフィズム(今回の記事では書いていないですが)について触れたのでどこか懐かしい雰囲気を感じました

次回は、フレームワーク使って何か作成するかしたいなと思います(色々試したい気分がマシマシなので)

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?