@@ -118,7 +118,7 @@ new() メソッドを使用して、このクラスからオブジェクトを
118
118
119
119
120
120
オブジェクト変数の書き込みアクセス ~
121
-
121
+ *read-only-variable*
122
122
では、オブジェクト変数を直接変更してみよう: >
123
123
124
124
pos.lnum = 9
@@ -133,7 +133,7 @@ new() メソッドを使用して、このクラスからオブジェクトを
133
133
方法である。ほとんどの場合、値を使用しても問題はないが、値を設定すると注意が必
134
134
要な副作用が発生する可能性がある。この場合、SetLnum() メソッドは行番号が有効か
135
135
どうかをチェックし、エラーを返すか、最も近い有効な値を使用する。
136
- *:public* *E1331*
136
+ *:public* *public-variable * *E1331*
137
137
副作用を気にせず、オブジェクト変数をいつでも変更できるようにしたい場合は、オブ
138
138
ジェクト変数をパブリックにすることができる: >
139
139
@@ -150,17 +150,17 @@ new() メソッドを使用して、このクラスからオブジェクトを
150
150
*E1376*
151
151
クラス名を使用してオブジェクト変数にアクセスすることはできない。
152
152
153
- プライベート変数 ~
154
- *private -variable* *E1332* *E1333*
155
- 一方、オブジェクト変数を直接読み取られたくない場合は、オブジェクト変数をプライ
156
- ベートにすることができる 。これは、名前の前にアンダースコアを付けることによって
157
- 行う : >
153
+ Protected 変数 ~
154
+ *protected -variable* *E1332* *E1333*
155
+ 一方、オブジェクト変数をクラスまたはそのサブクラスの外部から直接読み取られたく
156
+ ない場合は、オブジェクト変数を保護することができる 。これは、名前の前にアンダー
157
+ スコアを付けることによって行われる : >
158
158
159
159
this._lnum: number
160
160
this._col number
161
161
162
- 次に、プライベート変数の値を取得するメソッドを提供する必要がある。これらは一般
163
- にゲッターと呼ばれる 。"Get" で始まる名前を使用することをお勧めする: >
162
+ 次に、protected 変数の値を取得するメソッドを提供する必要がある。これらは一般に
163
+ ゲッターと呼ばれる 。"Get" で始まる名前を使用することをお勧めする: >
164
164
165
165
def GetLnum(): number
166
166
return this._lnum
@@ -180,10 +180,10 @@ new() メソッドを使用して、このクラスからオブジェクトを
180
180
return this._lnum
181
181
enddef
182
182
<
183
- プライベートメソッド ~
183
+ Protected メソッド ~
184
184
*private-method* *E1366*
185
185
オブジェクトメソッドを同じクラスの他のメソッドからのみアクセス可能にし、クラス
186
- の外部からは使用しないようにしたい場合は、オブジェクトメソッドをプライベートに
186
+ の外部からは使用しないようにしたい場合は、オブジェクトメソッドを protected に
187
187
できる。これを行うには、メソッド名の前にアンダースコアを付ける: >
188
188
189
189
class SomeClass
@@ -195,7 +195,7 @@ new() メソッドを使用して、このクラスからオブジェクトを
195
195
enddef
196
196
endclass
197
197
<
198
- クラス外のプライベートメソッドにアクセスすると 、エラーが発生する (上記のクラス
198
+ クラス外の protected メソッドにアクセスすると 、エラーが発生する (上記のクラス
199
199
を使用した場合): >
200
200
201
201
var a = SomeClass.new()
@@ -288,8 +288,8 @@ new() メソッドを定義するときは、戻り値の型を指定しない
288
288
にアクセスすることはできない。
289
289
290
290
オブジェクトメンバと同様に、名前の最初の文字としてアンダースコアを使用すること
291
- でアクセスをプライベートにすることができ 、プリフィックス "public" を付けること
292
- でパブリックにすることができる : >
291
+ でアクセスを保護することができ 、プリフィックス "public" を付けることでアクセス
292
+ を公開することができる : >
293
293
294
294
class OtherThing
295
295
static total: number # 誰でも読み取り可、クラスのみ書き込み可
@@ -319,7 +319,7 @@ new() メソッドを定義するときは、戻り値の型を指定しない
319
319
必要がある。
320
320
321
321
オブジェクトメソッドと同様に、メソッド名の最初の文字としてアンダースコアを使用
322
- することで、アクセスをプライベートにすることができる : >
322
+ することで、アクセスを protected にすることができる : >
323
323
324
324
class OtherThing
325
325
static def _Foo()
@@ -469,9 +469,9 @@ Shape, Square および Triangle を使用した上記の例は、オブジェ
469
469
<
470
470
*E1378* *E1379* *E1380* *E1387*
471
471
インターフェイスには、オブジェクトメソッドと読み取り専用のオブジェクト変数のみ
472
- を含めることができる。インターフェイスには、読み書き可能なプライベートオブジェ
473
- クト変数、プライベートオブジェクトメソッド 、クラス変数、およびクラスメソッドを
474
- 含めることはできない 。
472
+ を含めることができる。インターフェイスには、読み書き可能または protected オブ
473
+ ジェクト変数、protected オブジェクトメソッド 、クラス変数、およびクラスメソッド
474
+ を含めることはできまない 。
475
475
476
476
インターフェイスは、"extends" を使用して別のインターフェイスを拡張できる。サブ
477
477
インターフェイスは、スーパーインターフェイスからすべてのインスタンス変数とメ
@@ -519,7 +519,7 @@ Shape, Square および Triangle を使用した上記の例は、オブジェ
519
519
specifies SomeInterface
520
520
< *E1355* *E1369*
521
521
各変数とメソッドの名前は 1 回だけ使用できる。同じ名前で異なる型の引数を持つメ
522
- ソッドを定義することはできない。パブリックとプライベートのメンバー変数を同じ名
522
+ ソッドを定義することはできない。パブリックと protected のメンバー変数を同じ名
523
523
前で使用することはできない。スーパークラスで使用したオブジェクト変数名を子クラ
524
524
スで再利用することはできない。
525
525
@@ -552,8 +552,8 @@ Shape, Square および Triangle を使用した上記の例は、オブジェ
552
552
ラスのメソッドは、先頭に "super." を付けることで呼び出すことができる。
553
553
554
554
*E1377*
555
- 子クラスのメソッド (パブリックまたはプライベート ) のアクセスレベルは、スーパー
556
- クラスと同じである必要がある 。
555
+ 子クラスのメソッド (パブリックまたは protected ) のアクセスレベルは、スーパーク
556
+ ラスと同じである必要がある 。
557
557
558
558
基底クラスの他のオブジェクトメソッドは、子クラスによって引き継がれる。
559
559
@@ -590,22 +590,22 @@ Shape, Square および Triangle を使用した上記の例は、オブジェ
590
590
*E1318* *E1325* *E1388*
591
591
クラス内では、`:class ` と `:endclass ` の間に、次の項目を含めることができる:
592
592
- オブジェクト変数宣言: >
593
- this._privateVariableName : memberType
593
+ this._protectedVariableName : memberType
594
594
this.readonlyVariableName: memberType
595
595
public this.readwriteVariableName: memberType
596
596
- クラス変数宣言: >
597
- static _privateClassVariableName : memberType
597
+ static _protectedClassVariableName : memberType
598
598
static readonlyClassVariableName: memberType
599
599
static public readwriteClassVariableName: memberType
600
600
- コンストラクタメソッド: >
601
601
def new(arguments)
602
602
def newName(arguments)
603
603
- クラスメソッド: >
604
604
static def SomeMethod(arguments)
605
- static def _PrivateMethod (arguments)
605
+ static def _ProtectedMethod (arguments)
606
606
- オブジェクトメソッド: >
607
607
def SomeMethod(arguments)
608
- def _PrivateMethod (arguments)
608
+ def _ProtectedMethod (arguments)
609
609
610
610
オブジェクト変数の場合は、型を指定する必要がある。最善の方法は、": {type} " を
611
611
使用してこれを明示的に行うことである。単純な型の場合、"= 123" などの初期化子を
@@ -696,8 +696,8 @@ Note ここでは "v:none" 以外のデフォルト値を使用できないこ
696
696
ト変数を初期化したい場合は、それらが宣言されている場所で実行すること。この方法
697
697
では、デフォルト値を 1 箇所で確認するだけで済む。
698
698
699
- すべてのオブジェクト変数はデフォルトコンストラクタで使用され、プライベートアク
700
- セスのコンストラクタも使用される 。
699
+ すべてのオブジェクト変数は、アクセス保護されたものを含め、デフォルトのコンスト
700
+ ラクタで使用されます 。
701
701
702
702
クラスが別のクラスを拡張する場合、そのクラスのオブジェクト変数が最初に来る。
703
703
@@ -943,6 +943,18 @@ ClassName() メソッドはなく、ClassName というクラス内の別名の
943
943
なり混乱する。
944
944
945
945
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
+
946
958
オブジェクト変数へのデフォルトの読み取りアクセス ~
947
959
948
960
ユーザーの中には、オブジェクト変数のアクセスルールが非対称であると指摘する人も
@@ -958,35 +970,38 @@ ClassName() メソッドはなく、ClassName というクラス内の別名の
958
970
の少ないコードを作成するのに役立つ。
959
971
960
972
961
- アンダースコアを使用してオブジェクト変数をプライベートにする ~
973
+ アンダースコアを使用してオブジェクト変数を protected にする ~
962
974
963
975
オブジェクト変数がプライベートの場合、クラス内 (およびサブクラス内) でのみ読み
964
- 取りおよび変更でき、クラス外では使用できない。アンダースコアを先頭に付けること
965
- は、それを可視化する簡単な方法である。さまざまなプログラミング言語がこれを推奨
966
- している。
976
+ 取りおよび変更でき、クラス外では使用できない。
977
+
978
+ オブジェクト変数が保護されている場合、その変数はクラス内 (およびサブクラス内)
979
+ でのみ読み取りおよび変更でき、クラス外では使用できない。アンダースコアを先頭に
980
+ 付けることは、それを可視化する簡単な方法である。さまざまなプログラミング言語が
981
+ これを推奨している。
967
982
968
983
もし気が変わって、クラス外からオブジェクト変数にアクセスできるようにしたい場合
969
984
は、すべてのアンダースコアを削除する必要がある。
970
985
名前はクラス (およびサブクラス) の中にしか現れないため、見つけて変更するのは簡
971
986
単である。
972
987
973
988
逆の方法ははるかに困難である: クラス内のオブジェクト変数の先頭にアンダースコア
974
- を追加してプライベートにすることは簡単にできるが 、他の場所で使用されている場合
989
+ を追加して protected にすることは簡単にできるが 、他の場所で使用されている場合
975
990
は追跡して変更する必要がある。"set" メソッド呼び出しにする必要がある場合があ
976
991
る。これは、アクセスを奪うには、そのアクセスが存在するすべての場所に対して作業
977
992
を行う必要があるという現実の問題を反映している。
978
993
979
- 別の方法としては、"public" がアクセスを別の方向に変更するのと同様に、"private"
980
- キーワードを使用することもできる。まぁ、これはキーワードの数を減らすためなのだ
981
- が 。
994
+ 別の方法としては、"public" がアクセスを別の方向に変更するのと同様に、
995
+ "protected" キーワードを使用することもできる。まぁ、これはキーワードの数を減ら
996
+ すためなのだが 。
982
997
983
998
984
- オブジェクト変数に protected はない ~
999
+ オブジェクト変数に private はない ~
985
1000
986
1001
一部の言語では、オブジェクト変数へのアクセスを制御するいくつかの方法が提供され
987
1002
ている。
988
1003
最もよく知られているのは "protected" だが、その意味は言語によって異なる。他に
989
- は "shared", "private" さらには "friend" もある。
1004
+ は "shared", "private", "package" さらには "friend" もある。
990
1005
991
1006
これらのルールは人生をより困難にする。多くの人が同じ複雑なコードに取り組むプロ
992
1007
ジェクトでは、ミスを犯しやすいので、これは当然のことだ。特に、クラスモデルに対
0 commit comments