独学Ruby -基礎②-
引き続き、Rubyの基礎その2。
Contents
データを表現する基本単位(オブジェクト)。
- 数値オブジェクト(Numeric)
- 文字列オブジェクト(String)
- 配列オブジェクト (Array)
- ハッシュオブジェクト(Hash)
- 正規表現オブジェクト(Regexp)
- ファイルオブジェクト(File) などなど
変数の種類
- ローカル変数 ... 先頭がアルファベットの小文字か「_」で始まる
- グローバル変数 ... 先頭が「$」で始まる
- インスタンス変数 ... 先頭が「@」で始まる
- クラス変数 ... 先頭が「@@」で始まる
- 擬似変数 ... true, false, self, nil などの予約語
変数のスコープ確認
# グローバル変数 $globalVariable = 111 # ローカル変数 localVariable = 222 # sub.rb呼び出し require_relative "sub" p $globalVariable p localVariable
#グローバル変数に代入 $globalVariable = 777 #ローカル変数に代入 localVariable = 555
globalVariableは111ではなく777となる。
localVariableは555ではなく222のまま。
定数
先頭がアルファベットの大文字で始まるもの
実際に定数宣言後に別の値を代入するとWarningが宣告される。
値は書き換わる。
scopetest.rb:17: warning: already initialized constant CONST_VARIABLE scopetest.rb:14: warning: previous definition of CONST_VARIABLE was here
BEGIN
END など
- if
- unless
- case
number = ARGV[0].to_i #------------------------- # if文 #------------------------- if number == 1 print "number is 1.\n" elsif number == 2 print "number is 2.\n" else print "number is ", number , "\n" end #------------------------- # unless文 #------------------------- unless (number == 1) || (number == 2) print "number is ", number , "\n" else print "number is 1 or 2.\n" end #------------------------- # case文 #------------------------- case number when 1 then print "number is 1.\n" when 2 then print "number is 2.\n" else print "number is ", number, ".\n" end # 複数の条件を指定することもできる case number when 1, 2 then print "number is 1 or 2.\n" else print "number is ", number, ".\n" end # クラス判定 array = ["moji", 1, nil] array.each do |obj| case obj when String print "obj is a String.\n" when Numeric print "obj is a Numeric.\n" else print "obj is someting.\n" end end
if修飾子とunless修飾子
実行したい式の後ろに条件式を書ける。
number = ARGV[0].to_i print "number is 0.\n" if number == 0 print "number is not 0.\n" if number != 0
- 構文
- メソッド
命令 | 構文 | メソッド |
---|---|---|
times | ○ | |
for | ○ | |
while | ○ | |
until | ○ | |
each | ○ | |
loop | ○ |
timesメソッド
2通りの書き方がある。
# timesメソッド # 書き方1 3.times do print "loop.\n" end # 書き方2 3.times { print "loop.\n" } # 繰り返し回数を知る 3.times do |i| print "loop[", i, "].\n" end
for文
#ループ回数を指定する方法 from_idx = 3 to_idx = 5 for idx in from_idx..to_idx print idx,"\n" end #範囲オブジェクトでループ回数を指定する方法 array = [1, 2, 3] for var in array print var,"\n" end
while文
i = 1 while i < 3 print i,"\n" i += 1 end
until文
i = 1 until i > 3 print i,"\n" i += 1 end
eachメソッド
names = ["awk", "Perl", "Python", "Ruby"] #書き方1 names.each do |name| print name, "\n" end #書き方2 names.each { |name| print name, "\n" } #書き方3 (1..5).each do |num| print num, "\n" end
loopメソッド
無限ループにならないように繰り返しの制御を。
#loopメソッド + break i = 0 loop do if i == 5 then break else i += 1 end print i, "\n" end
繰り返し制御
- break
- next
- redo
language = ["C", "C++", "Ruby", "Python", "Java"] print language,"\n" # break language.each do |lang| case lang when /^C/ then print "C Series language =>", lang, "\n" when /Ruby/ then print "Ruby\n" else print "Other" break; end end print "\n---------------\n" # next language.each do |lang| if lang == "C++" then print "Skip C++\n" next end print lang,"\n" end print "\n---------------\n" # redo language.each do |lang| if lang == "C++" then print "C++ => C#\n" lang = "C#" redo end print lang,"\n" end
以上。