見出し画像

Ruby まとめ

ターミナル

ルートディレクトリ  
階層構造の一番上にあるディレクトリ

カレントディレクトリ
 
現在作業中となるディレクトリ

ホームディレクトリ
  
新規ターミナル立ち上げ時、作業中のディレクトリ

パス
        
ディレクトリやファイルの所在を示す文字列。

絶対パスルート
ディレクトリから指定するパス

相対パス
カレントディレクトリから指定するパス

lsコマンド
listの略、ディレクトリやファイルの一覧を表示する。

cdコマンド
change directoryの略、カレントディレクトリを移動する。

pwdコマンド (
print working directory)
カレントディレクトリのパスを表示する。

whoamiコマンド
Macのユーザ名を確認できる。

$(プロンプト)
$が表示されていれば、入力待ちであることを示す。
# カレントディレクトリの中身を一覧表示する
$ ls

# 指定したディレクトリの中身を一覧表示する
$ ls [中身を表示したいディレクトリのパス]

# 指定したディレクトリへ移動
$ cd [移動したいディレクトリのパス]

# ホームディレクトリへ移動
$ cd

# ルートディレクトリに移動
$ cd /

Rubyファイルを作成

ファイル名は自由だが、〇〇.rbのように .rb という拡張子をつける。
拡張子はファイルの種類を識別するため末尾につける。

・オブジェクト
Rubyで扱う全てのデータをオブジェクトと呼ぶ。
オブジェクトは    という意味。

文字列オブジェクト   文字
数値オブジェクト    数
時刻オブジェクト    時間
日付オブジェクト    日付
配列オブジェクト    複数のデータ
# 文字列は文字を"(ダブルクォテーション)か'(シングルクォテーション)で囲む。
"文字列a"
'文字列b'

メソッド

プログラミングにおける処理をする命令群のこと。
プログラム中に記述することで、メソッドの処理を実行できる。
メソッドの処理は様々で、値を求めたり実行したい処理を命令できる。

・putsメソッド
ターミナルに文字を出力する。

・コメントアウト
Rubyでコメントアウトするには文字の先頭に # を記述。

〇〇.rb

puts "Hello World"

# これでコメントアウト

・rubyコマンド
Rubyファイルをプログラムとして実行する。

ターミナル

$ ruby Hello World.rb

・irbコマンド
対話シェルを起動。直接プログラムを入力してRubyを実行。
コマンドの終了は、起動中に exit と入力しエンターキーを押す。

ターミナル

$ irb                               # 対話シェルを起動
irb(main):001:0> "This is string."  # プログラムを書いてエンターキーで実行
=> "This is string."                # 結果の表示
irb(main):002:0> exit               # 対話シェルを終了

# 文字列を連結
irb(main):001:0> "Hello " + "World"
=> Hello World

・lengthメソッド

ターミナル

# 文字列の文字数を返す。11は返り値。
irb(main):001:0> "Hello World".length
=> 11

返り値

オブジェクトやメソッドの最終的な値のこと。戻り値とも言う。
Rubyのオブジェクト自体、メソッドを利用した式には、全て返り値がある。

・to_sメソッド
数値オブジェクトが持つメソッド。文字列に変換できる。

ターミナル

# 数値「20」にto_sメソッドをつけて実行
irb(main):001:0> 20.to_s
=> "20"

演算子

プログラミングにおける計算や、比較などに使用する記号。

・代数演算子(+, -, *, /, %)
・比較演算子(>, <, ==,>=, <=)

 値同士を比較したい場合に使用。
 返り値trueもしくはfalseと呼ばれるオブジェクト。
・trueオブジェクト falseオブジェクト
 真であればtrue、偽であればfalseで表される。
・論理演算子(!)
 !(エクスクラメーションマーク)は not演算子と呼ばれ、否定の意味。
 !と=を合わせた!=は、==と反対の意味で 値同士が等しくない場合に
 trueを返す。
ターミナル

# 代数演算子 足し算
irb(main):001:0> 1000 + 2000
=> 3000

# 引き算
irb(main):002:0> 3000 - 1500
=> 1500

# 掛け算
irb(main):003:0> 50 * 40
=> 2000

# 割り算
irb(main):004:0> 600 / 15
=> 40

# 剰余演算(5 ÷ 2をした余り)
irb(main):005:0> 5 % 2
=> 1

