Ruby
サイトではなく、Webアプリケーションを作るための言語として、日本人によって作られた「楽しさ」を重視した言語
-
puts
など、命令を出すものを メソッド(関数) といい、複数の処理を1つにまとめたもの - メソッドに渡す値を 引数 という
変数と定数
変数
- 変数:値を変えることが可能(代入できるもの)
- 変数名の1文字目は、小文字のアルファベットか
_
(アンダースコア)のみが使用可能 - 数字で始まる変数名はNG
- 変数名の1文字目は、小文字のアルファベットか
定数
- 定数:値を変えることができないもの
- 定数の始まりは大文字で、
_
で区切る(スネークケース)
- 定数の始まりは大文字で、
型変換
文字列や数値をそれぞれの方に変換し、組み合わせることができる
型変換方法 | 説明 |
---|---|
.to_s |
整数→文字列 |
.to_i |
文字列→整数 |
上記の方法を使うと煩わしい場合があるため、変数展開や文字列展開("#{word}")が便利
ダブルクォーテーションで囲った場合のみ機能し、どんな型も変換できる
name = "太郎"
weight = 60
puts "#{name}さんの体重は#{weight * 2}kgです"
# 出力: 太郎さんの体重は120kgです
# 入力は {} (波括弧)、出力は [] (角括弧)
👉🏻 if条件分岐
==
: 一致
!=
: 不一致
!
: 否定
&&
: どちらも正しければ
||
: どちらかが正しければ
👉🏻 while
指定した条件式が真(true)の間、繰り返し実行
while 条件 do
処理
end
👉🏻 for
範囲内を順に繰り返す
for 変数 in(範囲,ハッシュ,配列) do
処理
end
👉🏻 rand
ランダムで数字を出力
ゲーム内のサイコロをイメージすると分かりやすい
無限ループが発生した場合、Ctrl+Cで強制終了
👉🏻 each
要素を順に取り出す
(ハッシュ等).each do |変数|
処理
end
break:強制終了
👉🏻 メソッド
複数の処理を1つにまとめて扱いやすくしたもの
length
文字列型に使用すると文字数を数えてくれる
puts "Qiita".length
# 出力: 5
reverse
文字列を逆に表示
puts "Qiita".reverse
# 出力: atiiQ
include?
引数に指定した文字列が含まれているかどうかを調べる
puts "Qiitaでアウトプット".include?("Qiita")
# 出力: true
# 含まれていない場合はfalseが出力
methods
使用可能なメソッドを一覧で表示できる
puts "Qiitaでアウトプット".methods
# 出力: encode
# encode!
# include?
# %
# *
# +
# count
# partition
# sum
def
オリジナルのメソッドを作れる!
def メソッド名(引数)
処理(戻り値)
end
例
def greeting(name)
"Hello, #{name}!" # この行のnameは、引数で渡すname
end
puts greeting('John') # 'John'を引数として渡す
# 出力: Hello, John!
def greeting(name)
return "Hello, #{name}!"
"Good morning, #{name}!"
end
puts greeting('John')
# 出力: Hello, John!
重複する場合は後者が返されるが、returnを追加すれば、returnが返される
👉🏻 シンボル :シンボル
:コロン
で定義したものを、シンボルと言う
文字列とは違い、シンボルは不変で、プログラム内で1つだけのインスタンスを持つため、
同じ名前のシンボルは常に同じオブジェクトIDを持つ
この特性が、シンボルの処理が高速である理由の一つ
- .object_id(メソッド)
オブジェクト固有のid(割り振られた整数)を取り出すことができる
# 文字列オブジェクト
dog1 = "犬"
dog2 = "犬"
# シンボルオブジェクト
dog3 = :犬
dog4 = :犬
puts dog1.object_id
puts dog2.object_id
puts dog3.object_id
puts dog4.object_id
実行したとすると、以下のような結果になる
<文字列オブジェクトの場合>
70292126869460
70292126869440
<シンボルオブジェクトの場合>
1058268
1058268
整数管理しているため、処理が高速で、検索などに向いている
つまり他のデータとは重複しないことが保証されており、
このように**「同じものが複数あると困るもの」**を扱う時にシンボルが使われる。
👉🏻 class
class内は、メソッドを集約したようなもの(設計図)
class内のメソッドをインスタンスメソッドという
- クラス :設計図
- メソッド :設計図の内容
- インスタンス:設計で作られるもの
インスタンス名 = [クラス名.new] : 代入
インスタンス名.メソッド名(引数) : 呼び出し
-
.class
: どのクラスに属するか調べることができる -
.join()
: ()内の文字を、文字の間に入れる -
self.メソッド(引数)
: .newは不要で、クラスメソッドとして1行で呼び出すことができる
👉🏻 『クラスの継承』
親クラスから継承することで、子クラス内で再度定義(メソッド)する必要がない
=可読性が高いコードになる!!
継承すべきか迷った時は、『AはBの一種である(is-a)』が成立するかで考える
例えば・・・ バスは車の一種である
猫は動物の一種である
オーバーライド
:子クラスで親クラスの上書きができる
子クラスのメソッド内に「super」と書くと、親クラスの同名メソッドを取り出すことができる
.superclass
で親クラスを調べることができる