アラサーからのエンジニア転身blog

プログラミングの勉強や転職に関して記事にしていきます。

ruby基礎②ハッシュオブジェクト、オブジェクト変換、%記法、if、case、while、time、for、each、loop

本日もドットインストールでrubyの基礎を復習しました!!
復習すると理解が進みます!!

オブジェクト変換はなんとなく使用していたが、
to_i は to integerの略だったとは。細かいところを知るときもちいですね。。
スクールの仲間と新しいアプリケーション開発も始まり、そちらも後々報告できればと思います。

明日は初、企業訪問です。
2011年以来の就活?になります。緊張しますね。
今回は本気で訪問企業を理解して、相互理解を深めて、本当に自分の目指すものになれる企業なのか確認してきます!!!

 # -----------------------------------------------------------------
# ハッシュオブジェクト

#- kye /value をペアにできる

# sakurai 200 ペアにしたい
# kondo  400 ペアにしたい

# 下記の3パターンでセットできる。
scores = {"sakurai" => 200, "kondo" => 400}
scores = {:sakurai => 200, :kondo => 400}
scores = {sakurai: 200, kondo: 400}

p scores[:sakurai]  #keyを[]でつけることでそのvalueが出力
=>
200

scores[:sakurai] = 600 #valueを200から600に上書きできる
p scores
=>
{:sakurai=>600, :kondo=>400}

scores = {sakurai: 200, kondo: 400}
p scores.size
p scores.keys
p scores.values
p scores.has_key?(:sakurai)
=>
2
[:sakurai, :kondo]
[200, 400]
true

# -----------------------------------------------------------------
# オブジェクトの変換

x = 50 #integer
y = "3" #string

p x + y
=>
"in `+': String can't be coerced into Fixnum (TypeError)"

p x + y.to_i #intgerへ変換
p x + y.to_f #floatへ変換
p x.to_s + y #stringへ変換
=>
53
53.0
"503"

scores = {sakurai: 200, kondo: 400}

p scores.to_a
=>
[[:sakurai, 200], [:kondo, 400]]


p scores.to_a.to_h
=>
{:sakurai=>200, :kondo=>400}

# -----------------------------------------------------------------
# %記法

# 下記の出力値はそれぞれ同じ
puts "hello"
puts %Q(hello)
puts %(hello)

puts 'hello'
puts %q(hello)

# %を使うと何が便利なのか
puts "he\"llo" #"を文字列として使いたい場合はバックスラッシュが必要
puts %Q(he"llo) #"を文字列として使いたい場合はバックスラッシュが不要

#配列の場合も%記法ができる
p ["red","blue"]
p %W(red bule)

p ['red','blue']
p %w(red bule)

# -----------------------------------------------------------------
# 書式付きで値を埋め込む
# %s 文字列
# %d 整数
# %f 浮動小数点数

p "name: %s" % "sakurai"
p "name: %10s" % "sakurai"
p "name: %-10s" % "sakurai"
=>
"name: sakurai"
"name:    sakurai"
"name: sakurai   "

p "id: %05d, rate: %10.2f" % [355,3.284] #5桁で表示したいが5桁に満たない場合05と記載,10.2は全体の文字数が10桁、そのうち2桁が小数点以下。
=>
"id: 00355, rate:       3.28"

printf("name: %-10s\n" , "sakurai")
printf("id: %05d, rate: %10.2f\n" , 355,3.284)
=>
name: sakurai
id: 00355, rate:       3.28

p sprintf("name: %-10s\n" , "sakurai") #sprintfは文字列を返してくれる
p sprintf("id: %05d, rate: %10.2f\n" , 355,3.284)
=>
"name: sakurai   \n"
"id: 00355, rate:       3.28\n"

# -----------------------------------------------------------------
#if
# >(より大きい), <(より小さい), >=(以上), <=(以下), ==(と等しい), !=(と等しくない)
# && (AND), ||(OR), !(NOT)

scores = gets.to_i
#getsでユーザーからの入力
if scores > 80 then
  puts "great!"
elsif scores > 60 then
  puts "good!"
else
  puts "so so ...."
#thenは省略可能

puts "great!" if score > 80
# #この様な書き方もある

# -----------------------------------------------------------------
#caseによる条件分岐

signal = gets.chomp
#chompは改行を取り除く
case signal
when "red"
  puts "stop!"
when "green" , "blue"
  puts "go!"
when "yellow"
  puts "caution!"
else
  puts "wrong signal"
end

# -----------------------------------------------------------------
#while 繰り返し
i = 0
while i < 5 do
  puts "hello"
  i = i + 1 # i += 1 でも同じ
end
=>
hello
hello
hello
hello
hello

#time 繰り返し

5.times do  #|i|で繰り返しの何番目をiで表示できる
  puts "hello"
end

5.times { |i| puts "#{i}: hello"}
# この様な形でも表現できる
=>
0: hello
1: hello
2: hello
3: hello
4: hello

# -----------------------------------------------------------------
#for 繰り返し
for i in 15..20 do #15..20までをiに格納して繰り返し出力。doは省略可能。
  p i
end
=>
15
16
17
18
19
20

for color in ["red","blue"] do
  p color
end
for name,score in {sakurai: 200, kondo: 400} do
  p "#{name}: #{score}"
end
#[]や{}も使用できる
=>
"red"
"blue"
"sakurai: 200"
"kondo: 400"

#eachの繰り返し
(15..20).each do |i| #15..20
  p i
end

["red","blue"].each do |color|
 p color
end

{sakurai: 200, kondo: 400}.each do |name, score|
  p "#{name}: #{score}"
end

# -----------------------------------------------------------------
# loop
#繰り返しループする
i = 0
loop do
  p i
  i += 1
end

#break 処理を止める
#next 繰り返し処理をスキップする

10.times do |i|
  if i == 7 then
    break
  end
  p i
end

# -----------------------------------------------------------------