# 比較演算子 20は1より大きいか?
irb(main):001:0> 1 < 20
=> true

# 1は20より大きいか?
irb(main):002:0> 1 > 20
=> false

# 2 × 5は10と等しいか?
irb(main):003:0> 2 * 5 == 10
=> true

# 10は20と等しいか?
irb(main):004:0> 10 == 20
=> false

# 2 × 3は6以上か?
irb(main):001:0> 2 * 3 >= 6
=> true

# 2 × 3は6より大きいか?
irb(main):002:0> 2 * 3 > 6
=> false

# 4 × 5は20以下か?
irb(main):003:0> 4 * 5 <= 20
=> true

# 4 × 5は6より小さいか?
irb(main):004:0> 4 * 5 < 6
=> false

# 論理演算子 2 × 3 は6か?
irb(main):001:0> 2 * 3 != 6
=> false

# 2 × 3 は10か?
irb(main):002:0> 2 * 3 != 10
=> true 

変数

オブジェクトの入れ物、またはオブジェクトを識別する名札。
変数の名前を使うだけで何度も呼び出せる。

・変数の宣言
 変数名をつけて変数を作ること。変数名は原則小文字。
定義
 宣言した変数にどんな値を格納するか記述。
・命名規則
 小文字から始める
 1文字目でなければ大文字や数字、_(アンダーバー)が使える。
 名前にスペースが入ってはいけない
 予約語(最初から用途を持った単語)と同じ名前は使用不可。
〇〇.rb

変数名 = 格納する値

代入

変数のあとの = は数学のように等しいという意味ではなく、
代入する という意味。= は代入演算子と呼ぶ。
Rubyでは = が1つの式は必ず
『右側の値を左の変数に代入する』という意味。

再代入

代入したあとの変数に、別オブジェクトを再び代入できる。
プログラム中に何度でも変更可能。

定数

変数と違い、 一度代入したら再代入できない。
慣習として、定数は名前をすべて英大文字

ターミナル

# 変数numberの中身を、"Hello World".lengthの返り値11と定義。
irb(main):001:0> number = "Hello World".length

# numberを呼び出すと、格納された11が出力。
irb(main):002:0> puts number
11
=> nil

# 何度実行しても、11が出力される。
irb(main):003:0> puts number
11
=> nil

# 変数に再代入
irb(main):003:0> value = "See you"
=> "See you"

# 変数を出力
irb(main):004:0> puts value
See you
=> nil

# 定数に代入
irb(main):001:0> VALUE = "Hello World"

# 定数を出力
irb(main):002:0> puts VALUE
Hello World
=> nil

返り値の理解を深める

出力と返り値は別。Rubyでは全ての記述に返り値がある。

〇〇.rb

# 文字列を書いた場合
"hello"
# => で返り値を示します。返り値はオブジェクト自身。
=> "hello"

# 式を書いた場合
1 + 1
# 返り値は式の計算結果。
=> 2

# メソッドを利用した場合
"hello".length
# 返り値はメソッドの実行結果。
=> 5

# putsメソッド
puts "hello"
# 出力されるが、返り値はnil
hello
=> nil

# =による代入式
num = "hello world".length
# 返り値は、左の変数に代入された値
=> 11

バックスラッシュ記法

\n  改行
\t  タブ
\b バックスペース
\\  バックスラッシュ

バックスラッシュ記法が適応されるのは文字を  " で囲んだときのみ 。
' で囲うとただの文字として出力される。

sample.rb

# ダブルクォーテーションで囲いバックスラッシュ記法を使う
puts "改行したい改行したい\n改行した"
puts "タブしたいタブしたい\tタブした"

# シングルクォーテーションで囲うとバックスラッシュ記法は使えない
puts '改行したい改行したい\n改行できなかった'
puts 'タブしたいタブしたい\tタブできなかった'
ターミナル

$ ruby sample.rb

# 結果
改行したい改行したい
改行した
タブしたいタブしたい    タブした

改行したい改行したい\n改行できなかった
タブしたいタブしたい\tタブできなかった

式展開

書き方は文字列中で#{式}とするだけ。
文字列を作るときに " (ダブルクォテーション)で囲む必要がある。

sample.rb

name = "佐藤"
puts "わたしの名前は#{name}です。"
puts "1と3を足した値は#{1 + 3}です。"
ターミナル

$ ruby sample.rb

# 結果
わたしの名前は佐藤です。
13を足した値は4です。

