更新記録
2019/03/06 最後のコードに全角空白が含まれていて、エラーを起こす辺り、修正
#使用環境
仮想環境OS: Ubuntu Bento/Bionic
Ruby:2.51
Rails:5.2.2
エディタ:nano
#Ruby認定試験による知識等確認
##ソースコードの文字コードをUS-ASCIIに設定のマジックコメント
1, # coding: us-ascii
2, # encoding: us-ascii
3, # -*- charset: us-ascii -*-
4, # CODING: US-ASCII
1,2,4は同義で、正解。3はPython。
##例外処理(begin rescue ensure end
Wikipediaによると
プログラムの上位の処理から呼び出されている下位の処理で継続不能、または継続すれば支障をきたす異常事態に陥ったとき、制御を呼び出し元の上位の処理に返し安全な状態になるよう回復処理をすること。
begin
# 例外が起こりうるコード1
rescue => # 変数(例外オブジェクトの代入)
# 例外が起きた場合のコード2
ensure
# 例外の有無に関わらず、実行するコード3
end
1で例外が起きなかったら、表示結果は1且つ3の表示結果、起きた場合は2且つ3の表示結果となる。
例外処理コードとして、ensureが用いられないパターンもある。
その他、rescueの中でretryを用い、beginが成功するまで繰り返す処理がる。(無限ループ注意)
##Rubyにおける定数と変数
下コードの実行結果は『10と表示された後、警告が表示され100と表示される。』
MAX=10
print MAX
MAX=100
print MAX
Rubyにおいて、アルファベット大文字から始まる識別子(ABCやAbc)は定数である。
他言語では定数を再定義しようとすると、警告が出て、結果、再定義できない。
Rubyにおいては、警告が出たのち、そのままデータがオーバーライトされる
##可変長引数
def foo(*a)
p a
end
foo(1,2,3)
#実行結果 [1,2,3]
*を1個付けると、引数を複数指定でき、引数は配列として受け取られる。
*を2個付けると、オプション引数となり、Hashとして受け取られる。
##範囲オブジェクトとeach文
###.to_iメソッド
文字列を10進数の表現と見なして整数に変換します。
#引数baseを取ることもでき、その引数で何進数かを示す。
#デフォルト値は10であり、引数指定しない場合は10進数となる。
変数.to_i(2)
###範囲オブジェクト
def hoge
x = 0
(1...5).each do |i|
x += 1
end
puts x
end
hoge
#実行結果 4
まず『数A...数B』に関して、これはAからBまで繰り返すの意。ただし、Bは含まれない。
そのため、『1...5』は、1から4までの4回分繰り返す。
一方で、『1..5』は5を含み、1から5までの5回分繰り返す。
因みに、『1..5』『101..105』『2001..2005』だろうと5回分。
##uptoメソッド
money = 1000
オブジェクト.upto(max) do |i|
実行処理
end
money = 100
1.upto(3) do |i|
money = money * 1.1
end
puts money.to_i
uptoメソッドは、変数に「対象オブジェクトが持つ数値」から「max」までを順に代入しながら、処理実行。
1回繰り返す毎に1ずつ数値は増加します。(ここでは1から3までの3回。『1..3』と同義。
また、downtoメソッドもあり、これは1回繰り返すごとに1ずつ数値が減少する。
timesメソッドも参照すべし
##stepメソッド
オブジェクト.step(limit, stepno) do |変数|
実行する処理1
実行する処理2
end
はじめに、stemnoを『数値間隔』とするとわかりやすい。
対象オブジェクトを持つ数字から順に代入しながら、処理を実行。
1回繰り返すごとに、stepnoで指定した数値間隔ごとに、数値が増加する。
##☆範囲オブジェクト、uptoメソッドまとめ
money = 1000
rate = 1.1
2001.upto(2004) do |i|
money = money * rate
puts "I got #{money.to_i} in #{i}."
end
#実行結果
# I got 1100 in 2001.
# I got 1210 in 2002.
# I got 1331 in 2003.
# I got 1464 in 2004.
これは、下とも書けると思った。
money = 1000
rate = 1.1
(2001..2004).each do |i|
money = money * rate
puts "I got #{money.to_i} in #{i}."
end
#実行結果
# I got 1000 in 2001.
# I got 1000 in 2002.
# I got 1000 in 2003.
# I got 1000 in 2004.
コメントにより、タイプミス(全角空白)を指摘して頂いた
正しくは
money = 1000
rate = 1.1
(2001..2004).each do |i|
money *= rate
puts "I got #{money.to_i} in #{i}."
end
2日目に行ったScaffoldによる掲示板作成も同投稿する予定だったが、それをすると記事が長く、
内容も全く異なり、解りにくくなるため、投稿を分けることにする。
2日目(2):Scaffoldを用いた掲示板作成