Rubyとは
日本人が作ったプログラミング言語で初心者の方にも分かりやすい言語になっています! できる事は主にWebアプリ制作になります! Webアプリとはアマゾンや、食べログなどインターネット上で使うシステムの事です!環境構築
プログラミングを行うには、まずコードを打つ環境を整える必要があります。 システムを作るには、VS.codeというエディタをダウンロードして、Rubyをインストールするなどして環境を整える必要があります! ですが、今回は練習ですので、その必要はありません! paiza.ioという練習用の環境を使ってやっていきたいと思います! ⇓ https://paiza.io/projects/r8lj6ejAxv0ZdkRru2XrzQまずこちらのURLを開いてください!
すると、上記のようなエディターがでます。左斜め上の赤線が引いてある場所が言語の選択になっておりますのでクリックします。
⇓
⇓
左斜め上の言語がRubyになりましたら、環境構築完了です!
では、実際に手を動かしてコードを書いていきましょう!!('_')
手を動かすことによって理解度が全然違います!
これができれば、問題が終わる頃にはRubyが書けるようになっていますので、頑張りましょう!
こちらの続きを今回は行います!
⇓
https://qiita.com/Tech_Leaders/private/f0250260fa6d5661781a
まだやっていない方は、上記のURLで学習をお願いします!
メソッド(関数)を出力してみよう
メソッド(関数)とは、プログラムの別の場所から呼び出せる処理のまとまりの事です。 メソッドは呼び出されるまで、実行されません。それでは実際にコードを書いていきましょう!
#engineerがメソッド名
#userが引数
def engineer(user)
puts "#{user}月収60万円" #defからendまでメソッド
end
engineer("貴田さん") #引数="貴田さん"
engineer("勉さん") #引数="勉さん"
⇓
貴田さん月収60万円
勉さん月収60万円
defは、メソッドを作る時に行われて、engineerはメソッド名になります。
カッコの中(user)は引数と言います。
引数はメソッドを呼び出すときにメソッドの外から代入する事ができる変数です。
ここだとengineer("貴田さん")がdefとendの外にあり、engineerの()内の"貴田さん"がuserの引数に当たる所に代入されて、engineer(user)メソッドが呼び出されるという流れです!
engineer(user)というメソッドが呼び出されて、def engineer(user)とendに挟まれている部分の処理が実行されます!
呼び出さないと処理は実行されません。
出力結果が
"貴田さん月収60万円"
"勉さん月収60万円"
という事になります。
数字を引数に代入した場合
#engineerがメソッド名
#moneyが引数
def engineer(money)
puts "めざせ月収#{money}万円" #defからendまでメソッド
end
engineer(60)
⇓
めざせ月収60万円
数字の場合は""(ダブルクォテーション)←がいらなくなります。
それにしても、月収60万円羨ましいですね!!('ω')
では実際に説明しても分かりずらいと思いますので実際に手を動かしていきましょう!
演習問題1
1-1.shoppingメソッドに引数bagにシャネルとグッチとビトンを代入して「000を買いました」と出力してみましょう。
1-2.shoppingメソッドに引数bagにシャネルとグッチとビトンを代入して「ビトンは買いました」「シャネルは買ってません」「グッチはもらいました」と出力してみましょう。
メソッドの引数について
次にメソッドの引数について補足を致します。 メソッドに引数がない場合は、引数なしという形になり、空の()は必要ありません。 他のプログラミング言語では、()を付ける場合が多いですが、rubyの場合は必要ないです。#foodがメソッド名
def food
puts "シラス丼が食べたい"
end
food
シラス丼が食べたい
複数の引数を受け取る場合はカンマで区切って、複数持たせる事ができます。
呼び出すときもカンマで区切ぎります。
#dreamがメソッド名
def dream(how, want)
puts "#{how}彼女が#{want}"
end
dream("可愛い", "欲しい")
"可愛い彼女が欲しい"
引数のデフォルト値というのもあります。
⇓
#dreamがメソッド名
def dream(how="美人な", want="欲しい")
puts "#{how}彼女が#{want}"
end
dream
dream(nil, "凄く欲しい")
dream("可愛い", "欲しい")
美人な彼女が欲しい
彼女が凄く欲しい
可愛い彼女が欲しい
howにはデフォルト値である"美人な"が入っており、wantには"欲しい"入っています。
その結果引数なしの場合は"美人な彼女が欲しい"
dream(nil, "凄く欲しい")の場合は"彼女が凄く欲しい"
(nilは何もないという意味です)
dream("可愛い", "欲しい")は"可愛い"と"欲しい"が代入されていますので、"可愛い彼女が欲しい"となります。
演習問題2
2-1.メソッド(dream)に引数がない状態で、"月収50万円稼ぐ"と出力してください。
2-2.メソッド(dream)にpgという引数とmoneyという引数を二つ持たせて、"プログラマーになって月収50万円稼ぐ"と出力してください。
2-3.2-2をデフォルト値で出力してください。
2-4.デフォルト値で出力しましたら、もう一つ、"フルスタックになって月収100万円稼ぐ"と出力してください。
キーワード引数
**キーワード引数**とは引数に名前をつける機能の事を言います。 では実際に書いた方が早いので書いていきたいと思います!
def nishino_age(age: 29)
puts age
end
nishino_age
nishino_age(age: 30)
29
30
引数: 値 で:(コロン)
を引数の後につけて値を代入する事をキーワード引数と言います。
上記で言うと
def nishino_age(age: 29)の、age:の部分です!
メリッドは引数の意味が見た目で分かりやすくなります!
この場合ですと、ageをキーワード引数として渡しているので年齢を渡しているんだな!
と分かりやすくなっています!
演習問題3
3-1.my_ageというメソッドのキーワード引数(age)に自分の年齢を入れてみましょう。可変長引数
1つの引数で、複数の値を配列で受け取る事ができる引数を**可変長引数**と言います!実際に書いていきたいと思います。
def place(*i)
puts i
end
place(1,2,3)
place("千葉","神奈川","東京")
1
2
3
千葉
神奈川
東京
引数の前に*を付ける事によって可変長引数になります。
数字も文字も配列で出力されます。
このように可変長引数は一つの引数で複数の値を受け取る事ができます!
演習問題4
4-1.可変長引数を使ってdinnerメソッドのfood引数にmeetとvegetableとfishを入れましょう。4-2.可変長引数を使ってdinnerメソッドのprice引数に500と1000と2000を配列で入れましょう。
オプション引数
1つの引数で復習の値をハッシュで受け取る引数を**オプション引数**と言います hash値はキーとバリューの組み合わせでデータを表現できる事を言います! **{:キー=>バリュー}** こんな形でデータを受け取れます。 では実際に動かしていきたいと思います。
def country(**japan)
puts japan
end
country(place1: "千葉", place2: "神奈川", place3: "東京")
{:place1=>"千葉", :place2=>"神奈川", :place3=>"東京"}
引数の前に**を付ける事によってオプション引数になります。
ハッシュ値で受け取る事ができます!
ちなみにハッシュのキーとバリューも引数の後ろにkeysとvaluesを打つことで出力する事ができます。
def country(**japan)
puts japan.keys
puts japan.values
end
country(place1: "千葉", place2: "神奈川", place3: "東京")
place1
place2
place3
千葉
神奈川
東京
演習問題5
5-1.オプション引数を使ってfoodのメソッドの引数fishの中にtunaが800円とoctopusが300円とsalmonが500円をハッシュ値で入れましょう。クラスの定義
まずはイメージをしてみましょう! プログラムでエンジニアの情報を書きたい場合エンジニア
名前: 貴田
年齢: 32歳
月収: 60万円
名前: 勉
年齢: 33歳
月収: 80万円
エンジニアの方々にはそれぞれ「名前」と「年齢」と「月収」という情報があります。
このエンジニアの方々を「もの」として捉えると
「もの」は「名前」や「年齢」や「月収」の情報を持っているということになり
この「もの」がプログラミングの場合「オブジェクト」と言います
プログラミングで前述したエンジニアのデータのようなものを作る場合、
先に設計図を用意する必要があります。
そしてこの設計図のことをクラスと呼び、「もの」のことをインスタンスと呼びます。
クラスはclass [クラス名]で定義することができます。
クラス名は必ず大文字で始めることとclassに対してendを記述する必要があります。
class Engineer
end
これで「エンジニアという設計図」ができました。
このメニューという設計図に、「名前」と「年齢」と「月収」という情報が持てるよう記述してみましょう。
情報を持たせるためには、attr_accessorを使います。
name属性とage属性とmoney属性を追加しましょう!
class Engineer
attr_accessor :name
attr_accessor :age
attr_accessor :money
end
これでエンジニアというクラス(設計図)に名前と年齢と月収いう属性を持ったものが用意できました。
次に、用意したEngineerクラスから実際のエンジニアの方のデータになるインスタンスを生成してみましょう。
クラスをもとに、新たにインスタンスを生成する場合は クラス名.newと記述します。
さらに、 変数名 = クラス名.newと記述することで生成したインスタンスを変数に代入することも可能です。
class Engineer
attr_accessor :name
attr_accessor :age
attr_accessor :money
end
engineer_1 = Engineer.new
これで空の状態のインスタンスが出来上がりました!
そして、生成したインスタンスをengineer_1という変数に代入している為、
この変数をインスタンスとして利用できるようになります。
ですが、この状態ではまだこのインスタンスは名前や価格の情報の値を持っていません。
次にこのインスタンスに情報を加えてみましょう!
それでは生成した空のインスタンスに、各情報を追加してみましょう。
インスタンスに情報を持たせる場合、クラスから用意したインスタンスに値を代入します。
具体的には、インスタンス.属性名 = 値と記述します。
.(ドット)で繋げるので、ドット記法と言います。
class Engineer
attr_accessor :name
attr_accessor :age
attr_accessor :money
end
engineer_1 = Engineer.new
# インスタンスに名前の情報を追加します。
engineer_1.name = "貴田"
# インスタンスに価格の情報を追加します。
engineer_1.age = "#{32}歳"
# インスタンスに月収の情報を追加します。
engineer_1.money = "月収#{60}万円"
puts engineer_1.name
puts engineer_1.age
puts engineer_1.money
"貴田"
"32歳"
"月収60万円"
次に貴田さんと勉さんの二人のデータのインスタンスを作成してみましょう!
class Engineer
attr_accessor :name
attr_accessor :age
attr_accessor :money
end
engineer_1 = Engineer.new
# インスタンスに名前の情報を追加します。
engineer_1.name = "貴田"
# インスタンスに価格の情報を追加します。
engineer_1.age = "#{32}歳"
# インスタンスに月収の情報を追加します。
engineer_1.money = "月収#{60}万円"
engineer_2 = Engineer.new
# インスタンスに名前の情報を追加します。
engineer_2.name = "勉"
# インスタンスに価格の情報を追加します。
engineer_2.age = "#{33}歳"
# インスタンスに月収の情報を追加します。
engineer_2.money = "月収#{80}万円"
puts engineer_1.name
puts engineer_1.age
puts engineer_1.money
puts engineer_2.name
puts engineer_2.age
puts engineer_2.money
貴田
32歳
月収60万円
勉
33歳
月収80万円
それぞれ出力に成功したらOKです!
これでエンジニアごとに情報をもたせる事ができました。
演習問題6
6-1.魚(fish)というclassにマグロとシャケという名前(name)と「シャケが500円」、「マグロが1000円」で値段(price)を出力してください!クラスの中でメソッドを作ろう
クラスの中ではメソッドを定義することが可能になります。
では早速記述していきたいと思います
class Engineer
attr_accessor :name
attr_accessor :age
attr_accessor :money
# coolメソッドを定義します。
def cool
# このメソッドが呼び出されたら、下記の文字列を出力します。
puts "イケメンエンジニア"
end
end
engineer_1 = Engineer.new
# インスタンスに名前の情報を追加します。
engineer_1.name = "貴田"
# インスタンスに価格の情報を追加します。
engineer_1.age = "#{32}歳"
# インスタンスに月収の情報を追加します。
engineer_1.money = "月収#{60}万円"
engineer_1.cool
puts engineer_1.name
puts engineer_1.age
puts engineer_1.money
イケメンエンジニア
貴田
32歳
月収60万円
このようにインスタンス(または代入された変数).メソッド名
と記述することで定義したメソッドが呼び出せます。
このインスタンスに対して呼び出すメソッドのことを、インスタンスメソッドと言います。
次に引数で受け取って戻り値で返すこともできます。
実際に記述していきたいと思います
class Engineer
attr_accessor :name
attr_accessor :age
attr_accessor :money
# coolメソッドを定義します。
def cool(name)
# このメソッドが呼び出されたら、下記の文字列を出力します。
p "イケメンエンジニア#{name}"
end
end
engineer_1 = Engineer.new
# インスタンスに名前の情報を追加します。
engineer_1.name = "貴田"
# インスタンスに価格の情報を追加します。
engineer_1.age = "#{32}歳"
# インスタンスに月収の情報を追加します。
engineer_1.money = "月収#{60}万円"
engineer_1.cool(engineer_1.name)
イケメンエンジニア貴田
このように、引数はメソッド内で使え、戻り値も出力できることがわかりました。
演習問題7
7-1.魚(fish)というclassにマグロとシャケという名前(name)と「シャケが500円」、「マグロが1000円」で値段(price)を出力し、インスタンスメソッドにnameの引数をいれて、「マグロを食べたい」出力してくださいSelfメソッド
インスタンスメソッドの中では、特殊な変数**self**を使うことが出来ます。 このselfはインスタンスメソッドを呼び出したインスタンス自体を指します。次は勉さんの情報をとりだしてみましょう!
class Engineer
attr_accessor :name
attr_accessor :age
attr_accessor :money
# relianceメソッドを定義します。
def reliance
# このメソッドが呼び出されたら、下記の文字列を出力します。
p "#{self.name}さんは頼りになります"
end
end
engineer_2 = Engineer.new
# インスタンスに名前の情報を追加します。
engineer_2.name = "勉"
# インスタンスに価格の情報を追加します。
engineer_2.age = "#{33}歳"
# インスタンスに月収の情報を追加します。
engineer_2.money = "月収#{80}万円"
engineer_2.reliance
勉さんは頼りになります
先ほど記述した引数が無くなっていることがわかりますね。
イメージ的には最終行のengineer_2が、
relianceメソッド内ではselfに置き換わっているような感じです。
ですので、self.nameやself.ageといった記述が可能になっています。
selfを使うと引数を設定するよりもスマートにインスタンスの値が取り扱えることがわかりますね。
case(ケース)メソッド
case(ケース)メソッドはオブジェクトが複数の候補のどれに値するのか? を判断して条件分岐させる際につかうメソッドです。
value = 5
symbol = case value
when 1
:one
when 2
:two
when 3
:three
when 4
:four
when 5
:five
end
puts symbol
five
5がバリューに入っていて、出力がfiveと出ていますね!
このプログラムは数字を英語で判別するプログラムになっています。
最初のvalueで指定したキーを評価(判断)し、一つの値を比較して条件分岐を行う場合に使われます。
次はstring型(文字列)で見てみましょう!
value = 'マグロ'
buy = case value
when 'リンゴ', 'なし', 'キウイ', 'もも'
'果物'
when 'キャベツ', 'トマト', 'ネギ'
'野菜'
else
'該当なし'
end
puts buy
該当なし
ここでは、elseの文が使われています!
valueの値がマグロのため野菜でも果物でもなく、elseの下の「該当なし」が呼び出されている事がわかります!
この中だと、valueの値が'リンゴ'か'なし'か'キウイ'か'もも'だと「果物」が出力され、
valueの値が'キャベツ'か'トマト'か'ネギ'だと「野菜」が出力されます!
演習問題8
8-1.case文を使って、マグロとタイとシャケが魚で、牛と豚と羊が肉の選択肢を作り、牛を選択して肉を出力してください!お疲れ様でした!
ここはかなり重要な所です(^.^)
難しいですが、頑張って習得していきましょう!