・getsメソッド
ユーザがターミナルから入力できるようにするためのメソッド。
ユーザが入力した値を文字列としてプログラムに渡す。
getsメソッドが呼ばれると ターミナル画面は入力待ちの状態になります 。値を入力してエンターを押すと、入力した文字をプログラムに返します。

sample.rb

input = gets
puts "入力した値は#{input}です"
ターミナル

$ ruby sample.rb
# 任意の値を入力 xyz

# 結果
入力した値は xyz です

getsで返ってきた文字列は勝手に文末で改行してしまう。

・chompメソッド
文字列の末尾に存在する改行を取り除いた文字列を返す。

sample.rb

string = "改行\n\n"
puts string       
puts string.chomp
ターミナル

$ ruby sample.rb

# 結果
改行します

改行します

ハッシュオブジェクト

自身の中に データ と対応するキーのセットを所持することができる。
複数のデータを持つことのできるオブジェクト。ハッシュと呼ぶ。

キーバリューストア

保存したいデータ(バリュー)とそれに対応する標識(キー)を対応させてペアで保存する方式。キーを指定すれば対応するデータを取り出せる。

sample.rb

# ハッシュの生成。dataは変数名で任意の名前を定義できる。
# 下記はデータのない空のハッシュ。
data = {}

# 生成のときにデータも持てる。
data = {キー1: ”値1”, キー2: ”値2”}

# ハッシュから値を取得
hash = {title: "xxx"}
puts hash[:title]

# ハッシュに値を追加
hash = {title: "xxx"}
puts hash[:title]
hash[:title] = "zzz"
puts hash[:title]

シンボルオブジェクト

ハッシュのキーのような名前を識別するためのラベル。
先頭につける記述(接頭語)としてコロン : をつける。
基本的に文字列と同じように扱える。シンボルと呼ばれます。

条件分岐の文法

・if文
条件式が正しいか正しくないかで実行する処理を分岐させることができる。

# if 条件式 thenにおける then は省略できる。
if 条件式 then
# 条件式が真(true)のときに実行する処理
end
〇〇.rb

# value > 0で、valueは3なので条件式はtrueとなります。
# if 条件式 thenとendの間の処理が実行され、"値は正です"と表示される。
value = 3
if value > 1 then
 puts "値は正です"
end
# 条件式が偽のときに処理はelse.
if 条件式 then
 # 条件式が真(true)のときに実行する処理
else
 # 条件式が偽(false)のときに実行する処理
end
〇〇.rb

# 条件式はfalseとなり、"値は負です"と表示される。
value = -3
if value > 1 then
 puts "値は正です"
else
 puts "値は負です"
end
if 条件式1 then
 # 条件式1が真(true)のときに実行する処理
elsif 条件式2 then
 # 条件式1が偽(false)のとき、かつ
 # 条件式2が真(true)のときに実行する処理
else
 # 条件式1と条件式2がどちらとも偽(false)のときに実行する処理
end

・to_iメソッド
文字列を数値オブジェクトに変換する。

〇〇.rb

# getsメソッドの返り値は入力した値の文字列
# to_iメソッドを使い、文字列になっている返り値を数値に変換
value = gets.to_i

if value > 0 then
 puts "値は正です"
elsif value < 0 then
 puts "値は負です"
else
 puts "値は0です"
end

・メソッドの定義

# 決まったものだけでなく自分で定義できる。
# 小文字の英語から始まり、単語は_で繋ぐ。数字からは始めない。
def メソッド名
 # 実行する処理
end
〇〇.rb

# メソッドの定義
def say_say
 puts "Hello World"
end

# メソッドの実行
say_say

繰り返し処理(ループ処理)

・while文

# 繰り返し処理を行う文法の1つ。while文のdoは省略できる。
# 条件式がtrueのとき、doからendまでの処理を繰り返す。
while 条件式 do
 # 処理を実行する
end

# 処理の条件によっては無限ループという状態に入ってしまいます。
# 無限ループは control + c でプログラムを強制終了。

自己代入演算子

# 自分自身に代入する。
# 変数number1を足した値をnumber自身に代入する処理
number += 1
+=  足した値を自身に代入
-=  引いた値を自身に代入
*=  かけた値を自身に代入
/=  割った値を自身に代入

・exitメソッド

〇〇.rb

