よーし、面白そうなRubyを勉強してみますか。
# encoding: sjis
# コメントはシャープ x = 10 # 行末まで全部コメント。/**/形式はない =begin ビギン-エンド形式の 複数行コメントもあり この場合は、行頭に書く必要あり =end
if x == 10 then # thenは省略可能 puts "x=10" elsif x == 20 # elseifじゃないのか… puts "x=20" else puts "x!=10" end
nums = [1,2,3,4,5] strs = ["a","b,"c"]
a = Array.new a = Array.new(5) # nilで5つ分初期化 a = Array.new(5,0) # 0で5つ分初期化
abc = %w(abc edf) # 空白で区切って配列に入るよー。
abc = "abc 123 XYZ".split()
names = ["渡辺","田中","佐藤"] names[4] = "田辺"
names.each do |name| puts name end
names.each do |name| print name end # そのまま1行にしただけ names.each { |name| print name } # do,endを{}に変換→{}の場合は1行するのがルールみたい
while name = names.shift do print name end
names = ["渡辺","田中","佐藤"] names[4] = "田辺" while name = names.shift print name end
5.times do print "hello!\n" end
def hello print "hello DEF\n" end hello()
font_table = {:normal => '+0', :small => '-1', :big => '+1'} font_table.each do | key, val | print "key=[" + key.to_s + "],val=[" + val.to_s + "]\n" end
h = { 'key1' => 'val1', 'key2' => 'val2' } p h h = { key1: 'val1', key2: 'val2' } # こっちは1.9から。キーがシンボルになるよー p h
puts h.fetch(:key3,"キーが無いよー")
h = Hash.new('ハッシュのデフォルト値') puts h["no_key"]
h = Hash.new{|hash,key| hash[key] = key.upcase } puts h["no_key"]
a = Array.new(5) {|i| i+1 } p a
a = Array.new(3, [0,0,0]) a[0][1] = 2 p a
ary1 = [1,2,3] ary2 = [10,20,30] ary3 = [100,200,300] result =[] ary1.zip(ary2, ary3) do |a,b,c| result << a+b+c # <<はpushと同じ end p result
ary = [1,2] a,b=ary p a p b
a, = ary p a
def foo(arg,*args) p arg p args end foo(1) foo(1,2,3)
hash = {:a => 100, :b => 200, :c => 300} hash.each_with_index { |(key,val),index | p [key,val,index] }
p "This is Ruby".length p "This is Ruby".size
p "12345".length p "12345".size # p "12345".split(//u).length # UTF-8の場合→Ruby1.9の場合は、エラーになるよ!
str1 = "最初の言葉" str2 = "次の言葉" str = str1 + str2 puts str1,str2,str
str1 << str2 puts str1
class HelloWorld # クラス名は大文字スタート def initialize(myname="Ruby") #コンストラクタはinitialize @name = myname # @でインスタンス変数 end def hello # インスタンスメソッド。デフォルトはpublic print "hello world ", @name , "\n" end def HelloWorld.hello2(name) #クラスメソッドはnewしなくても使える print "hello world2 ", @name , "\n" end def self.hello3(name) #クラスメソッドはselfでもOK print "hello world2 ", @name , "\n" end class << self # クラスメソッドはこんな風にクラス定義もできる(複数メソッドの時はいいかな) def hello3(name) print "Hello2! ", name , ".\n" end end end bob = HelloWorld.new("Bob") ruby = HelloWorld.new bob.hello ruby.hello # クラスメソッドはどっちでも呼べる HelloWorld.hello2('Name') HelloWorld::hello3('Name')
class HelloWorld attr_accessor :name #これだけで、setter/getter作るのと同じってイカス! def greet print "I am ", self.name ,"\n" # 自分はselfでアクセス end end ruby = HelloWorld.new ruby.name = "hoge" ruby.greet
class RingArray < Array def [](i) idx = i % size # レシーバを省略するとselfが自動でつくから、これは[self.size]で割ることになる super(idx) end end eto = RingArray[ "子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥" ] puts eto[6] puts eto[11] puts eto[15] puts eto[-1] # これが亥になる
module MyModule #メソッド定義 end class MyClass1 include MyModule # ここでMyMduleのメソッドが使える end
print "-------シンプル版--------------------------------------------\n" print File.read(ARGV[0])
print "-------gets版--------------------------------------------\n" file = open(ARGV[0]) while text = file.gets print text end file.close
var = nil name = var || "Ruby" # varがnillなら"Ruby"を代入 →これはイイね! p name
name = "Ruby" if var != nil name = var end p name
item = ary && ary[0] #aryがnilじゃなければary[0]を代入→これもイイね! p item
var ||= 1 # var = var || 1 と同じ p var
File.open("sample.txt") do |f| f.each_line do |line| puts line end # ブロックの後処理として、closeが自動的に行われるらしい end
sorted = ary.sort do |a,b| a <=> b end p sorted
ary = %w( 1000 200 30 4) sorted = ary.sort_by do |item| item.length end p sorted