(結局びっしりかいてしまった。。。)
#を使うのは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に対して呼び出している。