TEHC CAMP 91期夜間休日 卒業後活動記録

6/22 学習の内容&まとめ

Rubyドリル 16

インスタンスの生成

クラスFruitの仕様

インスタンス

インスタンス名前価格
appleリンゴ120
orangeオレンジ200
strawberyイチゴ60

インスタンス変数

・name

・price

クラスメソッド

メソッド名処理
fresh「採れたて新鮮な果物です」と表示

インスタンスメソッド

メソッド名処理
initialize引数で名前と価格を渡し、インスタンス変数nameとpriceに代入
introduce「【名前】は【価格】円です」と表示

実行結果

採れたて新鮮な果物です
リンゴは120円です
オレンジは200円です
イチゴは60円です

となるプログラムを作ります。

class Fruit

 def self.fresh
  puts "採れたて新鮮な果物です"
 end

 def initialize(name, price)
  @name = name
  @price = price
 end

apple = Fruit.new("リンゴ", 120)
orange = Fruit.new("オレンジ", 200)
strawberry = Fruit.new("イチゴ", 60)

Fruit.fresh
apple.introduce
orange.introduce
strawberry.introduce

まずは、インスタンスの生成と、インスタンス毎のインスタンス変数@nameと@priceを定義します。

initializeメソッドを使うい、newメソッドの引数を受け取れるようにします。

名前と価格をnewメソッドから受け取り、インスタンス変数@name、@priceに代入します。

class Fruit

 def initialize(name, price)
   @name = name
   @price = price
 end

end

apple = Fruit.new("リンゴ", 120)
orange = Fruit.new("オレンジ", 200)
strawberry = Fruit.new("イチゴ", 60)

次に、クラスメソッドFreshを定義します。

class Fruit
 def self.fresh
   puts "採れたて新鮮な果実です"
 end

省略

続いて、インスタンスメソッドの定義をします。

省略

def initialize(name, price)
   @name = name
   @price = price
 end

 def introduce
   puts "#{@name}は#{@price}円です"
 end
end

省略

最後に、定義したクラスメソッドとインスタンスメソッドを呼び出します。

省略

Fruit.fresh
apple.introduce
orange.introduce
strawberry.introduce

Rubyドリル 17

任意の文字列を部分的に削除する

・対象となる文字列からn番目の文字列を削除すること

・削除された文字列以外の文字列を出力すること

の要件を満たすメソッドを定義します。

※sliceメソッド

配列や文字列から指定した要素を削除し、削除した後の要素を返すメソッド

def missing_char(str, n)
  str.slice!(n - 1)
  puts str
end

# 呼び出し例
missing_char('kitten', 1)

missing_charメソッドの引数strには文字列をいれ、nに何番目か指定する数字が入ります。

Rubyドリル 18

if、elseと演算子

  • aとbどちらも真であれば、Trueを出力
  • aとbどちらも偽であれば、Trueを出力
  • aとbで真偽が一致しない場合であれば、Falseを出力

以上のルールになるメソッドを定義します。

※論理演算子

# aもbもtrueの場合にtrue 
a && b

# aかbのどちらかがtrueの場合にtrue
a || b 

# aがtrueの場合にfalse、aがfalseの場合にtrue
!a
def singi(a, b)
 if (a && b) || (!a && !b)
  puts "True"
 else
  puts "False"
 end
end

singi(true, false)

(a && b) || (!a && !b)として、aとbどちらもtrue、または、どちらもfalseの場合「True」と出力します。

Rubyドリル 19

文字数を算出するプログラム

要件

  • 対象となる文字列の中から、"hi"という特定の文字列の数を取得すること
  • 上記で取得した数を出力すること

※scanメソッド

対象の要素から引数で指定した文字列を数え、配列として返すメソッド

"foobarbazfoobarbaz".scan("ba")
=> ["ba", "ba", "ba", "ba"]
def count__hi(str)
 puts str.scan("hi").length
end

#呼び出し例
count_hi('abc hi ho')

scanメソッドを使い、"hi"という文字列の数を返して、lengthメソッドで数を返します。

progate 学習コースⅤ 完了

バリデーション

不正なデータがデータベースに保存されないようにデータをチェックする仕組み

#空だと登録できない
validates :カラム名, {presence: true}
#文字数の制限
validates :カラム名, {length: {maximum: 数値}}

#複数指定する場合
validates :カラム名, {presence: true, length: {maximum: 数値}}

保存できた場合、できなかった場合をif文で条件分岐させ、

ページを遷移させるメソッドの使い分け

保存できた場合のページ遷移

redirect_to(URLを指定)

保存できなかった場合

render(ビューファイルを指定)

エラーメッセージ

Railsでは自動でエラーメッセージが生成されています。

@post.errors.full_messages にエラーメッセージの配列が入っているので、
eachメソッドを使って

<%= @post.errors.full_messages.each do |messeage|
 <%= messeage %>
<% end %>

これでエラーメッセージを表示できます。

サクセスメッセージ

投稿完了や編集完了などページ上に1度だけ表示するメッセージのことで、

ページを移動するなどしたら自動で削除されます。

Railsではフラッシュを表示させるためにアクションで、flash[:notice]に文字列を代入します。

def update
 if @post.save
    flash[:notice] = "表示したい文字列"

省略
<% if flash[:notice]
 <div class="flash">
  <%= flash[:notice] %>
 </div>
<% end %>
#フラッシュメッセージが存在する場合のみ表示する

一言日記と振り返り

クラスとインスタンスがよくわかりません…。

じっくり考えたらなるほど!ってなるけど同じ問題をやったら??

ってなります(笑)

とりあえず、何回もやってみるしかないよね。

就職活動はやっぱり精神的に疲れる。

応募しても書類選考で9割おとされます。

35歳未経験はやっぱりあまくはないですね。

とはいえ、動かないとなにも始まらないので

「今できること」に集中して動き続けます。

ただ、収入がないのは色んな意味でストレスを感じます。

クラウドソーシングをしてみよう!と思っているんですが尻込みしてしまう…

ほんとダメダメな私です。

このままでは今までと変わらないので、がんばって行動します。

簡単なものから応募してみよう。