Skip to content

Commit ff80a5a

Browse files
committed
Update
1 parent 7a48947 commit ff80a5a

File tree

2 files changed

+101
-73
lines changed

2 files changed

+101
-73
lines changed

doc/vim9class.jax

Lines changed: 52 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ new() メソッドを使用して、このクラスからオブジェクトを
118118

119119

120120
オブジェクト変数の書き込みアクセス ~
121-
121+
*read-only-variable*
122122
では、オブジェクト変数を直接変更してみよう: >
123123
124124
pos.lnum = 9
@@ -133,7 +133,7 @@ new() メソッドを使用して、このクラスからオブジェクトを
133133
方法である。ほとんどの場合、値を使用しても問題はないが、値を設定すると注意が必
134134
要な副作用が発生する可能性がある。この場合、SetLnum() メソッドは行番号が有効か
135135
どうかをチェックし、エラーを返すか、最も近い有効な値を使用する。
136-
*:public* *E1331*
136+
*:public* *public-variable* *E1331*
137137
副作用を気にせず、オブジェクト変数をいつでも変更できるようにしたい場合は、オブ
138138
ジェクト変数をパブリックにすることができる: >
139139
@@ -150,17 +150,17 @@ new() メソッドを使用して、このクラスからオブジェクトを
150150
*E1376*
151151
クラス名を使用してオブジェクト変数にアクセスすることはできない。
152152

