ruby-japanize 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/Gemfile +13 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +1459 -0
  6. data/Rakefile +88 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +8 -0
  9. data/lib/japanize/base.rb +652 -0
  10. data/lib/japanize/container.rb +213 -0
  11. data/lib/japanize/core.rb +194 -0
  12. data/lib/japanize/enum.rb +127 -0
  13. data/lib/japanize/errors.rb +79 -0
  14. data/lib/japanize/globals.rb +109 -0
  15. data/lib/japanize/io.rb +388 -0
  16. data/lib/japanize/names.rb +213 -0
  17. data/lib/japanize/num.rb +319 -0
  18. data/lib/japanize/process.rb +318 -0
  19. data/lib/japanize/string.rb +257 -0
  20. data/lib/japanize/syntax.rb +805 -0
  21. data/lib/japanize/sys.rb +174 -0
  22. data/lib/japanize/test_unit.rb +99 -0
  23. data/lib/japanize/thread.rb +143 -0
  24. data/lib/japanize/time.rb +82 -0
  25. data/lib/japanize/version.rb +12 -0
  26. data/lib/japanize.rb +24 -0
  27. data/ruby-japanize.gemspec +41 -0
  28. data/sample/README.md +33 -0
  29. data/sample/dir.rb +15 -0
  30. data/sample/eval.rb +48 -0
  31. data/sample/export.rb +44 -0
  32. data/sample/fact.rb +17 -0
  33. data/sample/fib.rb +13 -0
  34. data/sample/freq.rb +17 -0
  35. data/sample/fullpath.rb +29 -0
  36. data/sample/less.rb +19 -0
  37. data/sample/list.rb +86 -0
  38. data/sample/list2.rb +22 -0
  39. data/sample/list3.rb +23 -0
  40. data/sample/mine.rb +204 -0
  41. data/sample/mkproto.rb +33 -0
  42. data/sample/mpart.rb +48 -0
  43. data/sample/occur.rb +17 -0
  44. data/sample/occur2.rb +17 -0
  45. data/sample/philos.rb +57 -0
  46. data/sample/pi.rb +20 -0
  47. data/sample/rcs.dat +17 -0
  48. data/sample/rcs.rb +45 -0
  49. data/sample/sieve.rb +17 -0
  50. data/sample/time.rb +14 -0
  51. data/sample/trojan.rb +18 -0
  52. data/sample/uumerge.rb +47 -0
  53. metadata +164 -0
