読者です 読者をやめる 読者になる 読者になる

c-bata web

@c_bata_ のメモ。python多め

Ruby勉強内容まとめ1

前回Vagrantでサクッと作った仮想マシンを使って,Rubyを勉強していく。

参考資料

ドットインストールRuby入門を眺める

ある程度他の言語の知識があれば,ドットインストールのRubyレッスンは簡単に理解できます。僕の場合は手すら動かさずに,ただ動画を見ていますレッスン全てをやっても1時間半ぐらいで終わりました。

とりあえず↓に覚えておきたい内容をメモ

文字列の表示

文字列の表示には↓のようにいくつかのメソッドがある。

print "Hello" # 改行なし
puts "Hello" # 改行有り
p "Hello" # オブジェクトの種類が分かるように表示

# printf,sprintfフォーマット化された文字列を扱える
x = "taguchi"
y = 25
printf("%s's score is %d\n", x, y) 
z = sprintf("%-10s's score is %08d\n", x, y) # sprintfは表示するんじゃなくてただ返すだけ
p z

Rubyでは全てがオブジェクトとして扱われているので,↓のようなメソッドを利用することが出来る。メソッドについては公式ドキュメント(https://www.ruby-lang.org/ja/)に色々載ってる。

p "hello".length # 長さを返す
p "hello".upcase # 全部大文字に変換
p "hello".reverse # 逆順にソート
p "hello".index("o") # 何文字目にoがあるかを返す
p "hello".include?("w") # 文字列中にwが含まれているかを調べる(返り値はTrueまたはFalse)

Pythonとは違って,Rubyでは'"に違いがある。 "特殊文字が展開されるが,'は展開されない。

puts 'hello\nworld'
puts "hello\nworld"

変数の展開は↓のように#{変数名}とする必要がある。

name = "taguchi"
puts "my name is #{name}"

数値オブジェクト

Rubyで数値を扱うときの演算子は,他の言語と変わらない(+,-,/,%,*など)。ただし,Rubyでは↓のように分数が扱えるみたい。

Rational(2, 3) # ←は2/3

数値オブジェクトで使えるメソッドは↓のようなものが用意されている

# 型変換
p "10.5".to_i #10.5を整数値(11)に変換 
p 10.5.to_r #10.5を分数(21/2)に変換
# 四捨五入
p 10.8.round
# 繰り上げ,切り捨て
p 10.8.ceil # 切り捨てはfloor
# 乱数
p rand(100)
# 平方根のような数学関数を扱うにはMathを利用する。
p Math.sqrt(2)

日本語の取扱い

Pythonと同じようにファイルの先頭で文字コードを選択する必要がある。

# coding:utf-8

ハッシュオブジェクト

普通の配列オブジェクトなら,↓のようになる。

names = ["python", "java", "ruby"]

ハッシュオブジェクトは,配列オブジェクトのように添字で指定するのではなく↓のようにキーを指定することで数値を呼び出せる。

sales = {"python"=>100, "java"=>150, "ruby"=>300}

時間・日付

時間や日付はあまりに簡単なので,↓のサンプルを見ればすぐに分かる。

t = Time.now
p t.month
p t.strftime("%Y/%m/%d")

条件分岐

↓のサンプルをみれば,if文については簡単に理解できる。

score = 62

if score >= 80
    puts "great!"
elsif score >= 60
    puts "so so..."
else
    puts "not so great"
end

単純な時は↓のように書くことも出来る

puts "great" if score >= 80

Rubyでは条件演算子というものがある。 if ... else ...(条件) ? 値1 : 値2のように書き換えることも出来る。 あまり見慣れない書き方なので初めて見ると戸惑いそう。 具体例は↓。

a = 50
b = 20
max = a > b ? a : b

case文は↓のように書ける。

signal = "yellow"
 
case signal
when "red"
    puts "stop!"
when "green", "blue"
    puts "go!"
when "yellow"
    puts "caution!"
else
    puts "signal is broken"
end

正規表現

正規表現とのマッチングを行なう時は,=~という比較演算子が利用できる

puts "match!" if /ruby/ =~ "i love ruby"

繰り返し処理

繰り返し回数がわかっている時は,timesメソッドやfor文が利用できる。

10.times do |i|
    puts "#{i} hi!"
end
for i in 1..10 do
    puts i
end

あるオブジェクトの中身の要素数の数だけ,↓のように書ける。

users = ["python", "java", "ruby"]
users.each do |user|
    puts user
end

または

users = ["python", "java", "ruby"]
for user in users do 
    puts user
end

eachメソッドを使えば,配列オブジェクトだけでなくハッシュオブジェクトに対しても似たようなことが出来る

scores = {"python"=>200, "java"=>300, "ruby"=>120}

scores.each do |key, value|
    printf("%s's score is %d\n", key, value)
end

while文による繰り返しは↓のようにすればいい

i = 1
 
while i <= 10 do
    puts i
    i += 1
end

メソッド

メソッドの使い方は↓を見ればだいたい分かると思う。

def test(word = "ruby") # 引数がなかったら"la"が使われる
    puts word
    return "success"
end

result = test("python")
puts result

クラス

他の言語を勉強していれば,クラスに関しても同じように使える。initializeメソッドは,インスタンス化に自動的に呼ばれる初期化用のメソッド。 ↓のソースを見てみると,@のような見慣れない文字が付いている。@はインスタンス変数であることを表していて,@のついた変数は同じクラスないならばメソッドを超えて同じように利用できることを表す。

class クラス名(英大文字から始まることに注意!)
    def initialize(name)
        @name = name
        @hp = ...
    end
    ...メソッドを書いていく
end

インスタンスの生成・メソッドの呼び出しは↓のように出来る。

オブジェクト名 = クラス名.new("initializeに渡す値")
オブジェクト名.メソッド名

これでドットインストールのRuby入門は終了!

RubyがミニツクのRuby演習コースを解いていく。

ドットインストールのRuby入門でRubyがどんなふうに書いていくかを大体イメージできたので,次は手を動かします。僕はRubyがミニツクのRuby演習コースをやって行こうかと思っています。 Ruby演習コースでは「テキスト」、「動画」、「ドリル」、「演習」などのコンテンツが用意されているようです。