# exitメソッドはプログラム自体を強制終了させる。
# whileの条件式をtrueにすると、xxxを呼ぶまで同じ処理を続ける。
while true do
 input = gets.chomp         
 if input == "xxx" then     
   exit                    
 end

 puts "ループ中"
end

配列オブジェクト

ハッシュと同じく、1つの変数でたくさんの情報を持つことのできる
オブジェクト。ハッシュがキーで管理していたのに対して、
配列は順番でオブジェクトを管理します。配列と呼ぶ。

要素

配列の中のデータは要素と呼ぶ。要素は順番を持っていて、
配列に入れた順に割り振られます。

# 空の配列を生成
配列オブジェクト名 = []
〇〇.rb

# 最初に書いた要素の方から順番に入る。
pencil_case = ["ペン", "消しゴム", "定規"]
puts pencil_case

配列演算子(<<)

# 配列に対して様々な処理を行う演算子を配列演算子という。
配列オブジェクト << 追加する要素
〇〇.rb

# 配列 pencil_case に文字列 えんぴつ を追加
# 配列の一番最後に追加される。
pencil_case = ["ペン", "消しゴム", "定規"]
pencil_case << "えんぴつ"
puts pencil_case

・lengthメソッド

ターミナル

# lengthメソッドは配列の要素数を返す。
irb(main):001:0> ['あお', 'きいろ', 'あか'].length
=> 3
〇〇.rb

# 最初は3,追加後は5が返る。lengthで要素の数がわかる。
pencil_case = ["ペン", "消しゴム", "定規"]
puts pencil_case.length

pencil_case << "えんぴつ"
pencil_case << "付箋"
puts pencil_case.length

スコープ

変数を利用できる範囲。範囲外の変数を使う、エラーになる。

〇〇.rb

# ①下記は正常。
capital = "東京"
puts capital

# ②範囲外のためエラー。
capital = "東京"  
def osaka
 puts capital
end
osaka

# ③同名でもスコープの範囲で挙動が変わる。
capital = "東京"  
def osaka
 capital = "通天閣"  # americaの首都「ワシントン」を再代入
 puts capital
end
osaka

引数(ひきすう)

プログラムでメソッドなどに渡すことのできる値のことで、
スコープ外の変数をメソッドの中で使える。引数は複数用意でき、
左から順に「第一引数」「第二引数」...と呼ぶ。
引数:メソッド定義時に()の中に記述。
実引数:メソッドを呼ぶ際に()の中に渡す値を記述。
仮引数と実引数の名前は、一致しなくても良い。

# メソッドの定義
def メソッド名(仮引数)
 実行する処理
end

# メソッドの呼び出し
メソッド名(実引数)​
〇〇.rb

# 仮引数と実引数の名前は、一致しなくとも良いが誰が見ても何の値を持つかわかるものにする
def multi(number)
 puts number * number
end

puts "数字を入力してください"
number = gets.to_i

multi(value)

・return文

〇〇.rb

# メソッド内でreturnとすると、returnの後ろに続けた式がメソッド自体の返り値になる。
# return利用時点で返り値が決まると、その行の処理を終えると強制的に終了する。
def sample
 "1"
 "2"
 "3"
 return "4"   # ここで処理は終わり
 "5"                    
end
puts sample  # => 4
〇〇.rb

# Rubyではreturn文を省略できる。
# 省略した場合、返り値はそのメソッドの中で最後に実行された式の値となる。
def sample
 "1"
 "2"
 "3"
end
puts sample    # => 3

仮引数と実引数の例

〇〇.rb

# メソッドの変数には引数で渡した値のコピーが代入されています。
# 引数のnameとrenameメソッドで受け取る変数nameは名前は同じですが、別物。
def rename(name)
 name = "Mr.#{name}"
end

name = "Tanaka"
rename(name)
puts name    # => Tanaka
〇〇.rb

def rename(name)
 name = "Mr.#{name}"
end

name = "Tanaka"
name = rename(name)
puts name     # => Mr.Tanaka

添字(インデックス)

配列は順番を指定することで対応する値を取得できます。
この割り当てられた数字を 添字 または インデックス と呼びます。

配列[添字]

# 配列の順番は0から始まる。
animals = ["いぬ", "ねこ", "ねずみ"]

puts animals[1]   # => ねこ

・eachメソッド

# 配列に含まれる要素を順に取り出して 繰り返し処理を行う。
配列オブジェクト.each do |変数|
 # 処理