153-
プライベート変数 ~
154-
*private-variable* *E1332* *E1333*
155-
一方、オブジェクト変数を直接読み取られたくない場合は、オブジェクト変数をプライ
156-
ベートにすることができる。これは、名前の前にアンダースコアを付けることによって
157-
行う: >
153+
Protected 変数 ~
154+
*protected-variable* *E1332* *E1333*
155+
一方、オブジェクト変数をクラスまたはそのサブクラスの外部から直接読み取られたく
156+
ない場合は、オブジェクト変数を保護することができる。これは、名前の前にアンダー
157+
スコアを付けることによって行われる: >
158158
159159
this._lnum: number
160160
this._col number
161161
162-
次に、プライベート変数の値を取得するメソッドを提供する必要がある。これらは一般
163-
にゲッターと呼ばれる。"Get" で始まる名前を使用することをお勧めする: >
162+
次に、protected 変数の値を取得するメソッドを提供する必要がある。これらは一般に
163+
ゲッターと呼ばれる。"Get" で始まる名前を使用することをお勧めする: >
164164
165165
def GetLnum(): number
166166
return this._lnum
@@ -180,10 +180,10 @@ new() メソッドを使用して、このクラスからオブジェクトを
180180
return this._lnum
181181
enddef
182182
<
183-
プライベートメソッド ~
183+
Protected メソッド ~
184184
*private-method* *E1366*
185185
オブジェクトメソッドを同じクラスの他のメソッドからのみアクセス可能にし、クラス
186-
の外部からは使用しないようにしたい場合は、オブジェクトメソッドをプライベートに
186+
の外部からは使用しないようにしたい場合は、オブジェクトメソッドを protected に
187187
できる。これを行うには、メソッド名の前にアンダースコアを付ける: >
188188
189189
class SomeClass
@@ -195,7 +195,7 @@ new() メソッドを使用して、このクラスからオブジェクトを
195195
enddef
196196
endclass
197197
<
198-
クラス外のプライベートメソッドにアクセスすると、エラーが発生する (上記のクラス
198+
クラス外の protected メソッドにアクセスすると、エラーが発生する (上記のクラス
199199
を使用した場合): >
200200
201201
var a = SomeClass.new()
@@ -288,8 +288,8 @@ new() メソッドを定義するときは、戻り値の型を指定しない
288288
にアクセスすることはできない。
289289

290290
オブジェクトメンバと同様に、名前の最初の文字としてアンダースコアを使用すること
291-
でアクセスをプライベートにすることができ、プリフィックス "public" を付けること
292-
でパブリックにすることができる: >
291+
でアクセスを保護することができ、プリフィックス "public" を付けることでアクセス
292+
を公開することができる: >
293293
294294
class OtherThing
295295
static total: number # 誰でも読み取り可、クラスのみ書き込み可
@@ -319,7 +319,7 @@ new() メソッドを定義するときは、戻り値の型を指定しない
319319
必要がある。
320320

321321
オブジェクトメソッドと同様に、メソッド名の最初の文字としてアンダースコアを使用
322-
することで、アクセスをプライベートにすることができる: >
322+
することで、アクセスを protected にすることができる: >
323323
324324
class OtherThing
325325
static def _Foo()
@@ -469,9 +469,9 @@ Shape, Square および Triangle を使用した上記の例は、オブジェ
469469
<
470470
*E1378* *E1379* *E1380* *E1387*
471471
インターフェイスには、オブジェクトメソッドと読み取り専用のオブジェクト変数のみ
472-
を含めることができる。インターフェイスには、読み書き可能なプライベートオブジェ
473-
クト変数、プライベートオブジェクトメソッド、クラス変数、およびクラスメソッドを
474-
含めることはできない
472+
を含めることができる。インターフェイスには、読み書き可能または protected オブ
473+
ジェクト変数、protected オブジェクトメソッド、クラス変数、およびクラスメソッド
474+
を含めることはできまない
475475

476476
インターフェイスは、"extends" を使用して別のインターフェイスを拡張できる。サブ
477477
インターフェイスは、スーパーインターフェイスからすべてのインスタンス変数とメ
@@ -519,7 +519,7 @@ Shape, Square および Triangle を使用した上記の例は、オブジェ
519519
specifies SomeInterface
520520
< *E1355* *E1369*
521521
各変数とメソッドの名前は 1 回だけ使用できる。同じ名前で異なる型の引数を持つメ
522-
ソッドを定義することはできない。パブリックとプライベートのメンバー変数を同じ名
522+
ソッドを定義することはできない。パブリックと protected のメンバー変数を同じ名
523523
前で使用することはできない。スーパークラスで使用したオブジェクト変数名を子クラ
524524
スで再利用することはできない。
525525

@@ -552,8 +552,8 @@ Shape, Square および Triangle を使用した上記の例は、オブジェ
552552
ラスのメソッドは、先頭に "super." を付けることで呼び出すことができる。
553553

554554
*E1377*
555-
子クラスのメソッド (パブリックまたはプライベート) のアクセスレベルは、スーパー
556-
クラスと同じである必要がある
555+
子クラスのメソッド (パブリックまたは protected) のアクセスレベルは、スーパーク
556+
ラスと同じである必要がある
557557

558558
基底クラスの他のオブジェクトメソッドは、子クラスによって引き継がれる。
559559

@@ -590,22 +590,22 @@ Shape, Square および Triangle を使用した上記の例は、オブジェ
590590
*E1318* *E1325* *E1388*
591591
クラス内では、`:class``:endclass` の間に、次の項目を含めることができる:
592592
- オブジェクト変数宣言: >
593-
this._privateVariableName: memberType
593+
this._protectedVariableName: memberType
594594
this.readonlyVariableName: memberType
595595
public this.readwriteVariableName: memberType
596596
- クラス変数宣言: >
597-
static _privateClassVariableName: memberType
597+
static _protectedClassVariableName: memberType
598598
static readonlyClassVariableName: memberType
599599
static public readwriteClassVariableName: memberType
600600
- コンストラクタメソッド: >
601601
def new(arguments)
602602
def newName(arguments)
603603
- クラスメソッド: >
604604
static def SomeMethod(arguments)
605-
static def _PrivateMethod(arguments)
605+
static def _ProtectedMethod(arguments)
606606
- オブジェクトメソッド: >
607607
def SomeMethod(arguments)
608-
def _PrivateMethod(arguments)
608+
def _ProtectedMethod(arguments)
609609
610610
オブジェクト変数の場合は、型を指定する必要がある。最善の方法は、": {type}" を
611611
使用してこれを明示的に行うことである。単純な型の場合、"= 123" などの初期化子を
@@ -696,8 +696,8 @@ Note ここでは "v:none" 以外のデフォルト値を使用できないこ
696696
ト変数を初期化したい場合は、それらが宣言されている場所で実行すること。この方法
697697
では、デフォルト値を 1 箇所で確認するだけで済む。
698698

699-
すべてのオブジェクト変数はデフォルトコンストラクタで使用され、プライベートアク
700-
セスのコンストラクタも使用される
699+
すべてのオブジェクト変数は、アクセス保護されたものを含め、デフォルトのコンスト
700+
ラクタで使用されます
701701

702702
クラスが別のクラスを拡張する場合、そのクラスのオブジェクト変数が最初に来る。
703703

@@ -943,6 +943,18 @@ ClassName() メソッドはなく、ClassName というクラス内の別名の
943943
なり混乱する。
944944

945945

946+
Vim9class のアクセスモード ~
947+
*vim9-access-modes*
948+
The variable access modes, and their meaning, supported by Vim9class are
949+
Vim9class でサポートされる変数アクセスモードとその意味は、
950+
|public-variable| どこからでも読み書きできる
951+
|read-only-variable| どこからでも読み取れ、クラスおよびサブクラス内
952+
から書き込みできる
953+
|protected-variable| クラスおよびサブクラス内から読み書きできる
954+
955+
メソッドのアクセスモードは似ているが、読み取り専用モードがない。
956+
957+
946958
オブジェクト変数へのデフォルトの読み取りアクセス ~
947959

948960
ユーザーの中には、オブジェクト変数のアクセスルールが非対称であると指摘する人も
@@ -958,35 +970,38 @@ ClassName() メソッドはなく、ClassName というクラス内の別名の
958970
の少ないコードを作成するのに役立つ。
959971

960972

961-
アンダースコアを使用してオブジェクト変数をプライベートにする ~
973+
アンダースコアを使用してオブジェクト変数を protected にする ~
962974

963975
オブジェクト変数がプライベートの場合、クラス内 (およびサブクラス内) でのみ読み
964-
取りおよび変更でき、クラス外では使用できない。アンダースコアを先頭に付けること
965-
は、それを可視化する簡単な方法である。さまざまなプログラミング言語がこれを推奨
966-
している。
976+
取りおよび変更でき、クラス外では使用できない。
977+
978+
オブジェクト変数が保護されている場合、その変数はクラス内 (およびサブクラス内)
979+
でのみ読み取りおよび変更でき、クラス外では使用できない。アンダースコアを先頭に
980+
付けることは、それを可視化する簡単な方法である。さまざまなプログラミング言語が
981+
これを推奨している。
967982

968983
もし気が変わって、クラス外からオブジェクト変数にアクセスできるようにしたい場合
969984
は、すべてのアンダースコアを削除する必要がある。
970985
名前はクラス (およびサブクラス) の中にしか現れないため、見つけて変更するのは簡
971986
単である。
972987

973988
逆の方法ははるかに困難である: クラス内のオブジェクト変数の先頭にアンダースコア
974-
を追加してプライベートにすることは簡単にできるが、他の場所で使用されている場合
989+
を追加して protected にすることは簡単にできるが、他の場所で使用されている場合
975990
は追跡して変更する必要がある。"set" メソッド呼び出しにする必要がある場合があ
976991
る。これは、アクセスを奪うには、そのアクセスが存在するすべての場所に対して作業
977992
を行う必要があるという現実の問題を反映している。
978993

979-
別の方法としては、"public" がアクセスを別の方向に変更するのと同様に、"private"
980-
キーワードを使用することもできる。まぁ、これはキーワードの数を減らすためなのだ
981-
994+
別の方法としては、"public" がアクセスを別の方向に変更するのと同様に、
995+
"protected" キーワードを使用することもできる。まぁ、これはキーワードの数を減ら
996+
すためなのだが
982997

983998

984-
オブジェクト変数に protected はない ~
999+
オブジェクト変数に private はない ~
9851000

9861001
一部の言語では、オブジェクト変数へのアクセスを制御するいくつかの方法が提供され
9871002
ている。
9881003
最もよく知られているのは "protected" だが、その意味は言語によって異なる。他に
989-
は "shared", "private" さらには "friend" もある。
1004+
は "shared", "private", "package" さらには "friend" もある。
9901005

9911006
これらのルールは人生をより困難にする。多くの人が同じ複雑なコードに取り組むプロ
9921007
ジェクトでは、ミスを犯しやすいので、これは当然のことだ。特に、クラスモデルに対

0 commit comments

Comments
 (0)