TEHC CAMP 91期夜間休日 卒業後活動記録
6/26 学習したこと&まとめ
Rubyドリル
if else
要件:
- 購入金額が999円以下の場合、3%のポイント
- 購入金額が1000円以上の場合、5%のポイン
- 誕生日の場合はポイントが5倍
となるポイント付与サービスのメソッドを作ります。
誕生日の場合はtrue、誕生日でない場合はfalse
.floorメソッド
小数点の切り捨てを行うメソッド。
呼び出し方:
calculate_points(amount, is_birthday)
出力例:
calculate_points(500, false) → ポイントは15点です
calculate_points(2000, false) → ポイントは100点です
calculate_points(3000, true) → ポイントは750点です
def calculate_points(amount,is_birthday)
if amount <= 999
point = amount * 0.03
else
point = amount * 0.05
end
if is_birthday
point = point * 5
end
puts "ポイントは#{point.floor}点です"
end
解説
購入金額が999円以下なのか1000円以上なのかを if amount <= 999
で判断して、購入金額に対して0.03または0.05をかけてポイント数を
計算してpointに代入させます。
その後に、is_birthdayがtrueの場合変数pointに5をかける処理にしています。
point.floorとして小数点を切り捨て、ポイント数を出力します。
FizzBuzz問題
1~100までの数字を出力して、
3の倍数のときは「Fizz」
5の倍数のときは「Buzz」
両方の倍数である15の倍数のときは「FizzBuzz」
と出力するプログラムを作ります。
whileメソッド
条件を指定して繰り返し処理をするメソッド
def fizz_buzz
num = 1
while (num <= 100) do
if (num % 3 == 0) && (num % 5 == 0)
puts "FizzBuzz"
elsif (num % 3) == 0
puts "Fizz"
elsif (num % 5) == 0
puts "Buzz"
else
puts num
end
num = num + 1
end
end
fizz_buzz
解説
while (num <= 100)で1~100までの数字を出力します。
if文で条件分岐させ、3の倍数のとき、5の倍数のときを先に記述すると
15の倍数のときの処理をする前にtrueになってしまうので、15の倍数である条件式を一番に記述します。
15の倍数の条件式は(num % 15 == 0)でも可能です。
FizzBuzz問題の応用
いくつまでカウントするか、引数で指定できるようにします。
範囲を指定して繰り返しする場合
範囲演算子(..)
(開始する値..終了する値)
# 1~6までの範囲を指定して、繰り返し表示
(1..6).each do |num|
puts num
end
を使います。
def fizzbuzz(max_num)
(1..max_num).each do |num|
if num % 15 == 0
puts "FizzBuzz"
elsif num % 5 == 0
puts "Buzz"
elsif num % 3 == 0
puts "Fizz"
else
puts num
end
end
end
puts 'いくつまで数えますか?'
num = gets.to_i
fizzbuzz(num)
解説
1..max_num で1から入力した値まで繰り返すようにしています。
2つの文字列の末尾に対して一致、不一致を判断するプログラム
2つの文字列の末尾の文字を比較して、
一致する場合は、true
一致しない場合は、false
を出力するプログラムを作ります。
要件:
- メソッドの引数に、任意の2つの文字列を指定する。
- 引数に指定された2つの文字列のうち、どちらかがもう一方の文字列の末尾にある場合は、Trueを出力する
- 上記を満たせていない場合は、Falseを出力する
- 入力された文字が大文字でも小文字でも、同一の文字として処理を行う
出力例:
end_other('Hiabc', 'abc') → True
end_other('AbC', 'HiaBc') → True
end_other(‘abc’, ‘HaIoBc’) → False
sliceの範囲指定
#範囲を指定して要素を切り取る場合
# 要素を定義
array = "Hiabc"
#配列番号(インデックス番号)の-3から-1の範囲の文字列を切り取る
array.slice(-3..-1)
#=> abc
downcaseメッソド
大文字を小文字に変換するメソッド
# 大文字を含んだ文字列を定義
irb(main):001:0> name = "Hiabc"
=> "Hiabc"
# downcaseメソッドを使用し、小文字に変換
irb(main):002:0> name.downcase
=> “hiabc”
を使います。
def end_other(a, b)
a_down = a.downcase
b_down = b.downcase
a_len = a_down.length
b_len = b_down.length
if b_down.slice(-(a_len)..- 1) == a_down || a_down.slice(-(b_len)..- 1) == b_down
puts "True"
else
puts "False"
end
end
# 呼び出し例
end_other('Hiabc', 'abc')
解説
大文字と小文字を区別しないようにdowncaseメソッドを使い、
小文字に変換して、a_downとb_downに代入しています。
その後に、どちらかの文字列を小文字がもう一方の最後にある場合を
区別するための処理になります。
slice(-(a_len)..- 1)としているのは、対象の文字列分を切り取るためです。
if文でabcの最後にHiabcが含まれているか、Hiabcの最後にabcという文字列が含まれているかを判別しています。
b_down.slice(-(a_len)..- 1)
は、b_down.slice(-5..-1)
となります。しかし、b_down = abc
となっているので、インデックス番号-5から-1という条件で切り取ることができません。そのため、この部分はnilとなります。結果、nil == a_down
は等しくないと評価されるので、falseになります。
続いてa_down.slice(-(b_len)..- 1)
は、a_down.slice(-3..-1)
となります。
hiabcという文字列の最後にabcが含まれているかを確認したいので、abcという文字列分を左から数えます。すると、hiabcの最後までを範囲指定していることがわかります。そしてa_down = hiabc
となるので、インデックス番号-3から-1という条件で切り取るとabcが残ります。結果、abc == b_down
は等しいと評価されるので、trueとなります。
progate
復習
rails g migrationコマンド
マイグレーションファイルのみを作成するコマンド
$ rails g migration ファイル名
カラムを追加するとき
add_column :テーブル名, :カラム名, :データ型
Fileクラス
ファイルを作成するために、Fileクラスのwriteメソッドを使います。
$ rails console
> File.write("public/sample.tet","Hello World")
画像を保存するには、File.binwriteを使います。
File.binwrite("public/user_images/#{@user.image_name}",image.read)
#ファイルの場所 #ファイルの中身
一言日記
同じRuby on Railsでもテックキャンプとプロゲートですこし違う。
ただ、違いはあれ基本は同じなので復習にも新しい学習にもなります。
あたらしいスキルを身につける時は、複数の媒体で学習する方が、ものになる
確率が上がるってのは、こういうことなのかと実感。
午前に会社説明会に参加しました。
プログラミングの教育事業をしている企業で、求人ページ見てて感じた
仲間と一緒に成長できるとか、熱意をもった仕事に夢中になれるとか
説明会でさらに感じました。
こうゆう会社で働けたら生きることが楽しくなるのかな…。
いまでなんとなく生きてたから(笑)
この年になってやっと、自分の成長とかやりたいこととか真剣に考えるように
なって、プログラミング勉強したり、瞑想したり、運動したり、もっと早く
気づいてたらって思うけど、過去の出来事があったから、今があって、
今やから考え行動することができた。って思う。
ただ、やっぱりふとした瞬間に過去を悔やんでしまう。
過去ではなくこれからどうするかってことが大事なのはわかってはいるのに…
今できることを少しずつ積み上げるしかないですよね。
さて、今日もがんばります。