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?

More than 3 years have passed since last update.

Rubyの基礎を知ろう

Last updated at Posted at 2021-12-22

はじめに

今まで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)

参考

Progate
Youtube1
Youtube2

0
0
3

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?