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 1 year has passed since last update.

Rubyまとめ

Last updated at Posted at 2023-06-20

こんにちは。uniです。
今回は、「学習を始めて1週間ほどしか経ってない」くらいの初心者の方向けの記事です。
辞書的な感じで使うことを想定しています。

変数

x = 10 ←これ

データや値を格納しておくための箱のようなもの。
情報を一時的に保存したり、計算結果を保持できる。

簡単な例文

# 2つの数値を変数に格納する
num1 = 5
num2 = 10

# 変数を使って足し算を行う
sum = num1 + num2

# 結果を表示する
puts "合計: #{sum}"

上の

num1 = 5
num2 = 10

のように、最初に変数に値を入れて明記することを「変数を宣言する」と言う

変数の定義の仕方

変数名 = 値 ←こんな感じ

ここで迷うのが「変数名の付け方」。

変数名の付け方

変数名のルールは以下の通り

  • 数字で始めない(できない)
  • 意味のある名前を付ける (例: age(年齢)、name(名前)、count(個数)
  • 変数名は一意でなければならない

同じスコープ内(範囲)では同じ変数名を複数回使用することはできない。

いろんな値を入れられる

name = "John"  # 文字列を代入
age = 25       # 数値を代入
is_student = true  # 真偽値を代入

文字列操作

文字列とは

数字じゃないもの。要は単語。

123 → 数字(これが数値)
一味 → 単語(これが文字列)

ダブルクォーテーション(")またはシングルクォーテーション(')で囲む

123 → 数値
"一味" → 文字列
"123" → 文字列

簡単な例文

name = "John"
puts name

#出力結果「john」

文字列のいろいろ

文字列の結合
name = "John"
greeting = "Hello, " + name

puts greeting
#出力結果「Hello,John」
.lengthを使って、文字列の長さ(文字数)を取得
name = "John"
puts name.length
#出力結果「4」
演算子[]を使って、文字列の一部を取得
name = "John"
puts name[0]
#出力結果「J」→123と数えるのではなく、012と数えるため
subを使って、文字列の置換
sentence = "I like apples"
new_sentence = sentence.sub("apples", "oranges")
puts new_sentence
#出力結果「I like oranges」

その他

.lengthとか[]とかsubとか、魔法のアイテムみたいなものを「メソッド」と言います。

配列

fruits = ["apple", "banana", "orange"] ←こんなやつ
複数の要素を順序付けして格納するデータ構造のこと。

fruits = ["apple", "banana", "orange"]
puts fruits[0]
出力結果apple

配列の基礎

  • 角かっこ [ ] 内に要素をカンマで区切って記述する
  • 配列の要素は、0から始まるインデックス番号でアクセスできる
  • 配列の要素は異なるデータ型でもOK

データ型の種類

主要なデータ型は主に以下の通り。

  • 文字列 (String)
  • 数値 (Number)
  • 真偽値 (Boolean)
  • 配列 (Array)
  • ハッシュ (Hash)

それぞれざっくり理解しましょう。

文字列 (String)

文字の集まり。ダブルクォーテーション ("") やシングルクォーテーション ('') で囲まれたテキスト。
例) "Hello,Ruby"

数値 (Number)

言葉どおり数値。整数 (Integer)浮動小数点数 (Float) の2つの種類

  • 整数(Integer) → 正または負の整数値を表す (例: 5, -13)
  • 浮動小数点数(Float) → 小数点以下の値を持つ (例: 3.123, -0.4)
真偽値 (Boolean)

真偽値は、論理値を表現するために使用される。 true (真)false (偽) の2つの値がある。
条件式や制御フローで使用され、条件の成否やステートメントの実行可否を表す。

配列 (Array)

複数の要素を順序付けて格納するために使用される。要素は任意のデータ型を持つことができ、角括弧 [] で囲まれ、カンマで区切られる。
例えば、[1, 2, 3] や ["りんご", "バナナ", "オレンジ"] のような形式。

ハッシュ (Hash)

ハッシュはキーと値のペアを持つデータ構造。キーは一意であり、値にアクセスするための識別子として機能する。ハッシュは波括弧 {} で囲まれ、キーと値はコロンで区切られる。

(例)

person = { name: "John", age: 30, city: "Tokyo" }
book = { title: "Ruby Programming", author: "Alice Smith" }

条件分岐

ある条件に基づいてプログラムの実行フローを変更するための制御構造。
条件分岐には主にif文case文が使われる。

if文

age = 20

if age >= 18
  puts "成人です"
else
  puts "未成年です"
end

case文

day = "Sunday"

case day
when "Monday"
  puts "月曜日です"
when "Tuesday"
  puts "火曜日です"
when "Wednesday"
  puts "水曜日です"
when "Thursday"
  puts "木曜日です"
when "Friday"
  puts "金曜日です"
when "Saturday"
  puts "土曜日です"
when "Sunday"
  puts "日曜日です"
else
  puts "不明な曜日です"
end

データ型「ハッシュ」と条件分岐を組み合わせるとこんな事ができる

age = {
  "John" => 25,
  "Alice" => 17,
  "Michael" => 32
}

age.each do |name, years|
  if years >= 18
    puts "#{name}は成年です"
  else
    puts "#{name}は未成年です"
  end
end

出力結果

Johnは成年です
Aliceは未成年です
Michaelは成年です

繰り返し処理

名の通り、同じ処理を繰り返し実行するための制御構造。
Rubyでは主にfor while loopが使われる。

for
for文は、指定した範囲や配列の要素に対して繰り返し処理を行う。

for i in 0..4 do
  puts i
end

 while
指定した条件が真である限り、繰り返し処理を行う。

i = 0
while i < 5 do
  puts i
  i += 1
end

loop
指定した条件が真である限り、無限に繰り返し処理を行う。

i = 0
loop do
  puts i
  i += 1
  break if i == 5
end

ブロック構文

.each do |変数|とかにあるdoです。

doってなんやねん

doとは、ブロックを開始するためのものです。

array.each do |item|
  puts item
end

この例だと、arrayという配列の要素を順番に取り出し、それぞれの要素に対してブロック内の処理が実行される。doとendの間にある部分がブロックで、|item|はブロックパラメータで、取り出した要素が代入される。

doを使用することで、メソッドの呼び出しとブロック内の処理を結びつけることが可能。これにより、メソッドに特定の動作を追加するなど、色んな用途のコードを記述することができる。

メソッド

処理のまとまりのこと。

def メソッド名(引数1, 引数2, ...)
  # 処理の記述
  # ...
  # 戻り値の指定 (オプション)
  return 戻り値
end

def~endのこと。
再利用可能なコードブロックとして扱うための概念。
これを使えば何回も同じ処理を書かなくて済む。

ちなみにメソッドを呼び出すときは、以下例のようにメソッド名と必要な引数を指定する。

result = メソッド名(引数1, 引数2, ...)

メソッドの引数

メソッドに情報を渡すためのもの。
友達に「おすすめの本を教えて」と頼むときに、本のタイトルを伝えるような感じ。

def recommend_book(friend_name, book_title)
  puts "#{friend_name}さんにおすすめの本は「#{book_title}」です!"
end

# メソッドを呼び出す
recommend_book("Alice", "ハリーポッターシリーズ")
recommend_book("Bob", "銀河鉄道の夜")

メソッドの戻り値

メソッドが実行された結果として返される値のこと。
友達に頼まれて本を探してきたときに、友達がその本を受け取るような感じ。

def find_book(title)
  # ここに本を探す処理を書く
  # 例えば、与えられたタイトルと一致する本を探す

  found_book = "『#{title}』"  # タイトルに一致する本を見つけたとする
  return found_book  # 友達に見つけた本を返す
end

# メソッドを呼び出す
book_title = "ハリー・ポッターと賢者の石"
book = find_book(book_title)
puts "友達に「#{book}」を見つけたよ!"  # 友達に見つけた本を渡す

インスタンス

個々の特有の名前。
例えば「ポチ」「たろう」という二匹の柴犬がいた場合、ポチたろうがインスタンス。

# 柴犬クラスの定義
class ShibaInu
  def initialize(name, age)
    @name = name
    @age = age
  end

  def bark
    puts "#{@name}がワンワンと吠えました!"
  end

  def introduce
    puts "私は#{@name}という柴犬で、#{@age}歳です。"
  end
end

# インスタンスの作成
pochi = ShibaInu.new("ポチ", 3)
taro = ShibaInu.new("タロウ", 5)

# インスタンスの操作
pochi.bark   # 出力: ポチがワンワンと吠えました!
taro.introduce  # 出力: 私はタロウという柴犬で、5歳です。

インスタンスメソッドと呼び出し方

あるオブジェクト(インスタンス)に対して呼び出すことができるメソッドのこと。
上記例の

pochi.bark   # 出力: ポチがワンワンと吠えました!
taro.introduce  # 出力: 私はタロウという柴犬で、5歳です。

の、barkintroduceがインスタンスメソッド。

その他の基本的な構文や概念

クラス

良く言われる例として設計図が挙げられる。
「クラスとは?」と言われても、もはや「設計図」としか答えられない。

面白いのが、クラスを定義すると「initializeメソッドを設けないといけない」ということ。
initializeメソッド初期化を表す。
だからAlice,Bobの2人の教室(クラス)にMichaelが転校してきても、簡単に入学手続きができるということ。

#クラスを定義
class Person
  def initialize(name, age, gender)
    @name = name
    @age = age
    @gender = gender
  end

  def walk
    puts "#{@name} is walking."
  end

  def talk(message)
    puts "#{@name} says: #{message}"
  end
end

#メソッドを定義
person1 = Person.new("Alice", 25, "Female")
person2 = Person.new("Bob", 30, "Male")
person3 = Person.new("Michael", 28, "Male")  # Michaelを追加

person1.walk
person2.talk("Hello!")
person3.walk  # Michaelが歩く
0
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
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?