data/README.md ADDED
@@ -0,0 +1,1459 @@
1
+ ruby-japanize
2
+ =============
3
+
4
+ 日本語の別名や構文を定義してRubyを日本語で書けるようにする。
5
+
6
+ 導入方法
7
+ --------
8
+
9
+ `Gemfile`に次の行を追加します。
10
+
11
+ ```ruby
12
+ gem 'ruby-japanize'
13
+ ```
14
+
15
+ そして次のコマンドを実行します。
16
+
17
+ $ bundle
18
+
19
+ または次のようにします。
20
+
21
+ $ gem install ruby-japanize
22
+
23
+ なぜRubyを日本語化しようと思ったのかについて
24
+ --------------------------------------------
25
+
26
+ Rubyを日本語化しようと思ったきっかけは二つあります。一つはRubyの識別子
27
+ (変数名やメソッド名)にUTF-8が使えるため、その気になれば日本語だけで
28
+ Rubyのスクリプトを書けるのではないかと思いついたことです。唯一、クラス
29
+ 名(≒定数名)はアルファベットの大文字で始まる必要があるため単純に日本語
30
+ 化できないのですが、試しにプロトタイプを作ってみたところちょっとした制
31
+ 限と工夫でなんとかなりそうだという感触を得ました。
32
+
33
+ もう一つのきっかけは、日本語で実用的なプログラミングを表現し切ることは、
34
+ はたして可能なのだろうかと疑問に思ったことです。現在、Rubyを含む一般に
35
+ 広く普及している実用的なプログラミング言語は英語がベースになっていると
36
+ 言っていいと思います。日本語ベースのプログラミング言語も無くはないよう
37
+ ですが、実用言語として広く普及しているとは言いがたい状況でしょう。Ruby
38
+ を実用言語たらしめている要素は大きく二つあると思っていて、一つは見ため
39
+ に分かりやすい構文で、もう一つは豊富なクラスライブラリ(≒語彙)です。実
40
+ 用的なプログラミングのためには特に後者が重要だと個人的には思っていて、
41
+ Rubyは英語ベースなのでRubyが持つ語彙もすべて英語で表現されているわけで、
42
+ 日本語で実用的なプログラミングをするためにはこの語彙をすべて日本語で表
43
+ 現し切る必要があるのですが、はたしてそんなことは本当に可能なのでしょう
44
+ か?
45
+
46
+ この疑問を解くためには、実際に作ってみるのが手っ取り早いということで、
47
+ 作ってみたのがこのgemです。
48
+
49
+ 日本語化の基本方針
50
+ ------------------
51
+
52
+ - スクリプトエンコーディングはUTF-8で統一する。
53
+ - 外付けのライブラリにまで手を出すときりがないので、日本語化の範囲は組
54
+ み込みライブラリまでにする。
55
+ - `Test::Unit`はテストのために使うので例外的に日本語化の対象とする。
56
+ - ファイル名は日本語化しない。(本当は日本語化したかったけど、環境によっ
57
+ てファイル名の文字符号化方式が異なるとバイト表現が変わるため、ファイ
58
+ ル名の日本語化はあきらめました)
59
+ - 演算子や記号などの英語でない名前は日本語化しない。
60
+
61
+ 日本語の命名規則
62
+ ----------------
63
+
64
+ 1. カタカナ語はできるだけ使わない。どうしても日本語に該当する概念や言
65
+ 葉が無いときだけカタカナを使う。
66
+ 2. よく使うメソッドは短く簡潔な名前にする。
67
+ 3. 使用頻度が低いメソッドや注意深く使う必要があるメソッドは冗長で分か
68
+ りやすい名前にする。
69
+ 4. 述語メソッド(`〜?`)の名前は原則として`〜か?`で終わらせる。
70
+ 5. 述語メソッドにおける「が」と「は」の使い分け
71
+ - 述語メソッドがレシーバの状態を表すときは`〜が〜か?`とする。
72
+ - 述語メソッドが引数の状態を表すときは`〜は〜か?`とする。
73
+
74
+ 日本語で書いたRubyスクリプトの例
75
+ --------------------------------
76
+
77
+ <https://www.ruby-lang.org/ja/about/>に掲載されているRubyスクリプトを
78
+ 日本語で書いてみた例を以下に掲載しています。またRubyのソースコードに付
79
+ 属するサンプルを日本語で書き直した例が
80
+ [sample](https://github.com/y10k/ruby-japanize/tree/master/sample)にあ
81
+ ります。
82
+
83
+ ### すべてがオブジェクト
84
+
85
+ 元のRubyスクリプトの例:
86
+
87
+ ```ruby
88
+ 5.times { print "We *love* Ruby -- it's outrageous!" }
89
+ ```
90
+
91
+ 日本語で書いたRubyスクリプトの例:
92
+
93
+ ```ruby
94
+ 5.回{ 印字 "みんなRubyが*大好き* -- Rubyはすごいぜ!" }
95
+ ```
96
+
97
+ ### Rubyの柔軟性
98
+
99
+ 元のRubyスクリプトの例:
100
+
101
+ ```ruby
102
+ class Numeric
103
+ def plus(x)
104
+ self.+(x)
105
+ end
106
+ end
107
+
108
+ y = 5.plus 6
109
+ # y は 11 になります
110
+ ```
111
+
112
+ 日本語で書いたRubyスクリプトの例:
113
+
114
+ ```ruby
115
+ 組(数値) {
116
+ 定義(:足す) {|他の数|
117
+ 自分.+(他の数)
118
+ }
119
+ }
120
+
121
+ ある数 = 5.足す 6
122
+ # ある数 は 11 になります
123
+ ```
124
+
125
+ ### ブロック: 表現力豊かな機能
126
+
127
+ 元のRubyスクリプトの例:
128
+
129
+ ```ruby
130
+ search_engines =
131
+ %w[Google Yahoo MSN].map do |engine|
132
+ "http://www." + engine.downcase + ".com"
133
+ end
134
+ ```
135
+
136
+ 日本語で書いたRubyスクリプトの例:
137
+
138
+ ```ruby
139
+ 検索エンジン =
140
+ %w[Google Yahoo MSN].対応させる{|エンジン|
141
+ "http://www." + エンジン.小文字にする + ".com"
142
+ }
143
+ ```
144
+
145
+ ### RubyとMixin
146
+
147
+ 元のRubyスクリプトの例:
148
+
149
+ ```ruby
150
+ class MyArray
151
+ include Enumerable
152
+ end
153
+ ```
154
+
155
+ 日本語で書いたRubyスクリプトの例:
156
+
157
+ ```ruby
158
+ 組(:私家版の配列) {
159
+ 付加 列挙できる
160
+ }
161
+ ```
162
+
163
+ 日本語のRubyスクリプトの書き方
164
+ ------------------------------
165
+
166
+ <!--
167
+ 略語や和名の記述について
168
+
169
+ 略語や和名は各々の段落毎に最初に出現する箇所で括弧で括って示す。すなわ
170
+ ち段落が変わるごとにあらためて定義を示す。各段落中の二回目以降の出現箇
171
+ 所については無条件で使ってよい。
172
+ -->
173
+
174
+ ### 日本語の有効化
175
+
176
+ スクリプトエンコーディングをUTF-8に設定し、Rubyスクリプトの先頭で
177
+ `ruby-japanize`を`require`します。
178
+
179
+ ```ruby
180
+ # -*- coding: utf-8 -*-
181
+
182
+ require 'japanize'
183
+ ```
184
+
185
+ 元のRubyに日本語の定義を追加するだけなので、日本語で書くRubyスクリプト
186
+ は日本語化していない通常のRubyスクリプトと共存できます。
187
+
188
+ ### 日本語の変数と定数
189
+
190
+ ローカル変数(局所変数)、グローバル変数(大域変数)、インスタンス変数(生
191
+ 成物の変数)は特に何もしなくても普通に日本語が使えます。これはRubyの元々
192
+ の機能です。
193
+
194
+ クラス変数は残念ながら日本語で書いたRubyスクリプトから使うことができま
195
+ せん。これはクラス変数がレキシカルスコープと結び付いているのでメタプロ
196
+ グラミングで実現している日本語の機能から参照できないためです。
197
+
198
+ #### 日本語の定数
199
+
200
+ Rubyの定数はアルファベットの大文字で始まる規則になっています。日本語に
201
+ は一般的に大文字や小文字の概念がないので、そのままでは日本語で定数を定
202
+ 義できません。そこで定数の代わりに日本語のクラスメソッド/モジュールメ
203
+ ソッドを使うことにしました。このため定数の定義や参照の仕方が元のRubyス
204
+ クリプトと異なるので注意してください。
205
+
206
+ ##### 定数の定義
207
+
208
+ `日本語の定数`で定数を定義します。トップレベル(最上位)およびクラス(組)/モ
209
+ ジュール(部)のスコープで使えます。
210
+
211
+ 元のRubyスクリプトの例:
212
+
213
+ ```ruby
214
+ FOO = 'FOO'
215
+
216
+ class Foo
217
+ BAR = 'BAR'
218
+
219
+ class Bar
220
+ BAZ = 'BAZ'
221
+ end
222
+ end
223
+ ```
224
+
225
+ 日本語で書いたRubyスクリプトの例:
226
+
227
+ ```ruby
228
+ 日本語の定数 :イ, 'イ'
229
+
230
+ 組(:甲) { # 日本語のクラス定義
231
+ 日本語の定数 :ロ, 'ロ'
232
+
233
+ 組(:乙) {
234
+ 日本語の定数 :ハ, 'ハ'
235
+ }
236
+ }
237
+ ```
238
+
239
+ ##### 定数の参照
240
+
241
+ 日本語の定数は実際はメソッド(操作)で定義されているため、`self`(`自分`)
242
+ を意識して参照する必要があります。
243
+
244
+ 元のRubyスクリプトの例:
245
+
246
+ ```ruby
247
+ p FOO
248
+ p Foo::BAR
249
+ p Foo::Bar::BAZ
250
+
251
+ class Foo
252
+ p FOO # 最上位の定数はどこからでも参照できる
253
+ p BAR # 自クラスの定数を参照できる
254
+
255
+ def foo
256
+ p FOO # 最上位の定数はどこからでも参照できる
257
+ p BAR # 自クラスの定数をメソッド(操作)から参照できる
258
+ end
259
+
260
+ class Bar
261
+ p FOO # 最上位の定数はどこからでも参照できる
262
+ p BAR # 外側の定数を内側から参照できる
263
+ p BAZ # 自クラスの定数を参照できる
264
+
265
+ def bar
266
+ p FOO # 最上位の定数はどこからでも参照できる
267
+ p BAR # 外側の定数を内側から参照できる
268
+ p BAZ # 自クラスの定数をメソッド(操作)から参照できる
269
+ end
270
+ end
271
+ end
272
+ ```
273
+
274
+ 日本語で書いたRubyスクリプトの例:
275
+
276
+ ```ruby
277
+ 点検 イ # 点検はpの日本語版
278
+ 点検 甲::ロ
279
+ 点検 甲::乙::ハ
280
+
281
+ 組(甲) {
282
+ 点検 イ # 最上位の日本語定数はどこからでも参照できる
283
+ 点検 ロ # 自クラスの日本語定数は参照できる
284
+
285
+ 定義(:ある操作) { # 日本語のメソッド定義
286
+ 点検 イ # 最上位の日本語定数はどこからでも参照できる
287
+ 点検 生成元::ロ # self(自分)が異なるので日本語定数に生成元(self.classの日本語版)を付ける必要がある
288
+ 点検 ロ # これは失敗する
289
+ }
290
+
291
+ 組(乙) {
292
+ 点検 イ # 最上位の日本語定数はどこからでも参照できる
293
+ 点検 ::JA::甲::ロ # 自クラス以外の日本語定数は最上位(::JA)から参照する、通常の定数のように内側から参照することはできない
294
+ 点検 ハ # 自クラスの日本語定数は参照できる
295
+
296
+ 定義(:ある操作) {
297
+ 点検 イ # 最上位の日本語定数はどこからでも参照できる
298
+ 点検 ::JA::甲::ロ # 自クラス以外の日本語定数は最上位(::JA)から参照する
299
+ 点検 生成元::ハ # self(自分)が異なるので日本語定数に生成元(self.classの日本語版)を付ける必要がある
300
+ }
301
+ }
302
+ }
303
+ ```
304
+
305
+ ##### 定数のinclude(付加)
306
+
307
+ モジュール(部)の定数は`include`(`付加`)した先で参照できますが、日本語
308
+ の定数はモジュールメソッドになるため`include`した先で参照できません。
309
+
310
+ `日本語の定数を付加できること`を宣言すると日本語の定数も`include`した
311
+ 先で参照できるようになります。
312
+
313
+ 元のRubyスクリプトの例:
314
+
315
+ ```ruby
316
+ module Foo
317
+ FOO = 'FOO'
318
+ end
319
+
320
+ class Bar
321
+ include Foo
322
+
323
+ p FOO # includeした先で参照できる
324
+
325
+ def bar
326
+ p FOO
327
+ end
328
+ end
329
+ ```
330
+
331
+ 日本語で書いたRubyスクリプトの例:
332
+
333
+ ```ruby
334
+ 部(:甲) { # 日本語のモジュール定義
335
+ 日本語の定数 :イ, 'イ'
336
+ 日本語の定数 :ロ, 'ロ'
337
+
338
+ 日本語の定数を付加できること :イ
339
+ }
340
+
341
+ 組(:乙) {
342
+ 付加 甲 # 日本語のinclude宣言
343
+
344
+ 点検 イ # 付加できると宣言したので参照できる
345
+
346
+ 定義(:丙) {
347
+ 点検 生成元::イ
348
+ }
349
+
350
+ 点検 ロ # 付加できると宣言してないので失敗する
351
+ }
352
+ ```
353
+
354
+ ### 日本語の制御構造
355
+
356
+ #### 肯否分岐
357
+
358
+ ##### if文に相当する制御構造
359
+
360
+ 元のRubyスクリプトの例:
361
+
362
+ ```ruby
363
+ if (age >= 12) then
364
+ print "adult fee\n"
365
+ else
366
+ print "child fee\n"
367
+ end
368
+
369
+ gender = if (foo.gender == "male") then "male" else "female" end
370
+ ```
371
+
372
+ 日本語で書いたRubyスクリプトの例:
373
+
374
+ ```ruby
375
+ この条件が{ 年齢 >= 12 }.であるなら{
376
+ 印字 "大人料金\n"
377
+ }.でなければ{
378
+ 印字 "子供料金\n"
379
+ }.である
380
+
381
+ 性別 = この条件が{ 甲.性別 == "男性" }.であるなら{ "男性" }.でなければ{ "女性" }.である
382
+ ```
383
+
384
+ 文法:
385
+
386
+ ```
387
+ この条件が{ 式 }.であるなら{
388
+ 式 ...
389
+ [}.この条件が{ 式 }.であるなら{
390
+ 式 ... ]
391
+ ...
392
+ [}.でなければ{
393
+ 式 ... ]
394
+ }.である
395
+ ```
396
+
397
+ ##### unless文に相当する制御構造
398
+
399
+ 元のRubyスクリプトの例:
400
+
401
+ ```ruby
402
+ unless (baby?) then
403
+ feed_meat
404
+ else
405
+ feed_milk
406
+ end
407
+ ```
408
+
409
+ 日本語で書いたRubyスクリプトの例:
410
+
411
+ ```ruby
412
+ この条件が{ 赤ちゃんか? }.でなければ{
413
+ 肉を食べさせる
414
+ }.であるなら{
415
+ ミルクを飲ませる
416
+ }.である
417
+ ```
418
+
419
+ 文法:
420
+
421
+ ```
422
+ この条件が{ 式 }.でなければ{
423
+ 式 ...
424
+ [}.であるなら{
425
+ 式 ... ]
426
+ }.である
427
+ ```
428
+
429
+ #### 条件分岐
430
+
431
+ ##### case文に相当する制御構造
432
+
433
+ 元のRubyスクリプトの例:
434
+
435
+ ```ruby
436
+ case (age)
437
+ when 0..2
438
+ "baby"
439
+ when 3..6
440
+ "little child"
441
+ when 7..12
442
+ "child"
443
+ when 13..18
444
+ "youth"
445
+ else
446
+ "adult"
447
+ end
448
+ ```
449
+
450
+ 日本語で書いたRubyスクリプトの例:
451
+
452
+ ```ruby
453
+ この値が{
454
+ 年齢
455
+ }.もし{ 0..2 }.であるなら{
456
+ "赤ちゃん"
457
+ }.もし{ 3..6 }.であるなら{
458
+ "幼児"
459
+ }.もし{ 7..12 }.であるなら{
460
+ "子供"
461
+ }.もし{ 13..18 }.であるなら{
462
+ "若者"
463
+ }.でなければ{
464
+ "大人"
465
+ }.である
466
+ ```
467
+
468
+ 文法:
469
+
470
+ ```
471
+ この値が{
472
+
473
+ [}.もし{ 式 [}.か{ 式] ... }.であるなら{
474
+ 式... ]
475
+ ...
476
+ [}.でなければ{
477
+ 式... ]
478
+ }.である
479
+ ```
480
+
481
+ #### 繰り返し
482
+
483
+ ##### while文に相当する制御構造
484
+
485
+ 元のRubyスクリプトの例:
486
+
487
+ ```ruby
488
+ ary = [ 0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 ]
489
+ i = 0
490
+ while (i < ary.length)
491
+ puts ary[i]
492
+ i += 1
493
+ # break, next, redo が使える
494
+ end
495
+ ```
496
+
497
+ 日本語で書いたRubyスクリプトの例:
498
+
499
+ ```ruby
500
+ 一覧 = [ 0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 ]
501
+ 添字 = 0
502
+ この条件なら{ 添字 < 一覧.長さ }.繰り返す{ #|制御|
503
+ 行出力 一覧[添字]
504
+ 添字 += 1
505
+ # 制御.終わる, 制御.次へ進む, 制御.やり直す が使える
506
+ }
507
+ ```
508
+
509
+ 文法:
510
+
511
+ ```
512
+ この条件なら{ 式 }.繰り返す{[|制御|]
513
+ 式 ...
514
+ [制御.終わる [式]]
515
+ [制御.次へ進む]
516
+ [制御.やり直す]
517
+ 式 ...
518
+ }
519
+ ```
520
+
521
+ ##### until文に相当する制御構造
522
+
523
+ 元のRubyスクリプトの例:
524
+
525
+ ```ruby
526
+ until (f.eof?)
527
+ print f.gets
528
+ # break, next, redo が使える
529
+ end
530
+ ```
531
+
532
+ 日本語で書いたRubyスクリプトの例:
533
+
534
+ ```ruby
535
+ この条件まで{ あるファイル.終端か? }.繰り返す{ #|制御|
536
+ 印字 あるファイル.行を取得
537
+ # 制御.終わる, 制御.次へ進む, 制御.やり直す が使える
538
+ }
539
+ ```
540
+
541
+ 文法:
542
+
543
+ ```
544
+ この条件まで{ 式 }.繰り返す{[|制御|]
545
+ 式 ...
546
+ [制御.終わる [式]]
547
+ [制御.次へ進む]
548
+ [制御.やり直す]
549
+ 式 ...
550
+ }
551
+ ```
552
+
553
+ ##### 後置のwhile文に相当する制御構造
554
+
555
+ 元のRubyスクリプトの例:
556
+
557
+ ```ruby
558
+ send_request(data)
559
+ begin
560
+ res = get_response()
561
+ # break, next, redo が使える
562
+ end while (res == 'Continue')
563
+ ```
564
+
565
+ 日本語で書いたRubyスクリプトの例:
566
+
567
+ ```ruby
568
+ 要求を送信(情報)
569
+ 繰り返す{ #|制御|
570
+ 結果 = 応答を取得()
571
+ # 制御.終わる, 制御.次へ進む, 制御.やり直す が使える
572
+ }.この条件なら{ 結果 == '継続' }
573
+ ```
574
+
575
+ 文法:
576
+
577
+ ```
578
+ 繰り返す{[|制御|]
579
+ 式 ...
580
+ [制御.終わる [式]]
581
+ [制御.次へ進む]
582
+ [制御.やり直す]
583
+ 式 ...
584
+ }.この条件なら{ 式 }
585
+ ```
586
+
587
+ ##### 後置のuntil文に相当する制御構造
588
+
589
+ 元のRubyスクリプトの例:
590
+
591
+ ```ruby
592
+ send_request(data)
593
+ begin
594
+ res = get_response()
595
+ # break, next, redo が使える
596
+ end until (res == 'OK')
597
+ ```
598
+
599
+ 日本語で書いたRubyスクリプト例:
600
+
601
+ ```ruby
602
+ 要求を送信(情報)
603
+ 繰り返す{ #|制御|
604
+ 結果 = 応答を取得()
605
+ # 制御.終わる, 制御.次へ進む, 制御.やり直す が使える
606
+ }.この条件まで{ 結果 == '完了' }
607
+ ```
608
+
609
+ 文法:
610
+
611
+ ```
612
+ 繰り返す{[|制御|]
613
+ 式 ...
614
+ [制御.終わる [式]]
615
+ [制御.次へ進む]
616
+ [制御.やり直す]
617
+ 式 ...
618
+ }.この条件まで{ 式 }
619
+ ```
620
+
621
+ ##### for文に相当する制御構造
622
+
623
+ for文に相当する繰り返しを実行するには、`each`メソッド(操作)の日本語の
624
+ 別名である`個別に`メソッドを使います。繰り返しを日本語で制御
625
+ (`break`/`next`/`redo`)する場合は`繰り返す`メソッドを使います。
626
+ `個別に`メソッドが`列挙`(`Enumerator`)を返す場合に`繰り返す`メソッドが
627
+ 使えます。また`繰り返す`メソッドは`個別に`メソッドに限らず`列挙`を返す
628
+ 全てのメソッドで使えます。
629
+
630
+ 元のRubyスクリプトの例:
631
+
632
+ ```ruby
633
+ for i in [ 1, 2, 3 ]
634
+ print i * 2, "\n"
635
+ # break, next, redo が使える
636
+ end
637
+ ```
638
+
639
+ 日本語で書いたRubyスクリプトの例:
640
+
641
+ ```ruby
642
+ [ 1, 2, 3 ].個別に{|数|
643
+ 印字 数 * 2, "\n"
644
+ }
645
+ ```
646
+
647
+ または
648
+
649
+ ```ruby
650
+ [ 1, 2, 3 ].個別に.繰り返す{|制御, 数|
651
+ 印字 数 * 2, "\n"
652
+ # 制御.終わる, 制御.次へ進む, 制御.やり直す が使える
653
+ }
654
+ ```
655
+
656
+ 文法:
657
+
658
+ ```ruby
659
+ 式.個別に{|引数 ...|
660
+ 式 ...
661
+ }
662
+ ```
663
+
664
+ または
665
+
666
+ ```ruby
667
+ 式.個別に.繰り返す{|制御[, 引数 ...]|
668
+ 式 ...
669
+ [制御.終わる [式]]
670
+ [制御.次へ進む]
671
+ [制御.やり直す]
672
+ 式 ...
673
+ }
674
+ ```
675
+
676
+ #### 例外処理
677
+
678
+ ##### 例外の発生
679
+
680
+ 例外を発生させるには`raise`の別名である`例外を発生`を使います。
681
+
682
+ 元のRubyスクリプトの例:
683
+
684
+ ```ruby
685
+ raise "you lose" # 例外 RuntimeError を発生させる
686
+
687
+ # 以下の二つは SyntaxError を発生させる
688
+ raise SyntaxError, "invalid syntax"
689
+ raise SyntaxError.new("invalid syntax")
690
+
691
+ raise # 最後の例外の再発生
692
+ ```
693
+
694
+ 日本語で書いたRubyスクリプトの例:
695
+
696
+ ```ruby
697
+ 例外を発生 "損失" # 例外 実行時の失敗 (RuntimeError) を発生させる
698
+
699
+ # 以下の二つは 文法誤りのため失敗 (SyntaxError) を発生させる
700
+ 例外を発生 文法誤りのため失敗, "文法が不正です"
701
+ 例外を発生 文法誤りのため失敗.新規("文法が不正です")
702
+
703
+ 例外を発生 # 最後の例外を再発生
704
+ ```
705
+
706
+ ##### begin/endに相当する制御構造
707
+
708
+ 元のRubyスクリプトの例:
709
+
710
+ ```ruby
711
+ begin
712
+ do_something
713
+ rescue => e
714
+ recover(e)
715
+ # retry が使える
716
+ ensure
717
+ must_to_do
718
+ end
719
+ ```
720
+
721
+ 日本語で書いたRubyスクリプトの例:
722
+
723
+ ```ruby
724
+ 領域{|制御|
725
+ 制御.本処理{
726
+ 何かをする
727
+ }
728
+ 制御.例外を補足{|発生した例外|
729
+ 復旧する(発生した例外)
730
+ # 制御.やり直す が使える
731
+ }
732
+ 制御.後始末{
733
+ 必ず実行する
734
+ }
735
+ }
736
+ ```
737
+
738
+ 文法:
739
+
740
+ ```
741
+ 領域{|制御|
742
+ 制御.本処理{
743
+ 式 ...
744
+ [制御.戻る [式[, 式] ...]]
745
+ 式 ...
746
+ }
747
+ [制御.例外を捕捉[(式[, 式] ...)] {|発生した例外|
748
+ 式 ...
749
+ [制御.戻る [式[, 式] ...]]
750
+ [制御.やり直す]
751
+ 式 ...
752
+ }]
753
+ ...
754
+ [制御.例外が無い時{
755
+ 式 ...
756
+ [制御.戻る [式[, 式] ...]]
757
+ 式 ...
758
+ }]
759
+ [制御.後始末{
760
+ 式 ...
761
+ }]
762
+ }
763
+ ```
764
+
765
+ ### 日本語のクラス(組)/メソッド(操作)の定義
766
+
767
+ #### クラス(組)の定義
768
+
769
+ クラス(組)を定義するには`組`を使います。クラスの名前は`記号`(`Symbol`)
770
+ で与えます。既に定義済みのクラスを再定義する時は、名前の代わりにクラス
771
+ を返す式を与えてもかまいません。
772
+
773
+ 元のRubyスクリプトの例:
774
+
775
+ ```ruby
776
+ class Foo < Super
777
+ def test
778
+ :
779
+ end
780
+ :
781
+ end
782
+ ```
783
+
784
+ 日本語で書いたRubyスクリプトの例:
785
+
786
+ ```ruby
787
+ 組(:甲, 原型: 親) {
788
+ 定義(:試行) {
789
+ :
790
+ }
791
+ :
792
+ }
793
+ ```
794
+
795
+ 文法:
796
+
797
+ ```
798
+ 組(記号または式[, 原型: 親クラス]) {
799
+ 式 ...
800
+ }
801
+ ```
802
+
803
+ ##### 定義したクラス(組)の参照
804
+
805
+ `記号`で名前を与えてクラス(組)を定義した場合、そのクラスの名前の日本語
806
+ の定数が定義されます。このため定義したクラスの名前で参照することができ
807
+ るようになります。
808
+
809
+ 元のRubyスクリプトの例:
810
+
811
+ ```ruby
812
+ class Foo
813
+ end
814
+
815
+ p Foo
816
+ ```
817
+
818
+ 日本語で書いたRubyスクリプトの例:
819
+
820
+ ```ruby
821
+ 組(:甲) {
822
+ }
823
+
824
+ 点検 甲
825
+ ```
826
+
827
+ #### 特異クラス(特異組)の定義
828
+
829
+ 特異クラス(特異組)を定義するには`特異組`を使います。`特異組`は
830
+ `物`(`Object`)が持つメソッド(操作)です。
831
+
832
+ 元のRubyスクリプトの例:
833
+
834
+ ```ruby
835
+ obj = Object.new
836
+ class << obj
837
+ def test
838
+ :
839
+ end
840
+ :
841
+ end
842
+ ```
843
+
844
+ 日本語で書いたRubyスクリプトの例:
845
+
846
+ ```ruby
847
+ ある物 = 物.新規
848
+ ある物.特異組{
849
+ 定義(:試行) {
850
+ :
851
+ }
852
+ :
853
+ }
854
+ ```
855
+
856
+ 文法:
857
+
858
+ ```
859
+ 式.特異組{
860
+ 式 ...
861
+ }
862
+ ```
863
+
864
+ ##### 特異クラス(特異組)の参照
865
+
866
+ 特異クラス(特異組)を参照するには`特異組`を使います。`特異組`は
867
+ `物`(`Object`)が持つメソッド(操作)です。
868
+
869
+ 元のRubyスクリプトの例:
870
+
871
+ ```ruby
872
+ obj = Object.new
873
+ p obj.singleton_class
874
+ ```
875
+
876
+ 日本語で書いたRubyスクリプトの例:
877
+
878
+ ```ruby
879
+ ある物 = 物.新規
880
+ 点検 ある物.特異組
881
+ ```
882
+
883
+ #### モジュールの定義
884
+
885
+ モジュール(部)を定義するには`部`を使います。モジュールの名前は`記号`
886
+ (`Symbol`)で与えます。既に定義済みのモジュールを再定義する時は、名前の
887
+ 代わりにモジュールを返す式を与えてもかまいません。
888
+
889
+ 元のRubyスクリプトの例:
890
+
891
+ ```ruby
892
+ module Foo
893
+ def test
894
+ :
895
+ end
896
+ :
897
+ end
898
+ ```
899
+
900
+ 日本語で書いたRubyスクリプトの例:
901
+
902
+ ```ruby
903
+ 部(:甲) {
904
+ 定義(:試行) {
905
+ :
906
+ }
907
+ :
908
+ }
909
+ ```
910
+
911
+ 文法:
912
+
913
+ ```
914
+ 部(記号または式) {
915
+ 式 ...
916
+ }
917
+ ```
918
+
919
+ ##### 定義したモジュール(部)の参照
920
+
921
+ `記号`で名前を与えてモジュール(部)を定義した場合、そのモジュールの名前
922
+ の日本語の定数が定義されます。このため定義したモジュールの名前で参照す
923
+ ることができるようになります。
924
+
925
+ 元のRubyスクリプトの例:
926
+
927
+ ```ruby
928
+ module Foo
929
+ end
930
+
931
+ p Foo
932
+ ```
933
+
934
+ 日本語で書いたRubyスクリプトの例:
935
+
936
+ ```ruby
937
+ 部(:甲) {
938
+ }
939
+
940
+ 点検 甲
941
+ ```
942
+ #### メソッド(操作)の定義
943
+
944
+ メソッド(操作)を定義するには`define_method`の別名である`定義`を使いま
945
+ す。
946
+
947
+ 元のRubyスクリプトの例:
948
+
949
+ ```ruby
950
+ def fact(n)
951
+ if (n == 1) then
952
+ 1
953
+ else
954
+ n * fact(n - 1)
955
+ end
956
+ end
957
+ ```
958
+
959
+ 日本語で書いたRubyスクリプトの例:
960
+
961
+ ```ruby
962
+ 定義(:階乗) {|数|
963
+ もし条件が{ 数 == 1 }.であるなら{
964
+ 1
965
+ }.でなければ{
966
+ 数 * 階乗(数 - 1)
967
+ }.である
968
+ }
969
+ ```
970
+
971
+ 文法:
972
+
973
+ ```
974
+ 定義(記号) {[|引数 ...|]
975
+ 式 ...
976
+ }
977
+ ```
978
+
979
+ ##### ブロック(手続き)の実行
980
+
981
+ `define_method`で定義したメソッド(操作)は`yield`でブロック(手続き)を実
982
+ 行することができません。したがって`define_method`の別名である`定義`で
983
+ 定義したメソッドも同様に`yield`が使えません。
984
+
985
+ ブロックの実行はブロック引数を使ってください。
986
+
987
+ 元のRubyスクリプトの例:
988
+
989
+ ```ruby
990
+ def foo
991
+ if (block_given?) then
992
+ yield(1, 2)
993
+ end
994
+ end
995
+ ```
996
+
997
+ 日本語で書いたRubyスクリプトの例:
998
+
999
+ ```ruby
1000
+ 定義(:甲) {|&塊|
1001
+ # yield だけでなく block_given? も使えない
1002
+ もし条件が{ 塊.無値か? }.でなければ{
1003
+ 塊[1, 2]
1004
+ }.である
1005
+ }
1006
+ ```
1007
+
1008
+ ##### return文に相当する制御構造
1009
+
1010
+ Rubyではメソッド(操作)から抜けるのに`return`を使いますが、`return`は予
1011
+ 約語なのでメソッド(操作)のように日本語の別名を定義することができません。
1012
+ 日本語の制御構造で`return`と同様の動作を行うには、メソッドの内側で
1013
+ `領域`を定義し`領域`から`戻る`ことで実現します。
1014
+
1015
+ 元のRubyスクリプトの例:
1016
+
1017
+ ```ruby
1018
+ def foo
1019
+ return 1, 2, 3
1020
+ end
1021
+ ```
1022
+
1023
+ 日本語で書いたRubyスクリプトの例:
1024
+
1025
+ ```ruby
1026
+ 定義(:甲) {
1027
+ 領域{|制御|
1028
+ 制御.戻る 1, 2, 3
1029
+ }
1030
+ }
1031
+ ```
1032
+
1033
+ 文法:
1034
+
1035
+ ```
1036
+ 定義(記号) {[|引数 ...|]
1037
+ 領域{|制御|
1038
+ 式 ...
1039
+ [制御.戻る [式[, 式] ...]]
1040
+ 式 ...
1041
+ }
1042
+ }
1043
+ ```
1044
+
1045
+ ##### 英語のメソッド(操作)の自動定義
1046
+
1047
+ Rubyのいくつかのメソッド(操作)はシステムと連係します。例えばオブジェク
1048
+ ト(`物`)の状態を`p`(`点検`)するのに`inspect`の結果を使ったり、オブジェ
1049
+ クトを文字列に変換するのに`to_s`を使ったりなどです。
1050
+
1051
+ そこで、これらの英語のメソッドを日本語でも定義できるようにしています。
1052
+ 特定の名前の日本語のメソッドを定義すると、その日本語のメソッドを呼び出
1053
+ す英語のメソッドを自動的に定義するようになっています。
1054
+
1055
+ 英語のメソッドが自動的に定義される日本語のメソッドは次のとおりです。
1056
+
1057
+ |メソッド(操作)の分類|日本語のメソッド(操作)|英語のメソッド(操作)|
1058
+ |--------------------|----------------------|--------------------|
1059
+ |変換操作 |`検査` |`inspect` |
1060
+ |変換操作 |`配列に変換` |`to_a` |
1061
+ |変換操作 |`連想配列に変換` |`to_h` |
1062
+ |変換操作 |`文字列に変換` |`to_s` |
1063
+ |変換操作 |`記号に変換` |`to_sym` |
1064
+ |変換操作 |`整数に変換` |`to_i` |
1065
+ |変換操作 |`浮動小数点に変換` |`to_f` |
1066
+ |変換操作 |`有理数に変換` |`to_r` |
1067
+ |変換操作 |`複素数に変換` |`to_c` |
1068
+ |繰り返し操作 |`個別に` |`each` |
1069
+ |繰り返し操作 |`キー毎に` |`each_key` |
1070
+ |繰り返し操作 |`値毎に` |`each_value` |
1071
+ |繰り返し操作 |`対毎に` |`each_pair` |
1072
+ |入れ物の操作 |`取得` |`fetch` |
1073
+ |入れ物の操作 |`格納` |`store` |
1074
+ |入れ物の操作 |`削除` |`delete` |
1075
+ |入れ物の操作 |`大きさ` |`size` |
1076
+ |入れ物の操作 |`長さ` |`length` |
1077
+ |入れ物の操作 |`空か?` |`empty?` |
1078
+ |入れ物の操作 |`キーの一覧` |`keys` |
1079
+ |入れ物の操作 |`キーか?` |`key?` |
1080
+ |入れ物の操作 |`キーを持つか?` |`has_key?` |
1081
+ |入れ物の操作 |`含むか?` |`include?` |
1082
+ |入れ物の操作 |`一員か?` |`member?` |
1083
+
1084
+ #### 特異メソッド(特異操作)の定義
1085
+
1086
+ 特異メソッド(特異操作)を定義するには`define_singleton_method`の別名で
1087
+ ある`特異操作の定義`を使います。`特異操作の定義`は`物`(`Object`)が持つ
1088
+ メソッド(操作)です。
1089
+
1090
+ 元のRubyスクリプトの例:
1091
+
1092
+ ```ruby
1093
+ def foo.test
1094
+ print "this is foo\n"
1095
+ end
1096
+ ```
1097
+
1098
+ 日本語で書いたRubyスクリプトの例:
1099
+
1100
+ ```ruby
1101
+ 甲.特異操作の定義(:試行) {
1102
+ 印字 "これは甲です\n"
1103
+ }
1104
+ ```
1105
+
1106
+ 文法:
1107
+
1108
+ ```
1109
+ 式.特異操作の定義(記号) {[|引数 ...|]
1110
+ 式 ...
1111
+ }
1112
+ ```
1113
+
1114
+ ##### ブロック(手続き)の実行
1115
+
1116
+ 通常のメソッド(操作)と同様です。
1117
+
1118
+ ##### return文に相当する制御構造
1119
+
1120
+ 通常のメソッド(操作)と同様です。
1121
+
1122
+ ##### 英語のメソッド(操作)の自動定義
1123
+
1124
+ 通常のメソッド(操作)と同様です。
1125
+
1126
+ ### メソッド(操作)の呼び出し
1127
+
1128
+ メソッド(操作)の呼び出しは、メソッドの名前が日本語になっただけで元々の
1129
+ Rubyと変わりはありません。
1130
+
1131
+ #### superの日本語の定義は無い
1132
+
1133
+ `super`の日本語の定義は無いので、オーバーライドしたメソッド(操作)を呼
1134
+ び出すにはそのまま`super`を使ってください。
1135
+
1136
+ `super`は予約語なのでメソッドのように日本語の別名を定義することができ
1137
+ ません。`super`を日本語で定義することはメタプログラミングを駆使すれば
1138
+ できなくはないのですが、効率が悪いので実装する意味は無いと判断しました。
1139
+
1140
+ #### ブロック(手続き)の制御
1141
+
1142
+ 単純にブロック(手続き)付きでメソッド(操作)を呼ぶだけなら元々のRubyと変
1143
+ わりはありません。ブロックを日本語で制御(`break`/`next`/`redo`)する場
1144
+ 合は`手続きを渡す`を使います。`手続きを渡す`は`物`(`Object`)が持つメソッ
1145
+ ドです。
1146
+
1147
+ 元のRubyスクリプトの例:
1148
+
1149
+ ```ruby
1150
+ count = 0
1151
+ ARGF.each_line do |line|
1152
+ next if line.strip.empty? # 空行を無視
1153
+ break if (line =~ /eof/) # 終了
1154
+ print line
1155
+ if (line =~ /dup/) then # 再実行×3回
1156
+ if (count < 3) then
1157
+ count += 1
1158
+ redo
1159
+ end
1160
+ end
1161
+ end
1162
+ ```
1163
+
1164
+ 日本語で書いたRubyスクリプトの例:
1165
+
1166
+ ```ruby
1167
+ 回数 = 0
1168
+ スクリプトの入力.手続きを渡す(:行毎に) {|制御, 行|
1169
+ もし条件が{ 行.空白を削る.空か? }.であるなら{ 制御.次へ進む }.である
1170
+ もし条件が{ 行 =~ /終わり/ }.であるなら{ 制御.終わる }.である
1171
+ 印字 行
1172
+ もし条件が{ 行 =~ /繰り返し/ }.であるなら{
1173
+ もし条件が{ 回数 < 3 }.であるなら{
1174
+ 回数 += 1
1175
+ 制御.やり直す
1176
+ }.である
1177
+ }.である
1178
+ }
1179
+ ```
1180
+
1181
+ 文法:
1182
+
1183
+ ```
1184
+ 式.手続きを渡す(記号[, 引数 ...][, 秘密の操作を許可: 真偽値]) {|制御[, 引数 ...]|
1185
+ 式 ...
1186
+ [制御.終わる [式]]
1187
+ [制御.次へ進む [式]]
1188
+ [制御.やり直す]
1189
+ 式 ...
1190
+ }
1191
+ ```
1192
+
1193
+ ### 日本語で書けない機能
1194
+
1195
+ 次の予約語はメソッド(操作)による代替が困難なため日本語で書けません。
1196
+ 必要ならそのまま英語で使ってください。
1197
+
1198
+ - `BEGIN`
1199
+ - `END`
1200
+ - `not` (`!`を使ってください)
1201
+ - `and` (`&&`を使ってください)
1202
+ - `or` (`||`を使ってください)
1203
+ - `super`
1204
+ - `__END__`
1205
+ - `__LINE__`
1206
+ - `__FILE__`
1207
+ - `__ENCODING__`
1208
+
1209
+ 補遺
1210
+ ----
1211
+
1212
+ ### 組み込みライブラリの日本語対応表
1213
+
1214
+ [base.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/base.rb
1215
+ [container.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/container.rb
1216
+ [core.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/core.rb
1217
+ [enum.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/enum.rb
1218
+ [errors.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/errors.rb
1219
+ [globals.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/globals.rb
1220
+ [io.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/io.rb
1221
+ [names.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/names.rb
1222
+ [num.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/num.rb
1223
+ [process.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/process.rb
1224
+ [string.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/string.rb
1225
+ [syntax.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/syntax.rb
1226
+ [sys.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/sys.rb
1227
+ [test_unit.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/test_unit.rb
1228
+ [thread.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/thread.rb
1229
+ [time.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/time.rb
1230
+ [version.rb]:https://github.com/y10k/ruby-japanize/blob/master/lib/japanize/version.rb
1231
+
1232
+ #### 組み込みのグローバル変数(大域変数)の日本語対応表
1233
+
1234
+ |グローバル変数(大域変数)の日本語名|グローバル変数(大域変数)の英語名|グローバル変数(大域変数)の定義 |
1235
+ |----------------------------------|--------------------------------|-----------------------------------|
1236
+ |`$配置された機能の一覧` |`$LOADED_FEATURES` |[`lib/japanize/names.rb`][names.rb]|
1237
+ |`$配置対象の探索経路` |`$LOAD_PATH` |[`lib/japanize/names.rb`][names.rb]|
1238
+ |`$点検中` |`$DEBUG` |[`lib/japanize/names.rb`][names.rb]|
1239
+ |`$冗長` |`$VERBOSE` |[`lib/japanize/names.rb`][names.rb]|
1240
+ |`$プログラムの名前` |`$PROGRAM_NAME` |[`lib/japanize/names.rb`][names.rb]|
1241
+ |`$ファイル名` |`$FILENAME` |[`lib/japanize/names.rb`][names.rb]|
1242
+ |`$安全度` |`$SAFE` |[`lib/japanize/names.rb`][names.rb]|
1243
+ |`$標準入力` |`$stdin` |[`lib/japanize/names.rb`][names.rb]|
1244
+ |`$標準出力` |`$stdout` |[`lib/japanize/names.rb`][names.rb]|
1245
+ |`$標準エラー出力` |`$stderr` |[`lib/japanize/names.rb`][names.rb]|
1246
+
1247
+ #### 組み込みのオブジェクト(物)の日本語対応表
1248
+
1249
+ |オブジェクト(物)の日本語名|オブジェクト(物)の英語名|オブジェクト(物)の定義 |
1250
+ |--------------------------|------------------------|---------------------------------------|
1251
+ |`自分` |`self` |[`lib/japanize/core.rb`][core.rb] |
1252
+ |`無値` |`nil` |[`lib/japanize/names.rb`][names.rb] |
1253
+ |`真値` |`true` |[`lib/japanize/names.rb`][names.rb] |
1254
+ |`偽値` |`false` |[`lib/japanize/names.rb`][names.rb] |
1255
+ |`スクリプトの引数` |`ARGV` |[`lib/japanize/names.rb`][names.rb] |
1256
+ |`スクリプトの入力` |`ARGF` |[`lib/japanize/globals.rb`][globals.rb]|
1257
+ |`スクリプトの資料` |`DATA` |[`lib/japanize/names.rb`][names.rb] |
1258
+ |`環境変数` |`ENV` |[`lib/japanize/globals.rb`][globals.rb]|
1259
+ |`標準エラー出力` |`STDERR` |[`lib/japanize/names.rb`][names.rb] |
1260
+ |`標準入力` |`STDIN` |[`lib/japanize/names.rb`][names.rb] |
1261
+ |`標準出力` |`STDOUT` |[`lib/japanize/names.rb`][names.rb] |
1262
+ |`最上位の束縛` |`TOPLEVEL_BINDING` |[`lib/japanize/names.rb`][names.rb] |
1263
+
1264
+ #### 組み込みのクラス(組)の日本語対応表
1265
+
1266
+ |クラス(組)の日本語名 |クラス(組)の英語名 |クラス(組)の定義 |
1267
+ |------------------------------|--------------------------------|-------------------------------------------|
1268
+ |`物の土台` |`BasicObject` |[`lib/japanize/base.rb`][base.rb] |
1269
+ |`物` |`Object` |[`lib/japanize/base.rb`][base.rb] |
1270
+ |`配列` |`Array` |[`lib/japanize/container.rb`][container.rb]|
1271
+ |`束縛` |`Binding` |[`lib/japanize/sys.rb`][sys.rb] |
1272
+ |`ディレクトリ` |`Dir` |[`lib/japanize/io.rb`][io.rb] |
1273
+ |`文字符号化方式` |`Encoding` |[`lib/japanize/string.rb`][string.rb] |
1274
+ |`文字符号化方式::変換器` |`Encoding::Converter` |[`lib/japanize/string.rb`][string.rb] |
1275
+ |`列挙` |`Enumerator` |[`lib/japanize/enum.rb`][enum.rb] |
1276
+ |`列挙::等差数列` |`Enumerator::ArithmeticSequence`|[`lib/japanize/enum.rb`][enum.rb] |
1277
+ |`列挙::遅延評価` |`Enumerator::Lazy` |[`lib/japanize/enum.rb`][enum.rb] |
1278
+ |`偽値の組` |`FalseClass` |[`lib/japanize/base.rb`][base.rb] |
1279
+ |`ファイバー` |`Fiber` |[`lib/japanize/thread.rb`][thread.rb] |
1280
+ |`ファイル::状態` |`File::Stat` |[`lib/japanize/io.rb`][io.rb] |
1281
+ |`連想配列` |`Hash` |[`lib/japanize/container.rb`][container.rb]|
1282
+ |`入出力` |`IO` |[`lib/japanize/io.rb`][io.rb] |
1283
+ |`ファイル` |`File` |[`lib/japanize/io.rb`][io.rb] |
1284
+ |`正規表現が一致した結果` |`MatchData` |[`lib/japanize/string.rb`][string.rb] |
1285
+ |`操作` |`Method` |[`lib/japanize/sys.rb`][sys.rb] |
1286
+ |`部` |`Module` |[`lib/japanize/base.rb`][base.rb] |
1287
+ |`組` |`Class` |[`lib/japanize/base.rb`][base.rb] |
1288
+ |`無値の組` |`NilClass` |[`lib/japanize/base.rb`][base.rb] |
1289
+ |`数値` |`Numeric` |[`lib/japanize/num.rb`][num.rb] |
1290
+ |`複素数` |`Complex` |[`lib/japanize/num.rb`][num.rb] |
1291
+ |`浮動小数点` |`Float` |[`lib/japanize/num.rb`][num.rb] |
1292
+ |`整数` |`Integer` |[`lib/japanize/num.rb`][num.rb] |
1293
+ |`有理数` |`Rational` |[`lib/japanize/num.rb`][num.rb] |
1294
+ |`物の空間::弱参照の連想配列` |`ObjectSpace::WeakMap` |[`lib/japanize/sys.rb`][sys.rb] |
1295
+ |`手続き型` |`Proc` |[`lib/japanize/sys.rb`][sys.rb] |
1296
+ |`プロセス::状態` |`Process::Status` |[`lib/japanize/process.rb`][process.rb] |
1297
+ |`プロセス::積算時間` |`Process::Tms` |[`lib/japanize/process.rb`][process.rb] |
1298
+ |`疑似乱数生成器` |`Random` |[`lib/japanize/num.rb`][num.rb] |
1299
+ |`範囲` |`Range` |[`lib/japanize/container.rb`][container.rb]|
1300
+ |`正規表現` |`Regexp` |[`lib/japanize/string.rb`][string.rb] |
1301
+ |`文字列` |`String` |[`lib/japanize/string.rb`][string.rb] |
1302
+ |`構造体` |`Struct` |[`lib/japanize/container.rb`][container.rb]|
1303
+ |`記号` |`Symbol` |[`lib/japanize/string.rb`][string.rb] |
1304
+ |`スレッド` |`Thread` |[`lib/japanize/thread.rb`][thread.rb] |
1305
+ |`スレッド::呼び出し履歴::場所`|`Thread::Backtrace::Location` |[`lib/japanize/thread.rb`][thread.rb] |
1306
+ |`スレッド::条件変数` |`Thread::ConditionVariable` |[`lib/japanize/thread.rb`][thread.rb] |
1307
+ |`スレッド::相互排他制御` |`Thread::Mutex` |[`lib/japanize/thread.rb`][thread.rb] |
1308
+ |`スレッド::待ち行列` |`Thread::Queue` |[`lib/japanize/thread.rb`][thread.rb] |
1309
+ |`スレッド::上限付き待ち行列` |`Thread::SizedQueue` |[`lib/japanize/thread.rb`][thread.rb] |
1310
+ |`スレッドの群れ` |`ThreadGroup` |[`lib/japanize/thread.rb`][thread.rb] |
1311
+ |`時刻` |`Time` |[`lib/japanize/time.rb`][time.rb] |
1312
+ |`発生事象の追跡` |`TracePoint` |[`lib/japanize/sys.rb`][sys.rb] |
1313
+ |`真値の組` |`TrueClass` |[`lib/japanize/base.rb`][base.rb] |
1314
+ |`未束縛の操作` |`UnboundMethod` |[`lib/japanize/sys.rb`][sys.rb] |
1315
+
1316
+ 次のクラスは適切な日本語名称がないので定義していません。
1317
+ 英語のままで使ってください
1318
+
1319
+ - `RubyVM`
1320
+
1321
+ #### 組み込みのモジュール(部)の日本語対応表
1322
+
1323
+ |モジュール(部)の日本語名 |モジュール(部)の英語名|モジュール(部)の定義 |
1324
+ |------------------------------------|----------------------|---------------------------------------|
1325
+ |`比較できる` |`Comparable` |[`lib/japanize/num.rb`][num.rb] |
1326
+ |`列挙できる` |`Enumerable` |[`lib/japanize/enum.rb`][enum.rb] |
1327
+ |`ファイル::定数` |`File::Constants` |[`lib/japanize/io.rb`][io.rb] |
1328
+ |`ファイルの検査` |`FileTest` |[`lib/japanize/io.rb`][io.rb] |
1329
+ |`ゴミ集め` |`GC` |[`lib/japanize/sys.rb`][sys.rb] |
1330
+ |`ゴミ集め::統計情報` |`GC::Profiler` |[`lib/japanize/sys.rb`][sys.rb] |
1331
+ |`入出力::読み込み待ちのため失敗` |`IO::WaitReadable` |[`lib/japanize/io.rb`][io.rb] |
1332
+ |`入出力::書き込み待ちのため失敗` |`IO::WaitWritable` |[`lib/japanize/io.rb`][io.rb] |
1333
+ |`核` |`Kernel` |[`lib/japanize/base.rb`][base.rb] |
1334
+ |`直列化` |`Marshal` |[`lib/japanize/sys.rb`][sys.rb] |
1335
+ |`数学` |`Math` |[`lib/japanize/num.rb`][num.rb] |
1336
+ |`物の空間` |`ObjectSpace` |[`lib/japanize/sys.rb`][sys.rb] |
1337
+ |`プロセス` |`Process` |[`lib/japanize/process.rb`][process.rb]|
1338
+ |`プロセス::グループ識別番号` |`Process::GID` |[`lib/japanize/process.rb`][process.rb]|
1339
+ |`プロセス::識別番号のシステムコール`|`Process::Sys` |[`lib/japanize/process.rb`][process.rb]|
1340
+ |`プロセス::ユーザ識別番号` |`Process::UID` |[`lib/japanize/process.rb`][process.rb]|
1341
+ |`シグナル` |`Signal` |[`lib/japanize/process.rb`][process.rb]|
1342
+
1343
+ 次のモジュールは適切な日本語名称がないので定義していません。
1344
+ 英語のままで使ってください
1345
+
1346
+ - `Errno`
1347
+
1348
+ #### 組み込みの例外の日本語対応表
1349
+
1350
+ |例外の日本語名 |例外の英語名 |例外の定義 |
1351
+ |--------------------------------------------------|------------------------------------|-------------------------------------|
1352
+ |`例外` |`Exception` |[`lib/japanize/base.rb`][base.rb] |
1353
+ |`記憶領域不足のため失敗` |`NoMemoryError` |[`lib/japanize/names.rb`][names.rb] |
1354
+ |`スクリプトの失敗` |`ScriptError` |[`lib/japanize/names.rb`][names.rb] |
1355
+ |`配置の失敗` |`LoadError` |[`lib/japanize/errors.rb`][errors.rb]|
1356
+ |`未実装のため失敗` |`NotImplementedError` |[`lib/japanize/names.rb`][names.rb] |
1357
+ |`文法誤りのため失敗` |`SyntaxError` |[`lib/japanize/names.rb`][names.rb] |
1358
+ |`安全を侵害するため失敗` |`SecurityError` |[`lib/japanize/names.rb`][names.rb] |
1359
+ |`シグナルの例外` |`SignalException` |[`lib/japanize/errors.rb`][errors.rb]|
1360
+ |`割り込み` |`Interrupt` |[`lib/japanize/names.rb`][names.rb] |
1361
+ |`標準的な失敗` |`StandardError` |[`lib/japanize/names.rb`][names.rb] |
1362
+ |`引数が誤っているため失敗` |`ArgumentError` |[`lib/japanize/names.rb`][names.rb] |
1363
+ |`脱出を捕捉できないため失敗` |`UncaughtThrowError` |[`lib/japanize/errors.rb`][errors.rb]|
1364
+ |`文字符号化方式の失敗` |`EncodingError` |[`lib/japanize/names.rb`][names.rb] |
1365
+ |`文字符号化方式::互換性がないため失敗` |`Encoding::CompatibilityError` |[`lib/japanize/names.rb`][names.rb] |
1366
+ |`文字符号化方式::変換器が存在しないため失敗` |`Encoding::ConverterNotFoundError` |[`lib/japanize/names.rb`][names.rb] |
1367
+ |`文字符号化方式::バイト列が不正なため失敗` |`Encoding::InvalidByteSequenceError`|[`lib/japanize/errors.rb`][errors.rb]|
1368
+ |`文字符号化方式::変換後の文字が存在しないため失敗`|`Encoding::UndefinedConversionError`|[`lib/japanize/errors.rb`][errors.rb]|
1369
+ |`ファイバーの失敗` |`FiberError` |[`lib/japanize/names.rb`][names.rb] |
1370
+ |`入出力の失敗` |`IOError` |[`lib/japanize/names.rb`][names.rb] |
1371
+ |`ファイル終端のため失敗` |`EOFError` |[`lib/japanize/names.rb`][names.rb] |
1372
+ |`添字が範囲外のため失敗` |`IndexError` |[`lib/japanize/names.rb`][names.rb] |
1373
+ |`キーの照合に失敗` |`KeyError` |[`lib/japanize/errors.rb`][errors.rb]|
1374
+ |`繰り返しの停止` |`StopIteration` |[`lib/japanize/errors.rb`][errors.rb]|
1375
+ |`待ち行列が閉鎖済みのため失敗` |`ClosedQueueError` |[`lib/japanize/names.rb`][names.rb] |
1376
+ |`局所的な跳躍に失敗` |`LocalJumpError` |[`lib/japanize/errors.rb`][errors.rb]|
1377
+ |`数学::定義域外のため失敗` |`Math::DomainError` |[`lib/japanize/names.rb`][names.rb] |
1378
+ |`名前解決に失敗` |`NameError` |[`lib/japanize/errors.rb`][errors.rb]|
1379
+ |`操作が無いため失敗` |`NoMethodError` |[`lib/japanize/errors.rb`][errors.rb]|
1380
+ |`範囲外のため失敗` |`RangeError` |[`lib/japanize/names.rb`][names.rb] |
1381
+ |`浮動小数点の定義域外のため失敗` |`FloatDomainError` |[`lib/japanize/names.rb`][names.rb] |
1382
+ |`正規表現の失敗` |`RegexpError` |[`lib/japanize/names.rb`][names.rb] |
1383
+ |`実行時の失敗` |`RuntimeError` |[`lib/japanize/names.rb`][names.rb] |
1384
+ |`凍結済みのため失敗` |`FrozenError` |[`lib/japanize/names.rb`][names.rb] |
1385
+ |`システムコールの失敗` |`SystemCallError` |[`lib/japanize/errors.rb`][errors.rb]|
1386
+ |`スレッドの失敗` |`ThreadError` |[`lib/japanize/names.rb`][names.rb] |
1387
+ |`型が合わないため失敗` |`TypeError` |[`lib/japanize/names.rb`][names.rb] |
1388
+ |`零除算のため失敗` |`ZeroDivisionError` |[`lib/japanize/names.rb`][names.rb] |
1389
+ |`システムの終了` |`SystemExit` |[`lib/japanize/errors.rb`][errors.rb]|
1390
+ |`システムのスタックが超過したため失敗` |`SystemStackError` |[`lib/japanize/names.rb`][names.rb] |
1391
+
1392
+ 次の例外は適切な日本語名称がないので定義していません。
1393
+ 英語のままで使ってください
1394
+
1395
+ - `Errno::*`
1396
+
1397
+ ### 代表的な用語の日本語と英語の対応表
1398
+
1399
+ |日本語 |英語 |
1400
+ |----------|----------|
1401
+ |引数 |args |
1402
+ |塊 |block |
1403
+ |組, 生成元|class |
1404
+ |生成物 |instance |
1405
+ |操作 |method |
1406
+ |部 |module |
1407
+ |物 |object |
1408
+ |原型 |superclass|
1409
+
1410
+ ### どうしても日本語に直せなかったカタカナ語の一覧表
1411
+
1412
+ |カタカナ語 |英語 |備考 |
1413
+ |------------------------------------|---------------- |------------------------------------|
1414
+ |グリニッジ標準時 |GMT |固有名詞 |
1415
+ |ネイピア数 |Napier's constant|固有名詞 |
1416
+ |XMLスキーマ |XML schema |固有名詞 |
1417
+ |アスキー |ascii |固有名詞 |
1418
+ |バイナリ |binary |概念を一言で表現できなかった |
1419
+ |ビット |bit |概念を一言で表現できなかった |
1420
+ |バイト |byte |概念を一言で表現できなかった |
1421
+ |(オペレーティングシステムの)コマンド|command |概念を一言で表現できなかった |
1422
+ |カリー化 |curry |概念を一言で表現できなかった |
1423
+ |データ領域 |data |概念を一言で表現できなかった |
1424
+ |ディレクトリ |directory |概念を一言で表現できなかった |
1425
+ |ファイバー |fiber |概念を一言で表現できなかった |
1426
+ |ファイル |file |概念を一言で表現できなかった |
1427
+ |ファイルシステム |filesystem |概念を一言で表現できなかった |
1428
+ |書記素クラスタ |grapheme cluster |固有名詞 |
1429
+ |(オペレーティングシステムの)グループ|group |概念を一言で表現できなかった |
1430
+ |ハッシュ値 |hash |概念を一言で表現できなかった |
1431
+ |キー |key |直訳では実際の用途を表現できなかった|
1432
+ |ロケール |locale |概念を一言で表現できなかった |
1433
+ |電子メール |mail |固有名詞 |
1434
+ |マイクロ |micro |SI接頭辞 |
1435
+ |ナノ |nano |SI接頭辞 |
1436
+ |(オペレーティングシステムの)プロセス|process |概念を一言で表現できなかった |
1437
+ |プログラム |program |概念を一言で表現できなかった |
1438
+ |スクリプト |script |概念を一言で表現できなかった |
1439
+ |(オペレーティングシステムの)シグナル|signal |概念を一言で表現できなかった |
1440
+ |ソケット |socket |概念を一言で表現できなかった |
1441
+ |スタック |stack |概念を一言で表現できなかった |
1442
+ |標準エラー出力 |stderr |固有名詞 |
1443
+ |システム |system |概念を一言で表現できなかった |
1444
+ |システムコール |system call |概念を一言で表現できなかった |
1445
+ |スレッド |thread |概念を一言で表現できなかった |
1446
+ |ユニコード |unicode |固有名詞 |
1447
+ |(オペレーティングシステムの)ユーザ |user |概念を一言で表現できなかった |
1448
+
1449
+ 貢献方法
1450
+ --------
1451
+
1452
+ 問題報告やプルリクはGithubの<https://github.com/y10k/ruby-japanize>で
1453
+ 受け付けています。
1454
+
1455
+ ライセンス
1456
+ ----------
1457
+
1458
+ このgemは[MIT License](https://opensource.org/licenses/MIT)ライセンス
1459
+ の元でオープンソースとして提供されます。