情報学部 | 菅沼ホーム | 目次 | 索引 |
"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
情報学部 | 菅沼ホーム | 目次 | 索引 |