| 情報学部 | 菅沼ホーム | 目次 | 索引 |
"abc" + "efg\n" "abc" "efg\n"
| Seq. | 説明 | Seq. | 説明 |
|---|---|---|---|
| \t | タブ( 0x09 ) | \n | 改行( 0x0a ) |
| \r | キャリッジリターン( 0x0d ) | \f | 改ページ( 0x0c ) |
| \b | バックスペース( 0x08 ) | \a | ベル( 0x07 ) |
| \e | エスケープ( 0x1b ) | \s | 空白( 0x20 ) |
| \nnn | 8 進数表記( n は 0-7 ) | \xnn | 16 進数表記( n は 0-9,a-f ) |
| \cx,\C-x | コントロール文字( x は ASCII 文字) | \M-x | メタ x ( c | 0x80 ) |
| \M-\C-x | メタコントロール x | \x | 文字 x そのもの |
$sei = "山田"
$nam = "太郎"
print "私は,#{ $sei + $nam } です\n"
print "私は,#{ $sei } です\n"
print "私は,#$sei です\n"
print "私は,\#{ $sei } です\n" # 式展開が行われない
私は,山田太郎 です
私は,山田 です
私は,山田 です
私は,#{ $sei } です #! ruby -Ks y = ` ls -l ` printf "%s\n", y printf "終了ステータス %d\n", $?
total 1 -rwxr-xr-x 1 1005 everyone 44 Jun 8 13:45 test.rb 終了ステータス 0
:abc
print ("abc" == "abc") ? true : false, "\n"
print ("abc".equal?("abc")) ? true : false, "\n"
print ("abc" == :abc) ? true : false, "\n"
print ("abc" == :abc.to_s) ? true : false, "\n"
print ("abc".equal?(:abc.to_s)) ? true : false, "\n"
print (:abc == :abc) ? true : false, "\n"
print (:abc.equal?(:abc)) ? true : false, "\n"
print (:abc == :"abc") ? true : false, "\n"
print (:abc.equal?(:"abc")) ? true : false, "\n"
true false false true false true true true true
#! ruby -Ks
def func(x)
print x[:name], "\n"
print x[:address], "\n"
end
func ({:name => "山田太郎", :address => "静岡県"}) 山田太郎 静岡県
a = 10 a = "abc"
| BEGIN | class | ensure | nil | self | when |
| END | def | false | not | super | while |
| alias | defined? | for | or | then | yield |
| and | do | if | redo | true | |
| begin | else | in | rescue | undef | |
| break | elsif | module | retry | unless | |
| case | end | next | return | until |
conts int x = 10; // 変数 x の値を,以後,修正できない
| 演算子 | 使用目的 |
|---|---|
| :: | クラス内部の定数などの参照 例: Test::Const |
| [] | 配列要素などの参照 例: x[2] |
| +(単項) | 数値の符号 |
| ! | 論理否定 |
| ~ | ビット演算子(否定) |
| **(*) | べき乗 例: 2**0.5 |
| -(単項) | 数値の符号 |
| * | 乗算など |
| / | 除算,整数どうしの場合は小数点以下切り捨て |
| % | 余り演算など,浮動小数点どうしの演算も可能 |
| + | 加算,文字列の連結など |
| - | 減算など |
| << | ビット演算子(左シフト)など |
| >> | ビット演算子(右シフト)など |
| & | ビット演算子(論理積)など |
| | | ビット演算子(論理和)など |
| ^ | ビット演算子(排他的論理和)など |
| > | 比較演算子 例: a > b( a は b より大) |
| >= | 比較演算子 例: a >= b( a は b 以上) |
| < | 比較演算子 例: a < b( a は b より小) |
| <= | 比較演算子 例: a <= b( a は b 以下) |
| <=>(*) | 比較を行い,正,0,負の判定など |
| == | 比較演算子 例: a == b( a と b は等しい?) |
| ===(*) | クラス又はそのサブクラスのインスタンスであるか否かの比較など |
| != | 比較演算子 例: a != b( a と b は等しくない?) |
| =~(*) | 正規表現とのマッチ |
| !~(*) | 正規表現にマッチする場合に false,マッチしない場合に true |
| && | 論理積 |
| || | 論理和 |
| ..(*) | 範囲式 |
| ...(*) | 範囲式 |
| ?: | 条件演算子 |
| = | 代入演算子 |
| not | 論理否定( ! ) |
| and | 論理積( && ) |
| or | 論理和( || ) |
x = x + 5
x += 5
+, -, *, /, %, **, &, |, ^, <<, >>, &&, ||
01 #include <stdio.h>
02
03 int main()
04 {
05 // データの入力
06 double x, y;
07 printf("2つのデータを入力して下さい ");
08 scanf("%lf %lf", &x, &y);
09 // 乗算と除算
10 double mul = x * y;
11 double div = x / y;
12 // 結果の出力
13 printf("乗算=%f 除算=%f\n", mul, div);
14
15 return 0;
16 }
01 ############################
02 # 2つのデータの乗算と除算 #
03 # coded by Y.Suganuma #
04 ############################
05 # データの入力
06 printf "2つのデータを入力して下さい ";
07 #print "2つのデータを入力して下さい ";
08 str = gets().strip(); # gets でも良い(以下の関数も同様);
09 a = str.split(" ");
10 x = Integer(a[0]);
11 y = Integer(a[1]);
12 # 和と差の計算
13 mul = x * y;
14 div = x / y;
15 # 結果の出力
16 printf "乗算=%d 除算=%d\n", mul, div;
17 #print "乗算=", mul, " 除算=", div, "\n";
=begin 2つのデータの乗算と除算 coded by Y.Suganuma =end
printf("結果は %f %10.3f %d %5d %s\n", d_data, d_data, i_data, i_data, c_data) d_data = -12.34456 i_data = -12 c_data = "abc"; printf "結果は %f %10.3f %d %5d %s\n", d_data, d_data, i_data, i_data, c_data
2つのデータを入力して下さい 8 3 乗算=24 除算=2
for i in 1 .. 3 # for i in Range.new(1, 3) print " ", i end print "\n" for i in 1 ... 3 # for i in Range.new(1, 3, true) print " ", i end print "\n" for k in "aa" .. "ac" print " ", k end print "\n"
1 2 3 1 2 aa ab ac
式1 ? 式2 : 式3
a = (b > 0) ? 1 : 2
if 式1 [then] 式2 [elsif 式3 [then] 式4 ] ・・・ [else 式5 ] end
while 式1 [do] 式2 end
for ループ変数 in 式1 [do] 式2 end
01 ############################ 02 # for 文 # 03 # coded by Y.Suganuma # 04 ############################ 05 # Range クラスを利用 06 for i in Range.new(1, 3) # Range.new(1, 4, true) でも良い 07 printf "%d ", i 08 end 09 printf "\n" 10 # 配列の利用 11 for i in Array[1.5, 5.1, 3.14] 12 printf "%.2f ", i 13 end 14 printf "\n" 15 # 複数のループ変数( 2 次元配列) 16 # このような機能は必要ない 17 # プログラムが読みにくくなるだけ 18 for i, j in Array[[1, 2], [3, 4], [5, 6]] # [[1, 2], [3, 4], [5, 6]] でも良い 19 printf "%d,%d ", i, j 20 end 21 printf "\n"
1 2 3 1.50 5.10 3.14 1,2 3,4 5,6
break for i in Array[1, 5, -1, 6, 7] if i < 0 break end printf "%d ", i end printf "\n"
next for i in Array[1, 5, -1, 6, 7] if i < 0 next end printf "%d ", i end printf "\n"
begin 式1 [rescue [error_type,・・・] [=> evar] [then] 式2] ・・・・・ [else 式n] [ensure 式m] end
raise raise messageまたはexception raise error_type, message raise error_type, message, traceback
x = 0 begin y = 10 / x raise "エラー発生!" rescue ZeroDivisionError p $! p $@ x = 2 retry rescue p $! p $@ ensure printf "最後の処理\n" end printf "y = %d\n", y
#<ZeroDivisionError: divided by 0> ["test.rb:3:in `/'", "test.rb:3"] #<RuntimeError: エラー発生!> ["test.rb:4"] 最後の処理 y = 5
x1 = Array[1, 2.3, "abc"]; # x1 = [1, 2.3, "abc"]; でも可
p x1
x2 = Array.new(3)
x2[0] = 1
x2[1] = 2.3
x2[2] = "abc"
p x2
x3 = Array.new()
x3.push(1)
x3.push(2.3)
x3.push("abc")
p x3
01 ############################
02 # 平均点以下の人数 #
03 # coded by Y.Suganuma #
04 ############################
05 # データの入力
06 printf("人数は? ")
07 n = Integer(gets().strip())
08 x = Array.new(n)
09 for i1 in Range.new(0, n-1)
10 printf("%d 番目の人に点数は? ", i1+1)
11 x[i1] = Integer(gets().strip())
12 end
13
14 =begin
15 printf("各人の点数は ")
16 str = (gets().strip()).split(" ")
17 n = str.size
18 x = Array.new(n)
19 =end
20 # 平均点の計算
21 mean = 0.0;
22 for i1 in Range.new(0, n-1)
23 # x[i1] = Integer(str[i1])
24 mean += x[i1]
25 end
26 mean /= n
27 # 平均点以下の人数をカウント
28 ct = 0
29 for i1 in Range.new(0, n-1)
30 if x[i1] <= mean
31 ct += 1
32 end
33 end
34 # 結果の出力
35 printf("結果: %d 人\n", ct)
v1 = Array[[10, 20, 30], [40, 50, 60]] p v1 v2 = Array.new(2) v2[0] = Array[10, 20, 30] v2[1] = Array[40, 50, 60] p v2 v3 = Array.new() v3.push([10, 20, 30]) v3.push([40, 50, 60]) p v3
10 20 30\n 40 50\n \n
01 #****************************/
02 #* 平均点以下の人数 */
03 #* coded by Y.Suganuma */
04 #****************************/
05 # データの入力
06 x = Array.new() # 各人の点数
07 n = 0 # クラスの数
08 m = Array.new() # 各クラスの人数
09 mm = 0; # 全体の人数
10 mean = 0; # 全体の平均
11
12 printf("1 番目のクラスにおける各人の点数は?(半角スペースで区切る) ")
13 a = (gets().strip()).split(" ")
14 while a.size > 0
15 m.push(a.size) # クラスの人数
16 x.push(Array.new(m[n])) # 2 次元配列の生成
17 mm += m[n] # 全体の人数
18 for i1 in Range.new(0, m[n]-1)
19 x[n][i1] = Integer(a[i1])
20 mean += x[n][i1] # 全体の平均
21 end
22 n += 1
23 printf("%d 番目のクラスにおける各人の点数は?(半角スペースで区切る) ", (n+1))
24 a = (gets().strip()).split(" ")
25 end
26 # 平均点の計算
27 mean /= mm
28 p mean, mm
29 # 平均点以下の人数のカウントと出力
30 for i1 in Range.new(0, n-1)
31 ct = 0
32 for i2 in Range.new(0, m[i1]-1)
33 if x[i1][i2] <= mean
34 ct += 1
35 end
36 end
37 printf("クラス%d における平均点以下の人数: %d 人\n", (i1+1), ct)
38 end
a = 10; b = a; b = 20;
u1 = Array[1, "abc", 2] u2 = Array[1, "abc", 2] u3 = u1 u3[1] = 4 print u1[1]," ",u2[1]," ",u3[1] # 4 abc 4

