Rubyの基本的な書き方
ノートを作成する理由
勉強会に向けて基本的なことは理解しておきたい!
やっぱりある程度読めておいたほうがこの先便利
どういうページ?
20分で始めるRubyを参考に基本的な書き方をメモしておくページ。
参考コード
3ページ目のコードで書き方をまとめる。
code:ri20min.rb
class MegaGreeter
attr_accessor :names
# Create the object
def initialize(names = "World")
@names = names
end
# Say hi to everybody
def say_hi
if @names.nil?
puts "..."
elsif @names.respond_to?("each")
# @names is a list of some kind, iterate!
@names.each do |name|
end
else
end
end
# Say bye to everybody
def say_bye
if @names.nil?
puts "..."
elsif @names.respond_to?("join")
# Join the list elements with commas
else
end
end
end
if __FILE__ == $0
mg = MegaGreeter.new
mg.say_hi
mg.say_bye
# Change name to be "Zeke"
mg.names = "Zeke"
mg.say_hi
mg.say_bye
# Change the name to an array of names
mg.names = ["Albert", "Brenda", "Charles",
"Dave", "Engelbert"]
mg.say_hi
mg.say_bye
# Change to nil
mg.names = nil
mg.say_hi
mg.say_bye
end
code:最初の行.rb
ファイルが呼び出された時のRubyの実行方法
code:クラス定義.rb
class MegaGreeter
end
{}で囲わずendを使って定義している点に注目!
ちょっと調べたところ、publicとかprivateとかのアクセス修飾子は付けられないみたい。
code:アトリビュートアクセサ.rb
attr_accessor :names
指定した変数を宣言すると同時にゲッターとセッターを作成する。
外部から参照、代入する時に必要だ。
code:初期化時の処理.rb
def initialize(names = "World")
@names = names
end
Javaでいうコンストラクタ。
引数にデフォルト値を指定できる。
@namesとした時点で変数として宣言されている。
@namesはインスタンス(オブジェクト)毎の変数として扱える。
code:関数の宣言.rb
def say?_hi
end
もうinitializeの時に書いちゃってるけど、宣言方法はこれ。
コードブロックはdefとendで囲む。
code:if文.rb
if @names.nil?
puts "..."
elsif @names.respond_to?("each")
# @names is a list of some kind, iterate!
@names.each do |name|
end
else
end
end
コード分けるの面倒だからここで中身の処理も解説する。
if文の書き方は()が無いくらいでぱっと見で理解できると思う。
putsはコンソール上に文字を出力するメソッド。末尾に改行を付ける。
@names.respond_to?('each')
@namesがeachを持っているか調べる。
つまり、繰り返し可能なオブジェクトか調べている。
respond_to?
Rubyのどんなオブジェクトも持ってるメソッドで、一致するメソッド名を持っているオブジェクトか調べることが可能。
今回は、この機能を使って@namesが文字列なのか配列なのかをチェックしている。
code:繰り返し処理.rb
@names.each do |name|
end
each
順番に要素を取り出すメソッド。
do ... end
コードブロックの指定方法。
| name |
@namesの要素が一つずつ入る。
{name}
イテレーター文字列
文字列内で変数を展開できる便利なやつ
code:自動実行.rb
if __FILE__ == $0
end
実行時にこのファイルを指定していた場合、
コードブロック内の処理を自動で行っていく。
実際の処理結果はこれ
code:output
ruby ri20min.rb
Hello World!
Goodbye World. Come back soon!
Hello Zeke!
Goodbye Zeke. Come back soon!
Hello Albert!
Hello Brenda!
Hello Charles!
Hello Dave!
Hello Engelbert!
Goodbye Albert, Brenda, Charles, Dave, Engelbert. Come back soon!
...
...
所感
とりあえず最低限は理解できた気がする。
あとは必要になった時に調べていければいいかなぁ。