Rubyの文法
# 変数への代入
i = 2
j = 3
k = i + j
# 標準出力
print 'i = ', i, "\n"
print "j = #{j}\n"
print 'k = '
print k
print "\n"
実行結果
i = 2 j = 3 k = 5
def add( a, b )
print "a: #{a}\n"
print "b: #{b}\n"
a + b
end
def sub( a, b )
print "a: #{a}\n"
print "b: #{b}\n"
return a - b
end
print 'add: ', add( 5, 2 ), "\n"
print 'sub: ', sub( 2, 3 ), "\n"
実行結果
a: 5 b: 2 add: 7 a: 2 b: 3 sub: -1
def log_n( x, n = 10 )
if n == 10
return Math.log10( x )
else
return Math.log( x ) / Math.log( n )
end
end
# log2( 32 )
print log_n( 32, 2 ), "\n"
# log10( 100 )
print log_n( 100 ), "\n"
実行結果
5.0 2.0
def sum( *val )
s = 0
for v in val
s += v
end
return s
end
print sum( 1, 4, 6, 3, 2, 9, 5 ), "\n"
print sum( 2, 7, 5, 8, 3 ), "\n"
実行結果
30 25
# nPx = n! / (n - x)!
def perm( n, x )
# n!
def fact( n )
if n == 1
return 1
else
return n * fact( n - 1 )
end
end
return fact( n ) / fact( n - x )
end
print perm( 5, 2 ), "\n"
print perm( 6, 4 ), "\n"
実行結果
20 360
arr = []
arr[0] = 0
arr[1] = 1
arr[2] = 2
print arr, "\n"
arr = [0, 1, 2]
print arr, "\n"
arr = Array.new
arr[0] = 0
arr[1] = 1
arr[2] = 2
print arr, "\n"
for val in arr
print "#{val}\n"
end
実行結果
0 1 2 0 1 2 0 1 2 0 1 2
arr = [0, 1, 2, nil, 4, nil] print 'first: ', arr.first, "\n" print 'last: ', arr.last, "\n" print 'length: ', arr.length, "\n" print 'size: ', arr.size, "\n" print 'nitems: ', arr.nitems, "\n"
実行結果
first: 0 last: nil length: 6 size: 6 nitems: 4
arr = [0, 1, 2] print arr, "\n" arr.push( 3 ) print arr, "\n" arr.push( 4 ) print arr, "\n" arr.push( 5 ) print arr, "\n" print arr.pop, ' < ', arr, "\n" print arr.pop, ' < ', arr, "\n" print arr.pop, ' < ', arr, "\n"
実行結果
0 1 2 0 1 2 3 0 1 2 3 4 0 1 2 3 4 5 5 < 0 1 2 3 4 4 < 0 1 2 3 3 < 0 1 2
arr = [0, 1, 2] print arr, "\n" arr.unshift( 3 ) print arr, "\n" arr.unshift( 4 ) print arr, "\n" arr.unshift( 5 ) print arr, "\n" print arr.shift, ' < ', arr, "\n" print arr.shift, ' < ', arr, "\n" print arr.shift, ' < ', arr, "\n"
実行結果
0 1 2 3 0 1 2 4 3 0 1 2 5 4 3 0 1 2 5 < 4 3 0 1 2 4 < 3 0 1 2 3 < 0 1 2
arr = [] print arr, "\n" arr << 0 print arr, "\n" arr << 1 print arr, "\n" arr << 2 print arr, "\n" arr.concat( [3, 4, 5] ) print arr, "\n" print arr.slice( 2, 3 ), "\n" arr.delete( 4 ) print arr, "\n" arr = [0, 4, 1, 2, 5, 3] print arr, "\n" print arr.sort, "\n"
実行結果
0 0 1 0 1 2 0 1 2 3 4 5 2 3 4 0 1 2 3 5 0 4 1 2 5 3 0 1 2 3 4 5
arr = [0, 4, 1, 2, 5, 3] sorted = arr.sort print sorted, "\n" print arr, "\n" arr.sort! print arr, "\n" reversed = arr.reverse print reversed, "\n" print arr, "\n" arr.reverse! print arr, "\n"
実行結果
0 1 2 3 4 5 0 4 1 2 5 3 0 1 2 3 4 5 5 4 3 2 1 0 0 1 2 3 4 5 5 4 3 2 1 0
hash = {}
hash['a'] = 0
hash['b'] = 1
hash['c'] = 2
print hash, "\n"
hash = { 'a' => 0, 'b' => 1, 'c' => 2 }
print hash, "\n"
arr = Hash.new
hash['a'] = 0
hash['b'] = 1
hash['c'] = 2
print hash, "\n"
for key, val in hash
print "#{key} => #{val}\n"
end
実行結果
a 0 b 1 c 2 a 0 b 1 c 2 a 0 b 1 c 2 a => 0 b => 1 c => 2
hash = {
'a' => 0,
'b' => 1,
'c' => 2,
'd' => 3,
'e' => 4 }
print 'length: ', hash.length, "\n"
print 'size: ', hash.size, "\n"
print 'keys: ', hash.keys, "\n"
print 'values: ', hash.values, "\n"
print 'a: ', hash.key?( 'a' ), "\n"
print '6: ', hash.value?( 6 ), "\n"
実行結果
length: 5 size: 5 keys: a b c d e values: 0 1 2 3 4 a: true 6: false
hash = {
'a' => 0,
'b' => 1,
'c' => 2,
'd' => 3,
'e' => 4 }
hash.each_pair do |key, value|
print "#{key} => #{value}\n"
end
hash.each_key do |key|
print "#{key} => ", hash.fetch( key ), "\n"
end
hash.each_value do |value|
print "#{value} <= ", hash.index( value ), "\n"
end
実行結果
a => 0 b => 1 c => 2 d => 3 e => 4 a => 0 b => 1 c => 2 d => 3 e => 4 0 <= a 1 <= b 2 <= c 3 <= d 4 <= e
str = 'abc' * 3
print "#{str}\n"
files = `ls`
print files
実行結果(例)
abcabcabc sample.log sample.rb sample.rb~ work
str = <<END_OF_STR line1 line2 line3 END_OF_STR print str print <<END_OF_STR, "str\n" line1 line2 line3 END_OF_STR
実行結果
line1 line2 line3 line1 line2 line3 str
def str return <<-END_OF_STR line1 line2 line3 END_OF_STR end print str
実行結果
line1 line2 line3
str = "line\n" print str.chomp str.chomp! print str
実行結果
lineline
print "123".to_i + "456".to_i, "\n" print "1.0e-2".to_f + "12.3".to_f, "\n"
実行結果
579 12.31
str = "abcdefgh"
print str.slice( 4, 2 ), "\n"
print str.slice( 6, 1 ), "\n"
print "#{str[4, 2]}\n"
print "#{str[6, 1]}\n"
print "#{str[4..5]}\n"
print "#{str[6..6]}\n"
実行結果
ef g ef g ef g
str = "GET /index.html HTTP/1.0"
if str =~ /\s([^\s]+)/
print "#{$1}\n"
end
str = "a123bc4d5e678f90g"
print str.gsub( /\d{2,}/, '?' ), "\n"
str.gsub!( /\d{2,}/, '?' )
print "#{str}\n"
実行結果
/index.html a?bc4d5e?f?g a?bc4d5e?f?g
str = "GET /index.html HTTP/1.0"
# 空白で分割
for s in str.split( /\s/ )
print "#{s}\n"
end
# /で分割
for s in str.split( /\// )
print "#{s}\n"
end
# .で分割
for s in str.split( /\./ )
print "#{s}\n"
end
実行結果
GET /index.html HTTP/1.0 GET index.html HTTP 1.0 GET /index html HTTP/1 0
print sprintf( "%04d %8s 0x%x\n", 123, 'abc', 465 )
実行結果
0123 abc 0x1d1
# 整数(10進) print 12345, "\n" print -98765, "\n" print 0d12345, "\n" print 123456789012345678901234567890, "\n" # 整数(16進) print 0x8000, "\n" # 整数(8進) print 0770, "\n" print 0o644, "\n" # 整数(2進) print 0b10000000, "\n" # 浮動小数点数 print 123.45, "\n" print 3.0e8, "\n" print -1.602e-19, "\n"
実行結果
12345 -98765 12345 123456789012345678901234567890 32768 504 420 128 123.45 300000000.0 -1.602e-19
print 3 ** 2, "\n" print 1.414 ** 2.0, "\n"
実行結果
9 1.999396
float = 0.0
posinf = +1.0 / 0.0
neginf = -1.0 / 0.0
nan = 0.0 / 0.0
print "#{float} ", float.infinite? , "\n"
print "#{posinf} ", posinf.infinite? , "\n"
print "#{neginf} ", neginf.infinite? , "\n"
print "#{nan} ", nan.nan? , "\n"
実行結果
0.0 nil Infinity 1 -Infinity -1 NaN true
print (3.7).truncate, "\n" print (3.7).round, "\n" print (3.7).ceil, "\n" print (3.7).floor, "\n"
実行結果
3 4 4 3
FOO = 'foo'
Bar = 'bar'
print "#{FOO} #{Bar}\n"
Bar = 'foo'
FOO = Bar
print "#{FOO} #{Bar}\n"
実行結果
foo bar ./sample.rb:8: warning: already initialized constant Bar ./sample.rb:9: warning: already initialized constant FOO foo foo
print Math::E, "\n" print Math::PI, "\n"
実行結果
2.71828182845905 3.14159265358979
未整理