概要
今後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と似ているところが多々あるなというのが所感でした(むしろ言語を一つでもある程度知っていればそういうパターンの方が多いのかも?)
また、久しぶりにオブジェクト指向やポリモフィズム(今回の記事では書いていないですが)について触れたのでどこか懐かしい雰囲気を感じました
次回は、フレームワーク使って何か作成するかしたいなと思います(色々試したい気分がマシマシなので)