u1 = Array[1, 2, 3]; u2 = Array[1, 2, 3]; u3 = u1; print "u1 : ", u1[0], " ", u1[1], " ", u1[2], "\n" print "u2 : ", u2[0], " ", u2[1], " ", u2[2], "\n" print "u3 : ", u3[0], " ", u3[1], " ", u3[2], "\n" print " u1[0] -> 10,u2[1] -> 20,u3[2] -> 30\n" u1[0] = 10 u2[1] = 20 u3[2] = 30 print "u1 : ", u1[0], " ", u1[1], " ", u1[2], "\n" print "u2 : ", u2[0], " ", u2[1], " ", u2[2], "\n" print "u3 : ", u3[0], " ", u3[1], " ", u3[2], "\n"
u1 : 1 2 3
u2 : 1 2 3
u3 : 1 2 3
u1[0] -> 10,u2[1] -> 20,u3[2] -> 30
u1 : 10 2 30
u2 : 1 20 3
u3 : 10 2 30
v1 = Array[[10, 20, 30], [40, 50, 60]] v2 = Array[[10, 20, 30], [40, 50, 60]] v3 = v1

v4 = v1[0]; // v1,v3 の 1 行目
01 u1 = Array[10, 20, 30] 02 u2 = Array.new(u1) 03 u3 = u1 04 u4 = u1.clone 05 u3[0] = 100 06 u4[1] = 200 07 print "u1 ", u1, "\n" 08 print "u2 ", u2, "\n" 09 print "u3 ", u3, "\n" 10 print "u4 ", u4, "\n" 11 12 v1 = Array[[10, 20, 30], [40, 50, 60]] 13 v2 = Array.new(v1) 14 v3 = v1 15 v4 = v1.clone 16 v3[1][1] = 100 17 v4[0][1] = 200 18 print "v1 ", v1, "\n" 19 print "v2 ", v2, "\n" 20 print "v3 ", v3, "\n" 21 print "v4 ", v4, "\n"
u1 [100, 20, 30] u2 [10, 20, 30] u3 [100, 20, 30] u4 [10, 200, 30] v1 [[10, 200, 30], [40, 100, 60]] v2 [[10, 200, 30], [40, 100, 60]] v3 [[10, 200, 30], [40, 100, 60]] v4 [[10, 200, 30], [40, 100, 60]]
def メソッド名 [ 引数の並び ] 式 ・・・ [rescue [error_type,..] [=> evar] [then] 式..].. [else 式..] [ensure 式..] end
return [ 式 [ , 式 ... ] ]
01 def fun(a, b, x) 02 a *= 2 03 x[0] = a + b 04 x[1] = a - b 05 x[2] = a * b 06 x[3] = a / b 07 return x[0], x[1], x[2], x[3] 08 # return x 09 end 10 11 a = 5 12 b = 2 13 x1 = Array.new(4) 14 print "関数を呼ぶ前: a = ", a, ", b = ", b, "\n" 15 16 y1 = fun(a, b, x1) 17 18 print "関数を呼んだ後: a = ", a, ", b = ", b, "\n" 19 print "x1 = ", x1, "\n" 20 print "y1 = ", y1, "\n"
関数を呼ぶ前: a = 5, b = 2 関数を呼んだ後: a = 5, b = 2 x1 = [12, 8, 20, 5] y1 = [12, 8, 20, 5]
def func (par1, par2=10, par3=30) x = par1 + par2 + par3 return x end print func(100, 50)
# 可変長引数 def func1 (par, *x) print "par: ", par, " x:", x, "\n" end func1(0) # 出力結果 par: 0 x:[] func1(1, 10) # 出力結果 par: 1 x:[10] func1(2, 10, 20) # 出力結果 par: 2 x:[10, 20] # 配列を使用した場合 def func2 (par, x) print "par: ", par, " x;", x, "\n" end x = Array.new func2(0, x) # 出力結果 par: 0 x;[] x.push(10) func2(1, x) # 出力結果 par: 1 x;[10] x.push(20) func2(2, x) # 出力結果 par: 2 x;[10, 20]
Proc.new do | パラメータ| 式 end
Proc.new { | パラメータ| 式 }
proc do | パラメータ| 式 end
proc { | パラメータ| 式 }
lambda do | パラメータ| 式 end
lambda { | パラメータ| 式 }
01 # add1 = lambda { |x, y| return x + y }
02 # add1 = lambda do |x, y| return x + y end
03 add1 = lambda { |x, y|
04 return x + y
05 }
06 print "lambda : ", add1.call(1, 2), "\n"
07
08 def add2(x, y)
09 f = lambda { return x + y }
10 return f.call
11 end
12 print "lambda(関数) : ", add2(1, 2), "\n"
13
14 add3 = Proc.new { |x, y|
15 x + y # return x + y は No
16 }
17 print "Proc.new : ", add3.call(1, 2), "\n"
18
19 def add4(x, y)
20 f = Proc.new { return x + y } # f = proc { return x + y }
21 return f.call
22 end
23 print "Proc.new(関数) : ", add4(1, 2), "\n"
lambda : 3 lambda(関数) : 3 Proc.new : 3 Proc.new(関数) : 3
method(arg1, arg2, ...) do [ | パラメータ | ] 式 ... end
method(arg1, arg2, ...) { [ | パラメータ | ] 式 ... }
method(arg1, arg2, ..., &proc_object) # proc_object は別に定義
3.times {printf "test\n"}
3.times {|m| printf "m = %d\n", m; printf " result %d\n", 3*m}
block = Proc.new {printf "test\n"}
# block = proc {printf "test\n"} この方法でも可
# block = lambda {printf "test\n"} この方法でも可
3.times &block test test test m = 0 result 0 m = 1 result 3 m = 2 result 6 test test test
yield ( [ 式 [, 式 ・・・ ] ] ) yield [ 式 [, ' 式 ・・・ ] ]
01 #************************/
02 # 様々な引数 */
03 # coded by Y.Suganuma */
04 #************************/
05 a = 10
06 #
07 # ブロック付きメソッド
08 #
09 print "ブロック付きメソッド\n"
10 def add5(x, y = 20, &blk)
11 x = 5
12 r = blk.call(x, y) # yield(x, y)
13 return r
14 end
15
16 res = add5(a) { |x, y| x + y } # return x + y は No
17 print " ブロック付きメソッド(直接) : a = ", a, ", sum = ", res, "\n"
18
19 add_l = lambda { |x, y|
20 return x + y
21 }
22 res = add5(a, &add_l)
23 print " ブロック付きメソッド(lambda) : a = ", a, ", sum = ", res, "\n"
24
25 add_p = Proc.new { |x, y|
26 x + y # return x + y は No
27 }
28 res = add5(a, &add_p)
29 print " ブロック付きメソッド(Proc.new) : a = ", a, ", sum = ", res, "\n"
30 #
31 # 最小値,最大値を求めるブロック付きメソッド
32 #
33 print "最小値,または,最大値を求めるメソッド\n"
34 def min_max(x, &blk)
35 x[3] = -3
36 re = x[0]
37 for a in x[1...x.length]
38 re = yield(re, a) ? re : a
39 # re = blk.call(re, a) ? re : a
40 end
41 return re
42 end
43 # ブロック max の定義と利用
44 max = lambda { |x, y|
45 return x > y
46 }
47 print " 2 > 1 ? ", max.call(2, 1), "\n"
48 # ブロック min の定義と利用
49 min = lambda { |x, y|
50 return x < y
51 }
52 print " 1 < 2 ? ", min.call(1, 2), "\n"
53 # 最大値,最小値の計算
54 x = [1, 4, 2, 3, 5]
55 print " max ", min_max(x, &max), " x ", x, "\n"
56 print " min ", min_max(x, &min), " x ", x, "\n"
ブロック付きメソッド ブロック付きメソッド(直接) : a = 10, sum = 25 ブロック付きメソッド(lambda) : a = 10, sum = 25 ブロック付きメソッド(Proc.new) : a = 10, sum = 25 最小値,または,最大値を求めるメソッド 2 > 1 ? true 1 < 2 ? true max 5 x [1, 4, 2, -3, 5] min -3 x [1, 4, 2, -3, 5]
class 識別子 [ < superclass ] 式(演算式,メソッド,クラスなど) ・・・ end
obj1 = Test.new obj2 = Test.new(10, 20) # 引数がある場合
01 #************************/
02 # クラスの定義と参照 */
03 # coded by Y.Suganuma */
04 #************************/
05 v_local_1 = 5
06 $_global_1 = 15
07 V_const_1 = 25
08 @_instance_1 = 35
09 @@_class_1 = 45 # 警告メッセージ出力
10
11 class Test
12 v_local_2 = 10
13 $_global_2 = 20
14 V_const_2 = 30
15 @_instance_2 = 40
16 @@_class_2 = 50
17
18 print "クラス内からクラス外の変数を参照\n"
19 # print " v_local_1 : ", v_local_1, "\n" # 参照不可(エラー)
20 print " $_global_1 : ", $_global_1, "\n"
21 print " V_const_1 : ", V_const_1, "\n"
22 print " @_instance_1 : ", @_instance_1, "\n" # 参照不可
23 print " @@_class_1 : ", @@_class_1, "\n"
24
25 print "クラス内からクラス内の変数を参照\n"
26 print " v_local_2 : ", v_local_2, "\n"
27 print " $_global_2 : ", $_global_2, "\n"
28 print " V_const_2 : ", V_const_2, "\n"
29 print " @_instance_2 : ", @_instance_2, "\n"
30 print " @@_class_2 : ", @@_class_2, "\n"
31 # コンストラクタ
32 def initialize(par = 100)
33 @_instance_2 = par
34 end
35 # インスタンス変数の出力
36 def out
37 print " @_instance_2 : ", @_instance_2, "\n"
38 end
39 # インスタンス変数を外部から参照可能にする
40 attr("_instance_2", true)
41 end
42
43 print "クラス外からクラス外の変数を参照\n"
44 print " v_local_1 : ", v_local_1, "\n"
45 print " $_global_1 : ", $_global_1, "\n"
46 print " V_const_1 : ", V_const_1, "\n"
47 print " @_instance_1 : ", @_instance_1, "\n"
48 print " @@_class_1 : ", @@_class_1, "\n" # 警告メッセージ出力
49
50 print "クラス外からクラス内の変数を参照\n"
51 #print " v_local_2 : ", Test::v_local_2, "\n" # 参照不可(エラー)
52 print " $_global_2 : ", $_global_2, "\n" # Test:: を付加するとエラー
53 print " V_const_2 : ", Test::V_const_2, "\n"
54 print " @_instance_2 : ", @_instance_2, "\n" # 参照不可
55 #print " @@_class_2 : ", @@_class_2, "\n" # 参照不可(エラー)
56 # インスタンスの生成
57 obj1 = Test.new
58 obj2 = Test.new(200)
59
60 print "インスタンスからクラス内の変数を参照\n"
61 #print " v_local_2 : ", obj1.v_local_2, "\n" # 参照不可(エラー)
62 #print " $_global_2 : ", obj1.$_global_2, "\n" # 参照不可(エラー)
63 #print " V_const_2 : ", obj1.V_const_2, "\n" # 参照不可(エラー)
64 obj1.out()
65 obj2.out()
66 #print " @_instance_2 : ", obj1.@_instance_2, "\n" # 参照不可(エラー)
67 print " @_instance_2 : ", obj1._instance_2, "\n" # attr による設定が必要
68 print " @_instance_2 : ", obj2._instance_2, "\n"
69 #print " @@_class_2 : ", obj1.@@_class_2, "\n" # 参照不可(エラー)
test.rb:9: warning: class variable access from toplevel
クラス内からクラス外の変数を参照
$_global_1 : 15
V_const_1 : 25
@_instance_1 :
@@_class_1 : 45
クラス内からクラス内の変数を参照
v_local_2 : 10
$_global_2 : 20
V_const_2 : 30
@_instance_2 : 40
@@_class_2 : 50
クラス外からクラス外の変数を参照
v_local_1 : 5
$_global_1 : 15
V_const_1 : 25
@_instance_1 : 35
test.rb:48: warning: class variable access from toplevel
@@_class_1 : 45
クラス外からクラス内の変数を参照
$_global_2 : 20
V_const_2 : 30
@_instance_2 :
オブジェクトからクラス内の変数を参照
@_instance_2 : 100
@_instance_2 : 200
@_instance_2 : 100
@_instance_2 : 200
class P_Test @@_class = 10 print "クラス変数 @@_class = ", @@_class, " (in P_Test)\n" def func print "こんにちは!!" end end class Test < P_Test print "クラス変数 @@_class = ", @@_class, " (in Test)\n", class Test_in # print "クラス変数 @@_class = ", @@_class, " (in Test)\n" 参照不可 end end #print "クラス変数 @@_class = ", @@_class, "\n" 参照不可 t_obj1 = P_Test.new t_obj1.func print " (in P_Test)\n" t_obj2 = P_Test.new t_obj2.func print " (in Test)\n"
クラス変数 @@_class = 10 (in P_Test) クラス変数 @@_class = 10 (in Test) こんにちは!! (in P_Test) こんにちは!! (in Test)
class P_Test def add(p1, p2=20, p3=30) return p1 + p2 + p3 end end class Test < P_Test def add(p) return p + super end end print Test.new.add(100)
module Add_m Const = 100 def add(a, b) return a + b end end class Test include Add_m def sub(a, b) return a - b + Const end end printf "%d\n", Test.new.add(10, 20) printf "%d\n", Test.new.sub(10, 20)
module Add_m Const = 100 def add(a, b) return a + b end end class Test def sub(a, b) return a - b end end obj = Test.new obj.extend Add_m printf "%d\n", obj.add(10, 20) printf "%d\n", obj.sub(10, 20)
| ^ & <=> == === =~ > >= < <= << >>
+ - * / % ** ~ [] []= `
= ?: .. ... ! not && and || or :: # 二項演算子 def +(other) # obj + other def -(other) # obj - other # 単項プラス/マイナス def +@ # +obj def -@ # -obj # [] と []= def [](key) # obj[key] def []=(key, value) # obj[key] = value def []=(key, key2, value) # obj[key, key2] = value
class Comp
def initialize(_real = 0, _imag = 0)
@_real = _real
@_imag = _imag
end
def out(cr = "")
print "(", @_real, ", ", @_imag, ")", cr
end
def real
return @_real
end
def imag
return @_imag
end
def +(obj)
c = Comp.new(@_real+obj.real, @_imag+obj.imag)
return c
end
end
a = Comp.new(1, 2)
b = Comp.new(2, 3)
a.out("\n")
b.out("\n")
c = a + b
c.out("\n")
(1, 2) (2, 3) (3, 5)
class Comp
def initialize(_real = 0, _imag = 0)
@_real = _real
@_imag = _imag
end
def out(cr = "")
print "(", @_real, ", ", @_imag, ")", cr
end
def -@
c = Comp.new(-@_real, -@_imag)
return c
end
end
a = Comp.new(1, 2)
a.out("\n")
c = -a
c.out("\n")
(1, 2) (-1, -2)
01 print "データを 2 つ入力してください " 02 x = (gets().strip()).split() 03 print "*** 配列 x を print で出力 ***\n" 04 print "print ", x, "\n" 05 print "*** 配列 x を p で出力 ***\n" 06 p "p ", x 07 print "*** 配列 x を puts で出力 ***\n" 08 puts "puts ", x 09 print "*** 配列 x を printf で出力 ***\n" 10 printf "x[0] %d x[1] %d\n", x[0], x[1] 11 print "*** x[0] と x[1] の加算結果を print で出力 ***\n" 12 print "x[0] + x[1] = ", x[0].to_i() + x[1].to_i(), "\n"
データを 2 つ入力してください 1 2 *** 配列 x を print で出力 *** print ["1", "2"] *** 配列 x を p で出力 *** "p " ["1", "2"] *** 配列 x を puts で出力 *** puts 1 2 *** 配列 x を printf で出力 *** x[0] 1 x[1] 2 *** x[0] と x[1] の加算結果を print で出力 *** x[0] + x[1] = 3
1 2 3 4 ・・・・・
01 inp = File.open("data1.txt", "r") # data1.txt から入力
02 out = File.open("data2.txt", "w") # data2.txt へ出力
03 while line = inp.gets # データが無くなるまで繰り返す
04 x = line.split()
05 out.print x[0].to_i() + x[1].to_i(), "\n"
06 end
07 inp.close # ファイルを閉じる
08 out.close # ファイルを閉じる
09
10 =begin
11 $stdin = open("data1.txt", "r")
12 $stdout = open("data2.txt", "w")
13 while line = gets
14 x = line.split()
15 print x[0].to_i() + x[1].to_i(), "\n"
16 end
17 $stdin = STDIN # 通常の標準入力に戻す
18 $stdout = STDOUT # 通常の標準出力に戻す
19 =end
01 #***************************/
02 # 変数の有効範囲(スコープ) */
03 # coded by Y.Suganuma */
04 #***************************/
05
06 #******************/
07 # クラス Example1 */
08 #******************/
09 class Example1
10 Const = 1000;
11 @@_class = 2000;
12
13 def initialize
14 @_pro = 3000;
15 end
16
17 def sub1()
18 printf("sub1 Const %d @@_class %d @_pro %d\n", Const, @@_class, @_pro);
19 end
20 end
21
22 #******************/
23 # クラス Example2 */
24 #******************/
25 class Example2 < Example1
26 public
27 def sub2()
28 printf("sub2 Const %d @@_class %d @_pro %d\n", Const, @@_class, @_pro);
29 end
30
31 attr_accessor("_pro");
32 end
33
34 #***********/
35 # 関数 sub */
36 #***********/
37 def sub() # この位置で定義する必要がある
38 x = 40;
39 printf(" sub x %d\n", x);
40 printf(" sub z %d\n", $z);
41 end
42
43 #***************/
44 # main program */
45 #***************/
46 # ブロック
47 x = 10;
48 $z = 30;
49 if x > 5
50 printf("block x %d\n", x);
51 x = 15;
52 y = 20;
53 printf("block x %d\n", x);
54 printf("block y %d\n", y);
55 else
56 printf("block x %d\n", x);
57 x = -15;
58 printf("block x %d\n", x);
59 end
60 sub();
61 printf("x %d\n", x);
62 printf("y %d\n", y); # 最初の x が 1 の時は,y が未定義のためエラー
63 # クラス
64 ex = Example2.new;
65 ex.sub1();
66 ex.sub2();
67 printf("public member( Const ) %d\n", Example2::Const);
68 printf("public member( @_pro ) %d\n", ex._pro);
block x 10 block x 15 block y 20 sub x 40 sub z 30 x 15 y 20
sub1 Const 1000 @@_class 2000 @_pro 3000 sub2 Const 1000 @@_class 2000 @_pro 3000 public member( Const ) 1000 public member( @_pro ) 3000
| 情報学部 | 菅沼ホーム | 目次 | 索引 |