1
1

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 5 years have passed since last update.

【Progate:Rubyコース終了】引っ掛かりそう・忘れそうなところ

Posted at

(結局びっしりかいてしまった。。。)

#を使うのは2カ所。

コメントを入れる場合と変数を文字列に含める場合。

#コメントです。

name = "げすと"
puts "こんにちは#{name}さん"

#ダメな例#
puts 'こんにちは#{name}さん'    #シングルクオーテーション(')だとそのまま文字列になっちゃう。

変数が2語以上=アンダーバーで区切る。

user_name    #userNameではない。

#条件分岐は、if,elsif,else,end
#かつ→&&、または→||
#配列→ names = ["Aさん", "Bさん", "Cさん",]
#繰り返し

names.each do|name|
  puts "名前は#{name}です"
end

#ハッシュ

user = {キー1 => 1, キー2 => 2}
#要素を追加↓
user[キー3] = 3

###ハッシュの別の書き方

#元のサンプル
user ={"name" => "Suzuki", "age" => 21}

#キーにシンボルという書き方を使う。文字列"name"的なもの(厳密には違う)。
user ={:name => "Suzuki", :age => 21}
puts user[:name]

#さらにその省略バージョン
user = {name: "Suzuki", age: 21}
puts user[:name]    #元はシンボルだから頭にセミコロンが必要。

#nil(ニル)←何もないの意
ハッシュから存在しないキーを取り出した場合。
任意項目として"age"というキーを設定したが、空欄だった場合などに「年齢は秘密です」などと条件分岐でメッセージを出したり。。。(適当)

#配列にハッシュを入れることもできる。

users = [
  {name: "Suzuki", age: 21}
  {name: "Kato", age: 14}
]
#この場合の要素の取り出し方は、配列[インデックス番号][キー]
puts users[0][:name]

#メソッド→複数の処理をまとめたもの。
#メソッド基本

def introduce(name, age)    #nameは第一引数という。
  puts "私は#{name}です"
  puts "#{age}歳です"
end
introduce    #これだけで実行できる。(putsは要らない。)

#戻り値
メソッドの処理結果を呼び出し元で受け取る。「メソッドが戻り値を返す」。←(゜Д゜) ハア??
以下ではaddメソッドが「1」と「3」を受け取り、処理結果の「4」を呼び出し元に返している。
この「4」にあたるのが戻り値。

def add(a,b)
  return a + b
  puts "(V)o¥o(V)"
  #↑returnはメソッドの処理を終了させるので、これは実行されない。
  #だからバルタン星人を書いても大丈夫^^
end
puts add(1,3)    #putsがないと4が出力されない。

#ちなみに…
def add(a,b)
  puts a + b
end
add(1,3)    #putsがなくても4が出力される。

add(1, 3)は単に「戻り値を受け取った」に過ぎないから、そのままでは何の動作も起こしませんよ、ってことだなたぶん。(+_+)
数値をそのまま「4」って記述してもだめで、「puts 4」ってしないとダメなのと同じだな。

#キーワード引数
引数があんまり多いようなら、指定しちゃえばいいじゃない!ってやつ。

def introduce_all(name:, age:, height:, weight:, favarite_food:)
                 #引数名の後に「:」を付ける。
  puts "私は#{name}#{age}歳です"
  puts "身長#{height}センチ、体重#{weight}キロ"
  puts "#好きな食べ物は#{favarite_movie}歳です"
end
introduce(favarite_movie: "どら焼き",height: 129.3, weight: 129.3...)
#「引数名: 引数」ってな感じでおk。

#クラスとインスタンス
クラスは空の設計図。ひな形的なもの。
インスタンスはモノ(現物的なもの)。
クラス(ひな形)からインスタンス(現物)を生成して、情報を追加していく。
(インスタンスは直訳で「事例」)

class Menu #大文字から始める
  attr_accessor :name    #シンボルなので、コロンはnameに寄せる。
                         #nameインスタンス変数という。
end #これでクラスができた。

menu1 = Menu.new    #「Menu.new」でインスタンスを生成し、変数(menu1)に代入している。

##インスタンス変数へ代入

class Menu
  attr_accessor :name
end
menu1 = Menu.new
menu1.name = "すし"    #インスタンス変数に情報を代入している。

##インスタンスメソッド

class Menu
  attr_accessor :name
  def show #インスタンスの中でメソッド定義
    return "#{self.name}食いねぇ"    #インスタンスメソッドの中では「self.変数名」とする。
  end
end

menu1 = Menu.new
menu1.name = "すし"
puts menu1.show

selfとはインスタンス自身のことなので、Menu.name的なイメージ。
(実際にはMenu.newでインスタンスは生成されるのであくまでイメージ)

##initializeメソッド
インスタンス生成直後に実行されるメソッド。

class Menu

  def initialize
    self.name = "すし"    #これもインスタンスメソッドなのでself.変数名となる。
  end

end

menu1 = Menu.new    #このインスタンス生成直後にdef initializeが実行される。

#require
ファイルを分けた時に呼び出す命令

require "./menu"

#入力してもらう。

name = gets.chomp    #だいたいすぐ変数などに代入する。
order = get.chomp.to_i    #「.to_i」を付けると、文字列から数値に変換できる。

#クラスの継承・オーバーライド

require "./manu"   #親クラスのファイルを呼び出して、、、

class Food < Menu    #子クラス生成時に、親クラスを指定する。

  attr_accessor :calorie    #親クラスにない変数はここで追加できる。

  def calorie_info    #同じくメソッドも追加できる。
    #処理#
  end

  def info    #親クラスと同じメソッドを指定したら、上書きされて子クラスのメソッドが実行される。
    #処理#
  end
end

##super
もしも重複部分がある場合は、

require "./manu"

class Food < Menu
  attr_accessor :calorie

  def initialize(name:, price:, calorie:)    #initializeメソッドを上書きしつつ、
    super(name: name, price: price)    #nameは親クラスのname,priceも親クラスのnameという指定をすれば、重複部分は省略できる。
    self.calorie = calorie
  end
end

ちなみに上は、親クラスのinitializeメソッドで

def initialize(name:, price:)
  self.name = name
  self.price = price
end

という代入が行われている前提。

#Dateクラス
最初から用意されているクラスなので、定義不要。

require "date"    #Dateクラスの読み込み
#"./date"や"Date"ではない。

date1 = Date.new(2018, 12, 3)    #Dateクラスのインスタンスを生成
date1 = Date.today    #今日の日付のインスタンスを生成
puts date1.sunday?    #日曜日かどうかの真偽値を返すインスタンスメソッド

#クラスメソッド
クラスに対して呼び出すメソッド。インスタンスに対して呼び出すインスタンスメソッドとの違いに注意。


class Menu

  def Menu.is_discount_day?    #インスタンスメソッドと異なり、「クラス名.」が必要
                               #「クラス名.」はクラスに対して呼び出してますよということ
    today = Date.today
  end

  def get_total_price
    if Menu.is_discount_day?     #get_total_priceというインスタンスメソッドの中でも呼び出せる。
      #処理
    end
  end
end

date1 = Date.today    #先ほどのこれもクラスメソッド
                      #クラスであるDateに対して呼び出している。
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?