はじめに
今までJavaScriptを中心に学んできたが、Rubyを学習し初めた。
かなり基礎的
学習するバックエンドにRubyを選んだ理由: 圧倒的独学のしやすさ。
変数
sample = 1
sample2 = 'あああ'
配列
languages = ["日本語", "英語", "スペイン語"]
ハッシュ(オブジェクト)
# 文字列での書き方
{"name" => 値1, "age" => 値2}
# 「シンボル」の書き方
{:name => 値1, :age => 値2}
# 省略したシンボルの書き方 一般的
{ name: "Suzuki", age: 21 }
puts sample[:name] # ハッシュはこの参照方法
ハッシュのループ
変数が1つではなく2つになる
arr = {key1: "Ruby", key2: "PHP"}
arr.each do |key, val|
p "#{key}は#{val}です"
end
# key1はRubyです
# key2はPHPです
条件分岐
大元のif以外endが必要ないのがポイント
if 条件式
処理1
elsif 条件式
処理2
else
処理3
end
繰り返し
each
# each
languages = ["日本語", "英語", "スペイン語"]
languages.each do |language|
put "#{language}を話せます"
end
#ハッシュが値の配列を、繰り返す
exams = [
{subject: "Math", score: 80},
{subject: "Science", score: 55}
]
exams.each do |exam|
puts "#{exam[:subject]}の結果は#{exam[:score]}点です"
end
for
for文
for i in 0 .. 4
p i
end
# forのネスト to_sで数字を文字列にする
for i in 0 .. 2
for j in 0 .. 2
p i.to_s + "-" j.to_s
end
end
# 条件に配列を指定
arr = [2,4, 6,8,10]
for i in arr do
p i
メソッド
通常のメソッド
# 引数にデフォルト値を設定
def introduce(name="田中")
p "#{name}です"
end
# 呼び出し
introduce
真偽値を返すメソッドの場合メソッド名の最後に?をつける慣習
returnは処理を終わらせる役割もある
def negative?(number)
return number < 0
end
puts negative?(5)
例外処理
def calc_tax(i)
## 数値でなければエラーを発生させる
fail("数値を指定してください") unless i.instance_of?(Integer) i * 1.1
end
p calc_tax("あ") # ここでエラー終了
p calc_tax(1) # この行は実行されない
例外をキャッチする
def calc_tax(i)
fail("数値を指定してください") unless i.instance_of?(Integer) i * 1.1
end
begin
# beginの中で発生した例外はキャッチされる(捕まえられる)
p calc_tax("あ") # 例外発生!rescueへ飛ばされる
p calc_tax(1) # この行は実行されない!
rescue => e # キャッチされた例外はeとしてここにやってくる
p e.message # エラーメッセージを表示する (failの引数の内容)
p e.backtrace # どこでエラーが発生したかを表示する
end
p calc_tax(2) #この行は実行される
例外を再び投げる
デバッグの際などend以降を実行したくない場合に使えそう
# fail()...例外を発生させる時
# raise() .. キャッチした例外を再び投げる時
begin
p calc_tax("あ")
rescue => e
p e.message
p e.backtrace
raise e # 例外をrescueの外へ投げる
end
p calc_tax(2) # この行は実行されない
module
module名をsample.rbとする
require "./sample"
で読み込み
入力を受け付ける
puts "名前を入力してください"
# 変数 = gets.chompで入力した値を変数に代入して使う
name = gets.chomp
puts "あなたの名前は#{name}です"
# gets.chompは文字列を扱うため、数字を扱う場合は変換する
name = gets.chomp.to_i
# getsもある。入力したところで改行が入る
name = gets
日付を使う
require "date"
date1 = Date.new(2021, 7, 31)
puts date1 # 2014-07-31
# Dateクラスには様々なメソッドがある。(クラスメソッド)
puts date1.sunday? #sundayかを判定する
date1 = Date.tody #今日の日付のインスタンス
puts date1
putsとprint
puts 'aa' # 改行して出力
p 'bb' # pで省略できる
print 'rb' # 改行せずに出力
暗黙的なreturn
rubyでは最後に処理した値を暗黙的に戻り値とする
def calc(i)
i + 2
end
# returnがないが、暗黙的に最後に処理した値が返っている
p calc(1) # 3
break
# ある条件に当てはまった時に処理を止める
# break if i == 3の一行で表せる
for i in 0 .. 4
if i == 3
break
end
p i
end
next
# ある条件に当てはまった時にスキップさせる
for i in 0 .. 4
next if i == 3
p i
end
unless
ifの逆。 falseなら実行される
unless age >= 20
p "未成年です"
end
# iが数値でなければ、数値ではありませんを出力
p "数値ではありません" unless i.instance_of?(Interger)
キーワード引数を持つメソッド
あまり使われない
1: 定義側で、引数の後に「:」をつける
2: 呼び出し側で、値の前に引数名を書く
def introduce(name:, age:)
puts "私は#{name}です"
puts "年齢は#{age}です"
end
## キーワード引数利用時の呼び出し方
introduce(name:"にんじゃわんこ", age:14,)
可変長引数
複数の値を配列で受け取る
def price(*1)
p i #[1, 2, 3]
end
price(1,2,3)
オプション引数
1つの引数で複数の値をハッシュで受け取る
def price(**1)
p i # {item1: 100, item2: 200}
end
price(item1: 100, item2: 2002)
例外処理系の続き
ensureで絶対実行
raiseで例外を外に出しても実行されるっぽい?
begin
p calc_tax("あ")
rescue => e
p e.message
ensure
p "例外は発生してもしなくても最後に実行される"
end
特定エラーのキャッチ
def div(i)
fail("数値を指定してください") unless i.instance_of?(Integer)
1 / i # i=0 だと ZeroDivisionErrorが発生
end
begin
p div(0)
rescue ZeroDivisionError => e # 0を入れた時はここに飛ぶ
p "0では割り算できません"
rescue => e
p e.message # ここには来ない
end
メソッド全体の例外をキャッチ
def div(i)
1 / i
rescue => e
# メソッドの例外をキャッチ
end
終わりに
rubyを学んでみて感じたことがある、バックエンドとフロントエンドで違いはあれど、1つの言語を学習したとに別の言語
を学習するとかなり楽だ。
JavaScriptでも 条件 && 条件 && 条件の書き方がある。
左から条件の判定を始めてTRUEであれば右に移る。途中でFALSEがあれば、その時点での値を返すなど、共通する部分は多い
そしてもう一つ。 Ruby楽しい 設計思想?が楽しくコーディングできるようになので尚更ですね。
今回はProgateとYoutubeしか使っていないが、購入した書籍で学んで行く予定
購入した書籍はこちら(楽しいRuby)