こんにちは。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歳です。
の、bark
とintroduce
がインスタンスメソッド。
その他の基本的な構文や概念
クラス
良く言われる例として設計図
が挙げられる。
「クラスとは?」と言われても、もはや「設計図」としか答えられない。
面白いのが、クラスを定義すると「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が歩く