end
〇〇.rb
animals = ["いぬ", "ねこ", "ねずみ"]
number = 0

animals.each do |animal|
 puts animal
 number = number + 1
end
 puts "#{number}回繰り返しました"     # => いぬ
                       #   ねこ
                       #   ねずみ
                       #   3回繰り返しました

クラスとインスタンス

・クラス
共通の属性(プロパティ)と処理(メソッド)をまとめたオブジェクト。
クラスはデータを作るためのひな形のようなもの。
クラス名は半角英大文字から始めます。

・インスタンス
クラスからデータや処理を引き継いで複製されたオブジェクト。
クラスの特徴を引き継ぐ。クラスのnewメソッド(定義しなくても利用できます)を実行させることにより生成できる。

〇〇.rb

class Review

end

review = Review.new  # Reviewクラスのインスタンスを生成
puts review  # インスタンスを出力

・インスタンスメソッド
インスタンスが使用できるメソッド。クラスに定義する。
インスタンスごとの個別の情報(属性値)を使った処理に使う。

# インスタンスメソッドの呼び出し
インスタンス名.メソッド名(引数)

〇〇.rb

class Review
 def write_review
   puts "タイトルを入力してください"
   title = gets.chomp
   puts "ジャンルを入力してください"
   genre = gets.chomp
   puts "感想を入力してください"
   impression = gets.chomp
 end
end

review = Review.new  # Reviewクラスのインスタンスを生成
review.write_review  # write_reviewメソッドを実行

属性と属性値

オブジェクトが持つ性質となる情報は、属性(プロパティ)と呼ばれ、
それぞれに当てはまる値を属性値、プロパティ値と呼びます。例えば赤色の車の場合、属性「color(色)」は「red(赤)」という属性値を持ちます。

・インスタンス変数
オブジェクトが持つ属性を定義する変数。

# 変数名の始めに@(アットマークを1つ)をつける。
class クラス名
 def メソッド名
   @変数名 = 値  # インスタンス変数
 end
end

・クラスメソッド
クラスで共通の情報を使った処理に使う。

class クラス名
 def self.メソッド名
   # 処理
 end
end

・クラス変数

# クラス全体で使用できる変数。@@(アットマークを2つ)をつける。
# いくらインスタンスを生成しようと初期化されない。共通の情報を持つことに適しています
class クラス名
 @@変数名 = 値
end

・クラスメソッドとインスタンスメソッドの違い

・クラスメソッド          
定義方法   メソッド名の前にselfを付ける。
用途     個別の属性値は関係のない共通の処理。
呼び出し元  クラス自身 クラスのインスタンス。

・インスタンスメソッド
定義方法   selfは付けない。
用途     インスタンスごとの属性値を用いる個別の処理。
呼び出し元  クラスのインスタンス。

・クラス変数とインスタンス変数の違い

・クラス変数
定義方法     変数名にアットマーク2つ@@を前置。
用途       クラスで共通の属性値を持つ場合。
扱えるメソッド  クラスメソッドとインスタンスメソッド。

・インスタンス変数
定義方法     変数名にアットマーク1つ@を前置。
用途       インスタンスごとに異なる個別の属性値を持つ場合。
扱えるメソッド  インスタンスメソッド。

・スコープの範囲

クラス変数        クラスメソッド内、インスタンスメソッド内
             定義したクラス内、継承したクラス内

インスタンス変数       インスタンスメソッド内、継承したクラス内

クラスインスタンス変数  クラスメソッド内、定義したクラス内

・initializeメソッド
インスタンスが生成された瞬間に、そのインスタンスが実行する処理を定義するインスタンスメソッド。

・クラスの継承
あるクラスに定義されたメソッドを、別の新規クラスで利用できるように
した上でクラスを定義すること。元となるクラスを親クラス、親クラスの
メソッドを引き継ぎ新しく作成するクラスを子クラスと呼ぶ。親クラスで定義された共通のメソッドを変更すると、変更を子クラスに反映できる。

class 子クラス名 < 親クラス名
end
Carクラス(親クラス)

class Car
 def speed_up
   puts "加速します"
 end

 def speed_down
   puts "減速します"
 end

 def horn
   puts "プップー"
 end
end
PatrolCarクラス(子クラス)

class PatrolCar < Car  # クラスの継承
 def siren
   puts "ピーポーピーポー"
 end
end


この記事が気に入ったらサポートをしてみませんか?