2
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の記述ルール(個人メモ)

Last updated at Posted at 2024-11-01

はじめに

これまでの個人アプリ開発ではJavaScript、TypeScript、Pythonなどを使ってきました。今回初めてRubyを使うため学習を始めました。
Ruby開発者としての一歩として、Ruby独自の記述ルールやクラスの定義の仕方を理解しようと思い、個人メモを作成することにしました。もし誤り等がありましたら、ご指摘いただけると幸いです。

null値

Rubyではnull値の場合、「nil」(ニル)と表示されます。

ハッシュ

JavaScriptでいうところのオブジェクトと同じで、キーとバリューのペアで格納し、キーを指定してバリューを取得するデータ構造です。
また、キーは文字列で指定する方法とシンボルで指定する方法があります。

構文

ハッシュ名 = {"key" => value, ... }
# または
ハッシュ名 = {:key => value,  ... }

キーの指定方法

  • 文字列 "key名"(ダブルクオーテーション)
  • シンボル :key名(コロン)

具体例

# 配列
arr = ["ダイヤ","オパール","サファイヤ"]
p arr[0] # ダイヤ

# ハッシュ(キーを文字列で指定)
arr = {"key1" => "ダイヤ", "key2" => "オパール", "key3" => "サファイヤ"}
p arr["key1"] # ダイヤ

# ハッシュ(キーをシンボルで指定)
arr = {:key1 => "ダイヤ", :key2 => "オパール", :key3 => "サファイヤ"}
p arr[:key1] # ダイヤ

# ハッシュ(キーをシンボル(省略形)で指定)
arr = {key1: "ダイヤ", key2: "オパール", key3: "サファイヤ"}
p arr[:key1] # ダイヤ

配列のループ処理

構文

配列.each do |変数名|
    # ループ処理
end

具体例

arr = ["ダイヤ","オパール","サファイヤ"]
arr.each do |jewel|
    p jewel
end

# ==出力==
# ダイヤ
# オパール
# サファイヤ

ハッシュのループ処理

構文

ハッシュ.each do |key, val|
    # ループ処理
end

具体例

arr = {:key1 => "ダイヤ", :key2 => "オパール", :key3 => "サファイヤ"}
arr.each do |key, jewel|
    p "#{key}#{jewel}です"
end

# ==出力==
# key1はダイヤです
# key2はオパールです
# key3はサファイヤです

メソッド(関数)

下記のように、引数を持たないメソッドは()が不要

具体例

# ask()とは書かない
def ask
    p "質問はコメント欄へ"
end

可変長引数(1つの引数で複数の値を配列で受け取る)

def num(*i)
    p i  # [1,2,3]
end

num(1,2,3)

オプション引数(1つの引数で複数の値をハッシュで受け取る)

def num(**i)
    p i  # {num1:Bob, num2:Emily}
end

num(num1:Bob, num2:Emily)

暗黙的な戻り値

Rubyは最後に処理した値を暗黙的に戻り値とする(returnの記述を省略できる)

def calc(i)
    i + 2
end

p calc(1)  # 3が出力される

条件分岐

Rubyでは、条件と処理の内容を一行で書くことができます。
例えば、18歳以上の場合は「大人料金」と出力する関数(メソッド)は以下の通りです。

具体例

def price(age)
    "大人料金" if age >= 18  # 条件がtrueの時に処理が実行される
end

例外処理

以下の二つを組み合わせて、想定外の入力がされた時の処理を記述する

  • unless文(falseの時に実行される):if文と逆
  • fail()またはraise():例外(exception)の発生

具体例

def calc_tax(i)
    fail("数値を指定してください") unless i.instance_of?(Integer)
    i * 1.1
end

p calc_tax("あ") # エラー発生 → 処理終了
p calc_tax(3) # 実行されない

例外処理が発生した場合も処理を継続する方法

def calc_tax(i)
    fail("数値を指定してください") unless i.instance_of?(Integer)
    i * 1.1
end

# beginの中で例外が発生するとbegin内の処理を中断してrescueへ移り引数eに例外内容が渡される
begin
    p calc_tax("あ") # 例外発生 → rescueへ
    p calc_tax(3) # 実行されない
rescue => e
    p e.message # エラーメッセージを表示
    p e.backtrace # エラーが発生した箇所を表示
ensure
    p "例外が発生するかどうかに関わらず必ず実行される処理"
end

p calc_tax(2) # この行は実行する

クラス

クラスの定義

class Cat
    # コンストラクタ
    def initialize(name, weight)
        @name = name    # 属性(メンバ変数)
        @weight = weight  # 属性(メンバ変数)
    end

    def eat(food)
        @weight += 1
        p "体重:#{@weight}kg"
    end
    
    def cry
        p "#{@name}があなたを呼んでいます"
    end
end

インスタンス生成

# インスタンスの作成
cat1 = Cat.new("ミー",5)
cat2 = Cat.new("たま",3)

cat1.eat("fish") # 体重:6kg
cat2.eat("fish") # 体重:4kg
cat1.eat("fish") # 体重:7kg

attr_accessor (あまり使わない)

クラスの内外から属性の読み書きができる

# クラスの定義
class Cat
    attr_accessor :name, :weight

    def cry
        p "にゃあ"
    end
end

# インスタンスの生成
cat = Cat.new
cat.name = "ミー"
p cat.name  # ミー

staticメソッド

属性を必要としないメソッド(インスタンスを作らなくても使えるメソッド)

class Cat
    # コンストラクタ
    def initialize(name, weight)
        @name = name    # 属性(メンバ変数)
        @weight = weight  # 属性(メンバ変数)
    end

    def eat(food)
        @weight += 1
        p "体重:#{@weight}kg"
    end
    
    # staticメソッド
    def self.cry(food)
        p "#{food}が食べたいにゃあ"
    end
end

p Cat.cry("魚")  #魚が食べたいにゃあ

参考サイト

最後までお読みいただきまして、ありがとうございます。

2
0
0

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
2
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?